请问如何在策略里读取交易当天的开盘价,或者某时某刻的成交价?在dual thrust 的 例子里,是通过判定上一个bar和当前bar的日期不同,来决定当前bar是否开盘时刻,但这似乎不适用于有夜盘交易的?
请问如何在策略里读取交易当天的开盘价,或者某时某刻的成交价?在dual thrust 的 例子里,是通过判定上一个bar和当前bar的日期不同,来决定当前bar是否开盘时刻,但这似乎不适用于有夜盘交易的?
感谢回复!
我用来下面代码来读开盘价,烦请您看看对不对,
open_time = time(hour=9, minute=0)
if bar.datetime.time() == self.open_time:
self.open_price = bar.open_price
print(bar.datetime, self.open_price)
self.put_event()
open_price 被设成了变量,print出来的结果似乎是对的,但在策略面板上,open_price却老是几天前的值,不会更新到当天的值。这是怎么回事呢?
初始化完成的时候是显示的昨天的开盘价吧,今天的开盘价要启动策略到时间了才变吧
我是开盘之后才启动vnpy初始化策略的,程序正常是不是会自动调取rqdata的数,然后更新这个开盘价呢?
应该是
那我这个更新不了,是哪儿可能出问题了呢?数据库连接都没问题。或者应该怎么去查这个问题呢?感谢!
建议在更新day_open的前后都print看看是在哪一步出的问题
我在前后都加了print, 结果如下,9:00 之后,确实开盘价发生了变化,所以现在问题是这个最新数传不到面板上,但我用了self.put_event()啊,这个函数有啥讲究吗?多谢!
16650.0
2020-12-02 00:59:00+08:00 16650.0
16650.0
2020-12-02 09:00:00+08:00 16860.0
16860.0
那就请把.vntrader里的json文件cta_strategy_data删了再试一下,应该是之前也是用的S同一个名字创建的策略实例,然后缓存了退出之前的值
问题解决,太感谢了!以后是不是经常需要清理一下cta_strategy_data这个文件?
不是的,cta_strategy_data就是保存的你上一次跑的数据和指标。比如说你今天收盘策略持仓是-1,如果删掉json文件,那么明天初始化的时候会显示你策略持仓为0,这样就不对了。如果你盘前进行初始化,那么初始化结束正好就是显示昨天的开盘价,然后开盘推送第一根K线之后自然会随着逻辑判断变成今天的开盘价。如果还想今天一样盘后启动策略,想初始化之后day_open就是今天的开盘价,那么只把一定不能删的策略参数放在variables里应该就可以了(variables留空就只会保存策略持仓pos)。
可以看一下社区文档的实盘运行这一块https://www.vnpy.com/docs/cn/cta_strategy.html#id23
明白了,所以最好是在盘前就初始化。因为如果把“开盘价”放在variables里,然后开盘后初始化策略,”开盘价“就不会得到更新了,而只会沿用昨天的开盘价了。如果“开盘价”不放在variables里,是不是意味着面板上也看不到这个值了? 我的理解对吗? 感谢感谢!
是的,但是你初始化的时候本来就读取的前10天的数据进行指标的计算,初始化结束显示昨天的开盘价就是正确的。你开盘之后走到了判断逻辑就自然会更新成今天的开盘价了。
“开盘价”不放在variables里,面板上是看不到这个值了。
明白,非常感谢耐心帮助,您帮大忙了!!
我试了一下,“开盘价”不放在variables里,然后开盘后初始化策略,发现系统没有把今天开盘之后到我启动vnpy这段时间的数据加载进来,数据只是到昨天下午收盘为止。我在更新day_open的前加了print, 显示的结果是这样的,6620是昨天的开盘价,我是差不多10:13初始化策略的。请教一下这是为什么呢?
2020-12-02 14:56:00+08:00 6620.0
2020-12-02 14:57:00+08:00 6620.0
2020-12-02 14:58:00+08:00 6620.0
2020-12-02 14:59:00+08:00 6620.0
2020-12-03 10:13:00+08:00 6620.0
我是在判定开盘时间之前加了print,每一根k线传进来时,都会打印一下日开盘价,所以看到的是每分钟时间,加上 日“开盘价”。具体代码如下。您说的if not self.trading 下,是指初始化后,但没有开始交易吗?
open_time = time(hour=9, minute=0)
print(bar.datetime, self.open_price)
if bar.datetime.time() == self.open_time:
self.open_price = bar.open_price
print(bar.datetime, self.open_price)
初始化后,我在on_bar里打印bar的时间,就是到2020-12-02 14:59:00+08:00, 昨天夜盘数据也没进来,不知道怎么回事?哪块地方有可能影响到这个数据下载的区间段呢?多谢了。
实盘初始化调用的是vnpy.app.cta_strategy.engine里的load_bar函数,可以去这个函数里print一下start和end看看