请问价差交易模块没有缓存变量数据的功能吗?每次重启策略之后缓存的变量就消失了,怎么实现和cta策略一样将变量存在一个json文件内的功能?
请问价差交易模块没有缓存变量数据的功能吗?每次重启策略之后缓存的变量就消失了,怎么实现和cta策略一样将变量存在一个json文件内的功能?
自己在on_start/on_stop里实现一个json文件读写功能即可
MTF wrote:
自己在on_start/on_stop里实现一个json文件读写功能即可
请问具体怎么实现呢,有参考案例吗?
load_json/save_json
感谢解答,我已经实现了这个功能,代码如下供大家参考:
def __init__(self, strategy_engine, strategy_name: str, spread: SpreadData, setting: dict):
xxx
xxx
self.data_file = f"{strategy_name}_data.json" # 保存 JSON 文件的文件名
def get_json_file_path(self):
"""获取 JSON 文件的完整路径"""
return os.path.join("D:/x/xx/xxx/xxxx", self.data_file)
def load_json(self):
"""从 JSON 文件加载变量"""
file_path = self.get_json_file_path()
if os.path.exists(file_path):
try:
with open(file_path, "r") as file:
data = json.load(file)
# 恢复变量
for key in self.variables[2:]: # 跳过前两个变量(是否初始化和是否正在交易)
if key in data:
setattr(self, key, data[key])
self.write_log(f"策略变量已从 {file_path} 加载")
except Exception as e:
self.write_log(f"加载 JSON 文件出错: {e}")
else:
self.write_log("未找到文件,使用默认变量初始化")
def save_json(self):
"""将变量保存到 JSON 文件"""
file_path = self.get_json_file_path()
try:
data = {key: getattr(self, key) for key in self.variables}
with open(file_path, "w") as file:
json.dump(data, file, indent=4)
self.write_log(f"策略变量已保存到 {file_path}")
except Exception as e:
self.write_log(f"保存 JSON 文件出错: {e}")
def on_init(self):
xxx
def on_start(self):
self.write_log("策略启动")
xxx
self.load_json() # 启动时加载数据
def on_stop(self):
self.write_log("策略停止")
xxx
self.save_json() # 停止时保存数据