@@ -508,10 +508,18 @@ def _generate_headers(self, extra_headers=None):
508508 return headers
509509
510510 def _convert_tick (self , tick ):
511+ """"将原始数据转换为tick列表。
512+
513+ '{"symbol":"00700","type":"-+","sn":"17441","priceBase":"3552","priceOffset":1,"time":["1677119933174","97"],"price":["0","2"],"volume":["300","100"],"quoteLevel":"hkStockQuoteLv2","timestamp":"1677119933391","secType":"STK"}'
514+
515+ 转换为tick的列表:
516+ [{'tick_type': '-', 'price': 355.2, 'volume': 300, 'part_code': None, 'part_code_name': None, 'cond': None, 'time': 1677119933174, 'sn': 17441, 'quote_level': 'hkStockQuoteLv2', 'timestamp': 1677119933391, 'sec_type': 'STK'},
517+ {'tick_type': '+', 'price': 355.4, 'volume': 100, 'part_code': None, 'part_code_name': None, 'cond': None, 'time': 1677119933271, 'sn': 17442, 'quote_level': 'hkStockQuoteLv2', 'timestamp': 1677119933391, 'sec_type': 'STK'}]
518+ """
511519 data = json .loads (tick )
512520 symbol = data .pop ('symbol' )
513521 data = camel_to_underline_obj (data )
514- price_offset = 10 ** data .pop ('price_offset' )
522+ price_offset = 10 ** data .pop ('price_offset' , 0 )
515523 price_base = float (data .pop ('price_base' ))
516524 data ['timestamp' ] = int (data .get ('timestamp' ))
517525 prices = data .pop ('prices' ) if 'prices' in data else data .pop ('price' )
@@ -521,7 +529,7 @@ def _convert_tick(self, tick):
521529 time_items = [('time' , item ) for item in accumulate (times )]
522530 volumes = data .pop ('volumes' ) if 'volumes' in data else data .pop ('volume' )
523531 volume_items = [('volume' , int (item )) for item in volumes ]
524- tick_types = data .pop ('tick_type' ) if 'tick_type' in data else data .pop ('type' )
532+ tick_types = data .pop ('tick_type' ) if 'tick_type' in data else data .pop ('type' , None )
525533 if tick_types :
526534 tick_type_items = [('tick_type' , item ) for item in tick_types ]
527535 else :
@@ -534,8 +542,10 @@ def _convert_tick(self, tick):
534542 part_code_items = [('part_code' , None ) for _ in range (len (time_items ))]
535543 part_code_name_items = [('part_code_name' , None ) for _ in range (len (time_items ))]
536544 conds = data .pop ('cond' ) if 'cond' in data else None
537- cond_map = get_trade_condition_map (data .get ('quote_level' ))
545+ cond_map = get_trade_condition_map (data .get ('quote_level' , '' ))
538546 if conds :
547+ if len (time_items ) - len (conds ) > 0 :
548+ conds += ' ' * (len (time_items ) - len (conds ))
539549 cond_items = [('cond' , get_trade_condition (item , cond_map )) for item in conds ]
540550 else :
541551 cond_items = [('cond' , None ) for _ in range (len (time_items ))]
@@ -553,11 +563,12 @@ def _convert_tick(self, tick):
553563 try :
554564 item_dict = dict (item )
555565 except :
556- self .logger .error ('convert tick error' )
566+ self .logger .error (f 'convert tick error, item: { item } ' )
557567 continue
558568 item_dict .update (data )
559569 if item_dict .get ('merged_vols' ):
560- vols = item_dict .pop ('merged_vols' ).get ('vols' )
570+ m_vols = item_dict .pop ('merged_vols' )
571+ vols = m_vols .get ('vols' ) if 'vols' in m_vols else m_vols .get ('vol' )
561572 for i , vol in enumerate (vols ):
562573 sub_item = dict (item_dict )
563574 sub_item ['sn' ] = sub_item ['sn' ] * 10 + i
0 commit comments