VeighNa量化社区
你的开源社区量化交易平台
utor's Avatar
Member
离线
14 帖子
声望: 0

环境
操作系统: Ubuntu 22.04
Python版本: Python3.10
VeighNa版本: 3.7
Issue类型
三选一:Bug

预期程序行为
正常回调

实际程序行为
相同的代码,在windows正常运行,但是在Ubuntu下出现如下问题:

发起授权验证CtpTdApi.authenticate()后,没有回调CtpTdApi.onRspAuthenticate(),导致直接卡死。

description

description

description

问题1:
为什么在strategy与algo中都有send_order,二者在应用场景上有什么区别?
strategy.send_order在strategy.buy/sell处调用,而strategy.buy/sell则是完全没用被调用过。

问题2:
目前套利程序貌似还不能实现在多个spread里使用相同的vt_symbol做leg,或者与其他策略(如CTA)一起使用相同的vt_symbol,会把leg的order, trade, position混在一起处理(无论是update_order/trade/position还是初始化时)

建议做一下区分,以防止出现持仓混淆的情况:
1.在send_order时根据order_id映射到对应的strategy
2.在process_order/trade/position里按strategy保存到数据库,同时推送到对应的strategy/algo里
3.在初始化时读取对应strategy的order, trade, position

像时变协整套利等策略,需要动态变化price_multiplier, trading_multiplier等参数,但是这些参数都在StDataEngine里add_strategy时根据json读取的,那应该如何在strategy端调整?以及怎么进行持久化保存参数?

我记得在原vnpy1.92版是具有这个功能,是vnpy2.09版移除了这个功能,还是我的程序出了BUG?

例如:对vnpy2.06进行了大量的定制化开发(如策略、参数、资金管理、风控等)后,当官方更新到2.09后,如何用git安全地合并最新的官方版本?

有什么方案是比较推荐的?
知乎上也有类似的问题:https://www.zhihu.com/question/23736465

在读套利模块源码时,有几个有疑惑的地方

问题一:
在legData.update_trade()里,为什么不需要处理new_pos<0的情况?
如果trade没有完全把旧仓位给平掉,那么不是会产生new_pos < 0的情况吗?
还是说直接默认了算法里会直接把旧仓位给全平?

description

问题二:
1.leg.net_position是根据contract.net_pos来获得的,而contract.net_pos包含了账户其他策略的净持仓,这样是否会跟其他策略的持仓混淆?
2.leg.net_pos_price是根据position.price来获得的,同样的也包含了账户其他策略的持仓的持仓价,这样是否会跟其他策略的持仓混淆?

问题三:关于套利模块的设计
为什么不采用类似CTA的递进层级设计(st_engine - st_strategy - st_algo),而是使用平行式的层级设计?
stengine - dataengine

     - strategyEngine - st_strategy
     - algoEngine - st_algo

我在使用过程中感觉第一种更容易管理和理解,而第二种虽然稍微灵活一点但是更加复杂且容易出错,所以有点疑惑为什么要采用这种设计?

1.相比1.9.2,为什么2.0.7的数据记录要把所有品种都放在同一个collection下?就算建了索引,但相比1.9.2的按品种分collection的方法,新版这种做法不是会导致数据插入和读取非常缓慢吗?

2.vnpy 2.0.7的exe安装版和github上的master,为什么有很多代码都不一样?两者不是用同一个版本的吗?
description

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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