VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 9
声望: 0

改写了vnpy_portfoliostrategy 海龟策略, 目的是增加保存策略运行过程中产生的中间变量, 例如建仓价格, 建仓后时的atr值等, 以字典的形式保存.

varables = ["signal"]

# code ......
            self.signals[vt_symbol] = {
                "contract_size": contract_size,
                "target": 0,
                "factor": {
                    "entry_up": 0.0,
                    "entry_down": 0.0,
                    "exit_up": 0.0,
                    "exit_down": 0.0,
                    "n": 0.0,
                    "long_entry": 0.0,
                    "short_entry": 0.0,
                    "target": 0,
                    "traded": False,
                    "am": ArrayManager(size=20),
                    "bg": DailyBarGenerator(self.on_daily_bar, time(14, 59))
                }
            }

在开源版本vnpy_portfoliostrategy上初始化没有问题, 但是在Elite版本上, 添加策略实例后UI界面无法显示.

description

description

关于这个问题, 怎么改能在Elite上显示signals这个变量呢?

portfoliostrategy由于涉及到多合约变量, 怎样保存中间变量更为合适呢?

感谢大佬解答!

Member
avatar
加入于:
帖子: 5107
声望: 307

elite版本不显示是因为底层报错了
现在再用开源版本打开底层会报错吗?
如果有json相关的报错,是json文件保存不了str\bool\int\float这四种基础数据以外的类型

Member
avatar
加入于:
帖子: 9
声望: 0

确实, 开源版本能够实例化策略, 初始化, 启动交易策略, 但是在停止策略时就会报错JSON相关错误.

Traceback (most recent call last):
  File "C:\veighna_studio\lib\site-packages\vnpy_portfoliostrategy\ui\widget.py", line 258, in stop_strategy
    self.strategy_engine.stop_strategy(self.strategy_name)
  File "C:\veighna_studio\lib\site-packages\vnpy_portfoliostrategy\engine.py", line 445, in stop_strategy
    self.sync_strategy_data(strategy)
  File "C:\veighna_studio\lib\site-packages\vnpy_portfoliostrategy\engine.py", line 522, in sync_strategy_data
    save_json(self.data_filename, self.strategy_data)
  File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 119, in save_json
    json.dump(
  File "C:\veighna_studio\lib\json\__init__.py", line 179, in dump
    for chunk in iterable:
  File "C:\veighna_studio\lib\json\encoder.py", line 431, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "C:\veighna_studio\lib\json\encoder.py", line 405, in _iterencode_dict
    yield from chunks
  File "C:\veighna_studio\lib\json\encoder.py", line 405, in _iterencode_dict
    yield from chunks
  File "C:\veighna_studio\lib\json\encoder.py", line 405, in _iterencode_dict
    yield from chunks
  [Previous line repeated 2 more times]
  File "C:\veighna_studio\lib\json\encoder.py", line 438, in _iterencode
    o = _default(o)
  File "C:\veighna_studio\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ArrayManager is not JSON serializable

请问下portfoliostrategy该如何保存策略运行时产生的中间变量呢?
variables只能保存不可变类型的变量的话, 多品种的variables如何保存更好呢.
感谢!

Member
avatar
加入于:
帖子: 5107
声望: 307

可以参考示例策略trend_following_strategy,即使不缓存策略初始化的时候也会拉取历史数据计算指标值的
如果非要缓存,可以自己试着用pickle缓存维护了

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

沪公网安备 31011502017034号

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