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

请问价差交易模块没有缓存变量数据的功能吗?每次重启策略之后缓存的变量就消失了,怎么实现和cta策略一样将变量存在一个json文件内的功能?

Member
avatar
加入于:
帖子: 1887
声望: 142

自己在on_start/on_stop里实现一个json文件读写功能即可

Member
avatar
加入于:
帖子: 7
声望: 1

MTF wrote:

自己在on_start/on_stop里实现一个json文件读写功能即可
请问具体怎么实现呢,有参考案例吗?

Member
avatar
加入于:
帖子: 5527
声望: 334

load_json/save_json

Member
avatar
加入于:
帖子: 7
声望: 1

感谢解答,我已经实现了这个功能,代码如下供大家参考:

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()  # 停止时保存数据
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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