cta策略,暂停在重启,均线数据好像是没有更新,只有删除策略,重新添加策略后数据才是最新的,这个是啥原因?能改进下嘛
cta策略,暂停在重启,均线数据好像是没有更新,只有删除策略,重新添加策略后数据才是最新的,这个是啥原因?能改进下嘛
在 CTA 策略中,暂停后重启时均线数据没有更新,通常是由于策略的状态和缓存数据没有正确恢复导致的。以下是可能的原因及改进方法:
ArrayManager
或 BarGenerator
)可能没有正确保存或恢复。inited
状态或变量(如 pos
、bars
等)在重启时没有正确加载。在策略的 on_init
方法中,确保每次重启时都重新加载足够的历史数据:
def on_init(self):
"""策略初始化回调"""
self.write_log("策略初始化")
self.load_bar(10) # 加载 10 天的历史数据
确保策略的缓存数据(如 ArrayManager
或 BarGenerator
)在重启时正确恢复。可以在 on_init
方法中重新初始化这些组件:
def on_init(self):
"""策略初始化回调"""
self.write_log("策略初始化")
self.am = ArrayManager(size=100) # 重新初始化 ArrayManager
self.load_bar(10) # 加载 10 天的历史数据
确保策略的状态变量(如 pos
、bars
等)在重启时正确同步。可以在 on_start
方法中检查并更新这些变量:
def on_start(self):
"""策略启动回调"""
self.write_log("策略启动")
if not self.am.inited:
self.load_bar(10) # 如果未初始化,重新加载历史数据
在策略重启后,手动触发一次数据更新,确保均线数据是最新的。可以在 on_start
方法中调用 put_event
或 update_bar
:
def on_start(self):
"""策略启动回调"""
self.write_log("策略启动")
self.put_event() # 触发策略状态更新
确保策略的配置文件(如 cta_strategy_data.json
)正确保存了策略的状态和变量。如果文件损坏或未正确保存,可以手动删除该文件,让策略重新初始化。
print
或日志输出,检查 ArrayManager
或 BarGenerator
中的数据是否更新。通过以上改进方法,应该可以解决 CTA 策略暂停后重启时均线数据未更新的问题。如果问题仍然存在,可以提供更多细节以便进一步排查。