VeighNa量化社区
你的开源社区量化交易平台
1n
1n's Avatar
Member
离线
7 帖子
声望: 0

1n wrote:

针对换日信息,像AL这种 前一个状态是21:00 后一个状态时 1:00
def get_tick_status(self,tick:TickData):
"""
得到一个tick数据的合约所处交易状态
"""
status:StatusData = None
instrument = left_alphas(tick.symbol)
tick_time = tick.datetime.strftime("%H:%M:%S")
vt_symbol = f"{instrument}.{tick.exchange.value}"
if vt_symbol in self.trade_status_map:
status_dict = self.trade_status_map[vt_symbol]
curr_key = status_dict["current"]
next_key = status_dict["next"]
curr_status:StatusData = status_dict[curr_key]
next_status:StatusData = status_dict[next_key]
if curr_status.enter_time < next_status.enter_time:
if curr_status.enter_time <= tick_time < next_status.enter_time:
status = curr_status
elif next_status.enter_time <= tick_time:
status = next_status
else:
if curr_status.enter_time <= tick_time:
status = curr_status
elif next_status.enter_time > tick_time: #yzj修改
status = curr_status
elif next_status.enter_time <= tick_time:
status = next_status
return status

这个问题也需要解决啊,针对那些夜盘跨日的品种,您觉得呢

def save_status(self,status:StatusData):
"""
保存交易状态映射到交易状态映射
"""
vt_symbol = status.vt_symbol
if vt_symbol not in self.trade_status_map:
self.trade_status_map[vt_symbol] = {}
segment_sn_str = f"{status.trading_segment_sn}".rjust(2,'0')
self.trade_status_map[vt_symbol].update({"current":segment_sn_str})
self.trade_status_map[vt_symbol].update({segment_sn_str:status})
next_segment_sn = self._get_next_segment_sn(status.vt_symbol)
self.trade_status_map[vt_symbol].update({"next":next_segment_sn})
self.change = True
代码有BUG segment_sn_str = f"{status.trading_segment_sn}".rjust(2,'0') 应该改成time_str = status.enter_time 后续的segment_sn_str 也是time_str

这样修改才能和您的demo一样,难道不是吗

hxxjava wrote:

1n wrote:

get_tick_status也有问题,tick_time = tick.datetime.strftime("%H:%M:%S")直接把毫秒数据忽略了,这怎么能行?我的解决方案是tick_time = str(tick.datetime.time())

是的,这样更好。不过tick_time = tick.datetime.strftime("%H:%M:%S")也是没有问题的。
另外您对我前两个回帖怎么看呢

hxxjava wrote:

1n wrote:

get_tick_status也有问题,tick_time = tick.datetime.strftime("%H:%M:%S")直接把毫秒数据忽略了,这怎么能行?我的解决方案是tick_time = str(tick.datetime.time())

是的,这样更好。不过tick_time = tick.datetime.strftime("%H:%M:%S")也是没有问题的。
针对get_tick_status的问题,我的想法是CZCE会在下午15:00:300,15:00:800也会推过来tick,这个也被归到15:00行情里边去了,不能忽略呀

get_tick_status也有问题,tick_time = tick.datetime.strftime("%H:%M:%S")直接把毫秒数据忽略了,这怎么能行?我的解决方案是tick_time = str(tick.datetime.time())

针对换日信息,像AL这种 前一个状态是21:00 后一个状态时 1:00
def get_tick_status(self,tick:TickData):
"""
得到一个tick数据的合约所处交易状态
"""
status:StatusData = None
instrument = left_alphas(tick.symbol)
tick_time = tick.datetime.strftime("%H:%M:%S")
vt_symbol = f"{instrument}.{tick.exchange.value}"
if vt_symbol in self.trade_status_map:
status_dict = self.trade_status_map[vt_symbol]
curr_key = status_dict["current"]
next_key = status_dict["next"]
curr_status:StatusData = status_dict[curr_key]
next_status:StatusData = status_dict[next_key]
if curr_status.enter_time < next_status.enter_time:
if curr_status.enter_time <= tick_time < next_status.enter_time:
status = curr_status
elif next_status.enter_time <= tick_time:
status = next_status
else:
if curr_status.enter_time <= tick_time:
status = curr_status
elif next_status.enter_time > tick_time: #yzj修改
status = curr_status
elif next_status.enter_time <= tick_time:
status = next_status
return status

def save_status(self,status:StatusData):
"""
保存交易状态映射到交易状态映射
"""
vt_symbol = status.vt_symbol
if vt_symbol not in self.trade_status_map:
self.trade_status_map[vt_symbol] = {}
segment_sn_str = f"{status.trading_segment_sn}".rjust(2,'0')
self.trade_status_map[vt_symbol].update({"current":segment_sn_str})
self.trade_status_map[vt_symbol].update({segment_sn_str:status})
next_segment_sn = self._get_next_segment_sn(status.vt_symbol)
self.trade_status_map[vt_symbol].update({"next":next_segment_sn})
self.change = True
代码有BUG segment_sn_str = f"{status.trading_segment_sn}".rjust(2,'0') 应该改成time_str = status.enter_time 后续的segment_sn_str 也是time_str

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

沪公网安备 31011502017034号

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