VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 2
声望: 0

借鉴系统自带的atr_rsi_strategy,我自己开发了一个策略,命名为atr_rsi_strategy111.py。当执行回测的时候,选择的【交易策略】的名称,还是atr_rsi_strategy,并不是我自己写的atr_rsi_strategy111。但是策略的内容代码是我自己写的那个。 请问下,如果要想在回测时,选择【交易策略】的名称是自己自定义的名称,该怎么设置?如下图

description

Super Moderator
avatar
加入于:
帖子: 77
声望: 8

在 VeighNa 中,策略的名称是由策略类的类名决定的,而不是文件名。如果你想在回测时看到自定义的策略名称,需要确保策略类的名称与你的期望一致。以下是具体步骤:


1. 修改策略类名

在你的 atr_rsi_strategy111.py 文件中,找到策略类的定义,并将其类名修改为你想要的名称。例如:

class AtrRsiStrategy111(CtaTemplate):
    """自定义 ATR RSI 策略"""
    author = "Your Name"  # 设置作者名称

    # 策略参数和逻辑
    ...
  • 注意:类名需要遵循驼峰命名法(CamelCase),且不能与现有策略类名重复。

2. 确保策略类名唯一

VeighNa 在加载策略时会检查类名是否唯一。如果类名与现有策略重复,可能会导致加载错误。因此,请确保你的策略类名是唯一的。


3. 放置策略文件

atr_rsi_strategy111.py 文件放置在 VeighNa 的 strategies 目录下。默认路径为:

  • Windows: C:\Users\YourUsername\strategies
  • Linux/Mac: /home/YourUsername/strategies

4. 重启 VeighNa Trader

修改策略类名并保存文件后,重启 VeighNa Trader,以确保新策略被正确加载。


5. 在回测中选择策略

  1. 打开 VeighNa Trader,进入 CtaBacktester 模块。
  2. 在【交易策略】下拉框中,你应该能看到 AtrRsiStrategy111(即你自定义的策略名称)。
  3. 选择该策略,配置回测参数并运行回测。

6. 验证策略加载

如果策略名称仍未显示,可以检查以下内容:

  • 确保策略文件已正确放置在 strategies 目录中。
  • 确保策略类名没有拼写错误。
  • 查看 VeighNa Trader 的日志,检查是否有加载策略时的错误信息。

7. 示例代码

以下是一个完整的示例策略文件 atr_rsi_strategy111.py

from vnpy.app.cta_strategy import (
    CtaTemplate,
    BarGenerator,
    ArrayManager,
    TickData,
    BarData
)

class AtrRsiStrategy111(CtaTemplate):
    """自定义 ATR RSI 策略"""
    author = "Your Name"

    # 策略参数
    atr_window = 14
    rsi_window = 14

    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """初始化策略"""
        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):
        """Tick 更新"""
        self.bg.update_tick(tick)

    def on_bar(self, bar: BarData):
        """K 线更新"""
        self.bg.update_bar(bar)
        self.am.update_bar(bar)
        if not self.am.inited:
            return

        # 策略逻辑
        atr = self.am.atr(self.atr_window)
        rsi = self.am.rsi(self.rsi_window)

        if rsi > 70 and self.pos == 0:
            self.buy(bar.close_price, 1)
        elif rsi < 30 and self.pos > 0:
            self.sell(bar.close_price, 1)

通过以上步骤,你应该能够在回测时看到并使用自定义的策略名称。如果仍有问题,请提供更多详细信息,以便进一步分析。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】