VeighNa量化社区
你的开源社区量化交易平台
Member
离线
33 帖子
声望: 0

xiaohe wrote:

每一个tick都需要update才能生成bar,update时候都是更新进self.bars字典中对应的key
我说的是组合策略,多合约的情况下,tick很密集的来,PortfolioBarGenerator的update_tick函数会并行被调用,但是没有做多线程的保护,你看下代码嘛。

这么明显的问题官方不修复嘛?

多标的下,PortfolioBarGenerator生成K线会混乱的,因为每一个tick来,都会进入update_tick,没有做锁

xiaohe wrote:

可以参考一下公众号进阶课程【超越海龟策略精析】的第51课实盘分钟K线合成的内容,将绑定时间换成绑定合约试试
买这个课程的话,有官方群解答疑惑嘛?

xiaohe wrote:

是不是有不活跃的合约?
建议你参考一下三楼在合成分钟线的时候打印排查一下吧
没有不活跃的。打印的日志显示合成分钟线的函数被多次回调,比如说合成5分钟线,在第4分钟的时候会回调若干次,在第5分钟的时候会回调若干次,并且有些回调传入的bars里有些标的volume为空

有没有大佬解答下呀?困惑几天了。按理说这是组合策略最基本的功能呀。

连龙八卦 wrote:

能看下具体缺什么吗
比如说,我的组合策略里一共12个symbol,这样的代码
self.pbg = PortfolioBarGenerator(self.on_bars, 1, self.on_xminute_bars, Interval.HOUR)
def on_xminute_bars(self, bars: Dict[str, BarData]):
self.write_log("on_xminute_bars "+str(len(bars)))
on_xminute_bars的日志输出如下:
2023-08-04 15:59:00,365 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:00,521 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 15:59:00,662 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 15:59:01,012 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:01,518 INFO: MonitorStrategy: on_xminute_bars 3
2023-08-04 15:59:01,708 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:02,162 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:02,425 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:02,703 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 15:59:03,425 INFO: MonitorStrategy: on_xminute_bars 4
2023-08-04 15:59:03,667 INFO: MonitorStrategy: on_xminute_bars 4
2023-08-04 16:00:00,125 INFO: MonitorStrategy: on_xminute_bars 5
2023-08-04 16:00:00,360 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:00,360 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:00,500 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:00,812 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:00,905 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:01,076 INFO: MonitorStrategy: on_xminute_bars 2
2023-08-04 16:00:01,076 INFO: MonitorStrategy: on_xminute_bars 1
2023-08-04 16:00:01,470 INFO: MonitorStrategy: on_xminute_bars 1

16点整的日志输出说明,on_xminute_bars被调用了多次,且每一次传入的bars的长度都不是12,也就是缺了一些symbol的bar

xiaohe wrote:

可以参考vnpy_portfoliostrategy.utility里的PortfolioBarGenerator
使用文档里对这里的描述是“与CTA策略模块不同,多合约组合策略模块在接收K线推送时,是通过on_bars回调函数一次性接收该时间点上所有合约的K线数据,而不是通过on_bar函数一个个接收(无法判断当前时点的K线是否全部走完了 )。”,也就是on_bars会传入所有合约的bar,但是我实测出来的却不是这样,看源代码也没找到原因,求个解答

PortfolioBarGenerator的on_window_bars回调逻辑具体是啥?

监测A交易所的a标的,交易B交易所的b标的

MTF wrote:

推荐的标准方案:

  1. load_bar不传interval参数,默认加载分钟线
  2. 通过策略中创建的成员对象BarGenerator类,从1分钟合成其他周期的K线

具体推荐可以看下公众号小鹅通店铺里的《CTA实战》课程
好的,谢谢

MTF wrote:

具体要实现什么策略逻辑?
就是我从哪里设置我的策略是分钟线、小时线、日线策略?

MTF wrote:

load_bar的时候,有个可选参数interval,但是仅仅影响加载的历史数据周期
那在on_bar的时候,传入的bar是包括了minute/hour/daily的嘛?要通过代码筛选出来想要的bar?

ctastrategy里,在哪里设置interval?

xiaohe wrote:

可以关闭的时候在脚本里主动调用
因为是后台一直跑的程序,没有主动终止的逻辑,终止都是用kill进程做的……

xiaohe wrote:

是不是停止的时候没有调用stop_strategy函数缓存
没有调用,因为是noui模式一直后台运行,结束的方式也是通过kill进程结束的。请教下,这种场景下怎么调用stop_strategy?

MTF wrote:

检查下是否主动调用了put_event函数吧
有调用的,十分费解

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

沪公网安备 31011502017034号

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