vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 37
声望: 0

请教老师:
在由tick合成1分钟k线的如下函数中:
def update_tick(self, tick: TickData):
...
if self.last_tick:
volume_change = tick.volume - self.last_tick.volume
self.bar.volume += max(volume_change, 0)
self.last_tick = tick
如果是交易日的第一根1分钟k线的第一个tick,那不是没有self.last_tick吗?按上面的代码,这第一根1分钟k线的bar.volume 是不是就漏掉了第一个tick.volume了?
是否可改成:
def update_tick(self, tick: TickData):
...
if not self.last_tick:
self.bar.volume = tick.vvolume
elif self.last_tick:
volume_change = tick.volume - self.last_tick.volume
self.bar.volume += max(volume_change, 0)
self.last_tick = tick
请大佬们赐教。

Member
avatar
加入于:
帖子: 2013
声望: 133
  1. 如果进行你这样的修改的话,那么要求开盘时那个tick上的volume必须为0,那么就一定要在盘前打开(如果夜盘就要在夜盘前打开,但是现在CTP夜盘会关闭系统,早上开盘前重启了。 所以夜盘收盘后也要关闭VN Trader才行了。那么按你的修改,夜盘开盘的品种早上开盘也是会错的 );
  2. 交易中其实volume的值不是特别常用,而且是第一个tick的volume。但是如果有需要的话,就请使用米筐的数据服务或者自行修改BarGenerator了
Member
avatar
加入于:
帖子: 37
声望: 0

xiaohe wrote:

  1. 如果进行你这样的修改的话,那么要求开盘时那个tick上的volume必须为0,那么就一定要在盘前打开(如果夜盘就要在夜盘前打开,但是现在CTP夜盘会关闭系统,早上开盘前重启了。 所以夜盘收盘后也要关闭VN Trader才行了。那么按你的修改,夜盘开盘的品种早上开盘也是会错的 );
  2. 交易中其实volume的值不是特别常用,而且是第一个tick的volume。但是如果有需要的话,就请使用米筐的数据服务或者自行修改BarGenerator了
    谢谢指教。但我是没有看懂。还是觉得不管是不是特别常用,作为一分钟k线合成中的一个元素,bar.volume 的累加不应该没有交易日的第一根1分钟k线的第一个tick.volume(一般来讲它不会是0)
    1、正是基于认为开盘时那个tick上的volume不等于0,为了不漏掉这个volume才提出修改:
    if not self.last_tick:
    self.bar.volume = tick.vvolume
    为何老师说这个volume必须为0呢?我没能理解过来。
    2、我是购买了米筐的数据服务(但还没有做实盘用),请教:是不是有了米筐的数据服务,实盘中交易日的第一根1分钟k线的第一个tick,就会有对应的self.last_tick吗?是不是就能问题了?
    请再赐教。
Member
avatar
加入于:
帖子: 37
声望: 0

量甫 wrote:

xiaohe wrote:

  1. 如果进行你这样的修改的话,那么要求开盘时那个tick上的volume必须为0,那么就一定要在盘前打开(如果夜盘就要在夜盘前打开,但是现在CTP夜盘会关闭系统,早上开盘前重启了。 所以夜盘收盘后也要关闭VN Trader才行了。那么按你的修改,夜盘开盘的品种早上开盘也是会错的 );
  2. 交易中其实volume的值不是特别常用,而且是第一个tick的volume。但是如果有需要的话,就请使用米筐的数据服务或者自行修改BarGenerator了
    谢谢指教。但我是没有看懂。还是觉得不管是不是特别常用,作为一分钟k线合成中的一个元素,bar.volume 的累加不应该没有交易日的第一根1分钟k线的第一个tick.volume(一般来讲它不会是0)
    1、正是基于认为开盘时那个tick上的volume不等于0,为了不漏掉这个volume才提出修改:
    if not self.last_tick:
    self.bar.volume = tick.vvolume
    为何老师说这个volume必须为0呢?我没能理解过来。
    2、我是购买了米筐的数据服务(但还没有做实盘用),请教:是不是有了米筐的数据服务,实盘中交易日的第一根1分钟k线的第一个tick,就会有对应的self.last_tick吗?是不是就能解决问题了?
    请再赐教。
Member
avatar
加入于:
帖子: 2013
声望: 133
  1. 可能是我表述错误,如果你那样改,第一个收到的volume必须为0时刻的volume。如果此时盘中了,此时第一个tick上的volume已经是开盘到现在的累计量了。而且如果你交易有夜盘的品种,你早上开盘收到的第一个tick的volume会是夜盘到早上开盘时的累计量;
  2. 如果你要求第一根bar的交易量里一定要涵括早上第一个tick上的volume,你可以使用RQData数据服务,然后盘中打开,此时RQData推过来的数据里应该有早上第一根bar
Member
avatar
加入于:
帖子: 37
声望: 0

xiaohe wrote:

  1. 可能是我表述错误,如果你那样改,第一个收到的volume必须为0时刻的volume。如果此时盘中了,此时第一个tick上的volume已经是开盘到现在的累计量了。而且如果你交易有夜盘的品种,你早上开盘收到的第一个tick的volume会是夜盘到早上开盘时的累计量;
  2. 如果你要求第一根bar的交易量里一定要涵括早上第一个tick上的volume,你可以使用RQData数据服务,然后盘中打开,此时RQData推过来的数据里应该有早上第一根bar
    谢谢。这回明白了。
© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号