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:
推荐的标准方案:
- load_bar不传interval参数,默认加载分钟线
- 通过策略中创建的成员对象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函数吧
有调用的,十分费解