按照课程步骤在user/adminstrator 下创建strategies 文件夹并创建demo_strategy.py文件,所有代码和课程内一样,但是打开vn station回测里面并没有这个策略。如何解决?
按照课程步骤在user/adminstrator 下创建strategies 文件夹并创建demo_strategy.py文件,所有代码和课程内一样,但是打开vn station回测里面并没有这个策略。如何解决?
请问启动目录是在user/adminstrator下吗?
是的。 只不过我的用户名是自己的。底下是按照课程敲进去的代码。查过几遍了 应该是一样的。。
from calendar import c
from multiprocessing.dummy import Array
from termios import TIOCPKT_DATA
from typing import Any
from vnpy_ctastrategy import (
CtaTemplate
)
from vnpy.trader.object import (
BarData,
TickData
)
from vnpy.trader.utility import (
BarGenerator,
ArrayManager
)
class DemoStrategy(CtaTemplate):
""""""
author = "Leo Fang"
# 定义参数
fast_window = 10
slow_window = 20
# 定义变量
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
parameters = [
"fast_window",
"slow_window"
]
variables = [
"fast_ma0",
"fast_ma1",
"slow_ma0",
"slow_ma1",
]
def __init__(
self,
cta_engine: Any,
strategy_name: str,
vt_symbol: str,
setting: dict,
):
super().__init__(
cta_engine, strategy_name, vt_symbol, setting
)
self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
def on_init(self):
self.write_log("策略初始化")
self.load_bar(10)
def on_start(self):
self.write_log("策略启动")
def on_stop(self):
self.write_log("策略停止")
def on_tick(self, tick: TickData):
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
am = self.am
am.update_bar(bar)
if not am.inited:
return
fast_ma = am.sma(self.fast_window, array=True)
fast_ma0 = fast_ma[-1]
fast_ma1 = fast_ma[-2]
slow_ma = am.sma(self.slow_window, array=True)
slow_ma0 = slow_ma[-1]
slow_ma1 = slow_ma[-2]
cross_over = (self.fast_ma0 >= self.slow_ma0 and
self.fast_ma1 < self.slow_ma1)
cross_below = (self.fast_ma0 <= self.slow_ma0 and
self.fast_ma1 > self.slow_ma1)
if cross_over:
price = bar.close_price + 5
if not self.pos:
self.buy(price,1)
elif self.pos < 0:
self.cover(price,1)
self.buy(price, 1)
elif cross_below:
price = bar.close_price - 5
if not self.pos:
self.short(price, 1)
elif self.pos > 0:
self.sell(price, 1)
self.short(price, 1)
self.put_event()
请问示例策略能显示吗?如果不能,请升级至最新版再试试
如果示例策略能显示,可以自己在vnpy_ctabacktester.engine的load_strategy_class函数下打印一下读取的path
是这段代码吗 具体如何添加Path呢?
def load_strategy_class(self):
"""
Load strategy class from source code.
"""
app_path = Path(vnpy_ctastrategy.__file__).parent
path1 = app_path.joinpath("strategies")
self.load_strategy_class_from_folder(path1, "vnpy_ctastrategy.strategies")
path2 = Path.cwd().joinpath("strategies")
self.load_strategy_class_from_folder(path2, "strategies")
你打印一下path2看看是否是你放置策略的路径
同问一样的问题, 可以显示自带的策略类, 但是自己新建的不能显示. 新建的策略,代码完全复制双均线或者atr的,不存在代码有错误的问题.
问题解决了, 历史回测显示的是 策略代码里面的类名, 不是文件名, 如果类名一样就只显示一个