请教大佬 tick过滤器的实例化在这里 ,没找到 在哪里调用tick数据的传输路径是什么样的
请教大佬 tick过滤器的实例化在这里 ,没找到 在哪里调用tick数据的传输路径是什么样的
逆火 wrote:
请教大佬 tick过滤器的实例化在这里 ,没找到 在哪里调用tick数据的传输路径是什么样的
def on_tick(self, tick: TickData) -> None:
"""
Tick event push.
Tick event of a specific vt_symbol is also pushed.
"""
self.on_event(EVENT_ORIGIN_TICK, tick) # hxxjava add
# if tick.first_time: # hxxjava add
# return
# self.on_event(EVENT_TICK, tick)
# self.on_event(EVENT_TICK + tick.vt_symbol, tick)
这里将EVENT_TICK消息类型替换为新定义的EVENT_ORIGIN_TICK消息。TickFilter都有注册了EVENT_ORIGIN_TICK消息,并且在其处理函数process_tick_event()中进行原始tick有效性判断和过滤,之后再将有效的tick转发到vnpy系统中供其他应用使用的,下面是TickFilter的tick过滤处理函数,其最后两句与原来的BaseGateway的on_tick()的作用是相同的。
def process_tick_event(self,event:Event):
""" 对原始tick进行过滤 """
tick:TickData = event.data
# 检查tick合约的经验状态是否位有效交易状态
status:StatusData = self.statuses.get(tick.vt_symbol,None)
if not status:
vt_instrument = get_vt_instrument(tick.vt_symbol)
status = self.statuses.get(vt_instrument,None)
if not status:
# 未收到交易状态,返回
return
if status.instrument_status not in VALID_TRADE_STATUSES:
# 不在有效交易状态,返回
return
key = (tick.gateway_name,tick.vt_symbol)
_,oldtick = self.last_ticks.get(key,(None,None))
valid_tick = False
if not oldtick:
# 没有该合约的历史tick
self.last_ticks[key] = (True,tick)
valid_tick = True
elif tick.datetime > oldtick.datetime:
#
self.last_ticks[key] = (True,tick)
valid_tick = True
# else:
# print(f"【特别tick = {tick}】")
if valid_tick == True:
# 如果是有效的tick
if status.instrument_status != InstrumentStatus.CONTINOUS:
# 发送集合竞价tic消息到系统中
self.event_engine.put(Event(EVENT_AUCTION_TICK,tick))
self.event_engine.put(Event(EVENT_AUCTION_TICK + tick.vt_symbol, tick))
else:
# 发送连续竞价tic消息到系统中
self.event_engine.put(Event(EVENT_TICK,tick))
self.event_engine.put(Event(EVENT_TICK + tick.vt_symbol, tick))
交易所推送status的时间是多久一次
逆火 wrote:
交易所推送status的时间是多久一次
答复:
- 通常一个品种一个交易日有1个集合竞价时间段,n个连续竞价时间段的话,那么会收到:
所以正常情况下会收到2n+3个交易状态非交易时间状态——1个 集合竞价开始状态——1个 集合竞价匹配状态——1个 第一个连续竞价状态——1个 第一次休市状态——1个 第二个连续竞价状态——1个 第二次休市状态 ——1个 ... 第n个连续竞价状态——1个 交易日收盘状态 ——1个
- 如果某个合约盘中因为极端行情导致停盘,延迟一段时间后再次回复交易,则每停盘1次就又会多收到1个停盘交易状态+1个连续交易状态。如果一个交易日如果停盘m次,则整个交易日会收到2n+2m+3个交易状态。
- 交易所推送交易状态根据不同品种或合约分别推送的,例如你可能在交易日的晚21:00收到约60多个连续竞价交易状态信息,这其中大部分是品种,也可能还包含一些具体合约的交易状态信息。
大佬 在用价差策略的时候,状态不对,请教
感谢分享,希望新版本可以加入这个功能
逆火 wrote:
大佬 在用价差策略的时候,状态不对,请教
9:15分以后 状态为集合竞价报单,收不到bar信息 所以我在想是不是系统在过滤掉了
感觉你的问题与TickFilter的过滤无关,因为:
由此可见:你的问题与TickFilter的过滤无关。
在add_gateway()中的这个语句跟哪里有联系没看出来,self.tick_filters 这个字典在哪里用到了??
逆火 wrote:
在add_gateway()中的这个语句跟哪里有联系没看出来,self.tick_filters 这个字典在哪里用到了??
哈喽 大佬,请教一个 股指期货怎么过滤开盘集合竞价阶段的tick
感谢大佬开源分享, 不过CTAStrategy只能做单个合约的交易, tickfilter能改用到vnpy_portfoliostrategy模块上吗? 在动手之前想偷懒问问您有没有什么需要注意的要点.