借鉴系统自带的atr_rsi_strategy,我自己开发了一个策略,命名为atr_rsi_strategy111.py。当执行回测的时候,选择的【交易策略】的名称,还是atr_rsi_strategy,并不是我自己写的atr_rsi_strategy111。但是策略的内容代码是我自己写的那个。 请问下,如果要想在回测时,选择【交易策略】的名称是自己自定义的名称,该怎么设置?如下图
借鉴系统自带的atr_rsi_strategy,我自己开发了一个策略,命名为atr_rsi_strategy111.py。当执行回测的时候,选择的【交易策略】的名称,还是atr_rsi_strategy,并不是我自己写的atr_rsi_strategy111。但是策略的内容代码是我自己写的那个。 请问下,如果要想在回测时,选择【交易策略】的名称是自己自定义的名称,该怎么设置?如下图
在 VeighNa 中,策略的名称是由策略类的类名决定的,而不是文件名。如果你想在回测时看到自定义的策略名称,需要确保策略类的名称与你的期望一致。以下是具体步骤:
在你的 atr_rsi_strategy111.py
文件中,找到策略类的定义,并将其类名修改为你想要的名称。例如:
class AtrRsiStrategy111(CtaTemplate):
"""自定义 ATR RSI 策略"""
author = "Your Name" # 设置作者名称
# 策略参数和逻辑
...
VeighNa 在加载策略时会检查类名是否唯一。如果类名与现有策略重复,可能会导致加载错误。因此,请确保你的策略类名是唯一的。
将 atr_rsi_strategy111.py
文件放置在 VeighNa 的 strategies
目录下。默认路径为:
C:\Users\YourUsername\strategies
/home/YourUsername/strategies
修改策略类名并保存文件后,重启 VeighNa Trader,以确保新策略被正确加载。
CtaBacktester
模块。AtrRsiStrategy111
(即你自定义的策略名称)。如果策略名称仍未显示,可以检查以下内容:
strategies
目录中。以下是一个完整的示例策略文件 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)
通过以上步骤,你应该能够在回测时看到并使用自定义的策略名称。如果仍有问题,请提供更多详细信息,以便进一步分析。