按照课程步骤在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的,不存在代码有错误的问题.
问题解决了, 历史回测显示的是 策略代码里面的类名, 不是文件名, 如果类名一样就只显示一个