Bladeren bron

feat(record): 扩展市场数据记录以包含orderbook信息

修改TradingStrategy和market_data_recorder以存储和传递完整的orderbook市场信息,而不仅仅是symbol映射。这为策略提供了更全面的市场数据支持。

- 将market_id_to_symbol改为market_id_to_orderbook存储完整市场信息
- 在策略调用时传递orderbook数据
- 优化日志输出避免信息过载
skyfffire 1 week geleden
bovenliggende
commit
85fb56343e
2 gewijzigde bestanden met toevoegingen van 19 en 11 verwijderingen
  1. 17 10
      src/record/market_data_recorder.py
  2. 2 1
      src/record/strategy.py

+ 17 - 10
src/record/market_data_recorder.py

@@ -55,7 +55,8 @@ QUESTDB_TABLE_PREFIX = "lighter_binance"  # 表前缀,用于隔离其他项目
 INFLUX_URL = f"http://{QUESTDB_HOST}:{QUESTDB_INFLUX_PORT}/write"
 
 # 全局变量存储market_id到symbol的映射
-market_id_to_symbol = {}
+# 存储market_id到orderbook(市场信息)的映射,不是深度信息
+market_id_to_orderbook = {}
 
 # 全局变量存储最新的Market Stats数据
 market_stats_cache = {}
@@ -122,8 +123,8 @@ async def fetch_binance_ticker_price(session):
 
 
 def update_market_id_mapping(orderbooks_data):
-    """更新market_id到symbol的映射"""
-    global market_id_to_symbol
+    """更新market_id到orderbook(市场信息)的映射"""
+    global market_id_to_orderbook
     if not orderbooks_data:
         return
     
@@ -132,9 +133,11 @@ def update_market_id_mapping(orderbooks_data):
             market_id = orderbook.get('market_id')
             symbol = orderbook.get('symbol')
             if market_id is not None and symbol:
-                market_id_to_symbol[market_id] = symbol
+                market_id_to_orderbook[market_id] = orderbook
         
-        logger.info(f"更新market_id映射,共 {len(market_id_to_symbol)} 个交易对,{market_id_to_symbol}")
+        # 只打印映射数量和symbol信息,避免日志过长
+        symbols_info = {market_id: orderbook.get('symbol') for market_id, orderbook in market_id_to_orderbook.items()}
+        logger.info(f"更新market_id映射,共 {len(market_id_to_orderbook)} 个交易对,{symbols_info}")
     except Exception as e:
         logger.error(f"更新market_id映射时出错: {str(e)}")
 
@@ -234,7 +237,7 @@ async def handle_market_stats_websocket():
                                     "timestamp": time.time()
                                 }
                                 
-                                symbol = market_id_to_symbol.get(market_id, f"UNKNOWN_{market_id}")
+                                symbol = market_id_to_orderbook.get(market_id, {}).get('symbol', f"UNKNOWN_{market_id}")
                                 logger.debug(f"更新Market Stats缓存 - {symbol}(ID:{market_id}): mark_price={market_data.get('mark_price')}, last_trade_price={market_data.get('last_trade_price')}")
                             
                             # # 触发策略更新
@@ -314,10 +317,11 @@ async def trigger_strategy_update():
         return
     
     # 遍历所有匹配的交易对,调用策略
-    for market_id, symbol in market_id_to_symbol.items():
+    for market_id, orderbook in market_id_to_orderbook.items():
         if market_id not in market_stats_cache:
             continue
         
+        symbol = orderbook.get('symbol')
         binance_symbol = f"{symbol}USDT"
         if (binance_symbol not in binance_data_cache['mark_prices'] or 
             binance_symbol not in binance_data_cache['latest_prices']):
@@ -330,7 +334,8 @@ async def trigger_strategy_update():
             'binance_price': binance_data_cache['latest_prices'][binance_symbol],
             'lighter_mark_price': lighter_stats.get('mark_price'),
             'lighter_price': lighter_stats.get('last_trade_price'),
-            'timestamp': int(time.time() * 1000)
+            'timestamp': int(time.time() * 1000),
+            'orderbook': orderbook  # 传入orderbook(市场信息,不是深度信息)
         }
         
         # 调用策略
@@ -350,12 +355,14 @@ def process_data():
     batch_data = []
     matching_count = 0
     
-    # 遍历market_id_to_symbol映射,查找匹配的交易对
-    for market_id, symbol in market_id_to_symbol.items():
+    # 遍历market_id_to_orderbook映射,查找匹配的交易对
+    for market_id, orderbook in market_id_to_orderbook.items():
         # 检查Lighter数据是否存在
         if market_id not in market_stats_cache:
             continue
             
+        # 获取交易对符号
+        symbol = orderbook.get('symbol')
         # 构造Binance交易对名称
         binance_symbol = f"{symbol}USDT"
         

+ 2 - 1
src/record/strategy.py

@@ -77,7 +77,8 @@ class TradingStrategy:
                 'binance_price': float,
                 'lighter_mark_price': float,
                 'lighter_price': float,
-                'timestamp': int
+                'timestamp': int,
+                'orderbook': dict  # 市场信息(market_info),不是深度信息
             }
         """
         if not market_data: