skyffire 1 жил өмнө
parent
commit
078bd54a86
1 өөрчлөгдсөн 33 нэмэгдсэн , 3 устгасан
  1. 33 3
      kappa/data_processing.py

+ 33 - 3
kappa/data_processing.py

@@ -8,7 +8,7 @@ import numpy as np
 from logger_config import logger
 
 # 假设我们有一个数据流,订单簿和成交数据
-order_book_snapshots = deque(maxlen=600)  # 存储过去1000个订单簿快照
+order_book_snapshots = deque(maxlen=600)  # 存储过去600个订单簿快照
 
 # 数据积累的阈值
 DATA_THRESHOLD = 20
@@ -73,7 +73,27 @@ def calculate_integral_phi(prices, k, S0, time_points):
     return integral_phi
 
 
+def estimate_lambda(waiting_times, T):
+    """
+    通过等待时间估计 λ(δ)
+    :param waiting_times: 等待时间的数组
+    :param T: 时间窗口的大小
+    :return: λ(δ) 的估计值
+    """
+    # 将 waiting_times 转换为 NumPy 数组
+    waiting_times = np.array(waiting_times)
+
+    sum_indicator = np.sum(waiting_times < T)
+    sum_waiting_times = np.sum(waiting_times)
+    lambda_hat = sum_indicator / sum_waiting_times
+    return lambda_hat
+
+
 def process_depth_data(order_book_snapshots):
+    # 数据预热,至少10条数据才能用于计算
+    if len(order_book_snapshots) < 10:
+        return
+
     global k_initial, A_initial, S0
     S_values = [((snapshot['bids'][0][0] + snapshot['asks'][0][0]) / 2) for snapshot in order_book_snapshots]
 
@@ -82,11 +102,21 @@ def process_depth_data(order_book_snapshots):
 
     # 提取时间戳并计算时间间隔
     timestamps = [snapshot['timestamp'] for snapshot in order_book_snapshots]
-    time_points = [(timestamp - timestamps[0]).total_seconds() for timestamp in timestamps]
+    order_book_time_points = [(timestamp - timestamps[0]).total_seconds() for timestamp in timestamps]
 
     # 计算 ∫ φ(k, ξ) dξ
-    integral_phi_value = calculate_integral_phi(S_values, k_initial, S0, time_points)
+    integral_phi_value = calculate_integral_phi(S_values, k_initial, S0, order_book_time_points)
 
     # 计算 log(∫ φ(k, ξ) dξ)
     log_integral_phi_value = np.log(integral_phi_value)
     logger.info("log(∫ φ(k, ξ) dξ) 的值: " + str(log_integral_phi_value))
+
+    # 计算等待时间
+    waiting_times = [order_book_time_points[i] - order_book_time_points[i - 1] for i in range(1, len(order_book_time_points))]
+    T = 0.25  # 时间窗口的大小
+
+    # 估计 λ(δ)
+    lambda_hat = estimate_lambda(waiting_times, T)
+    log_lambda_hat_value = np.log(lambda_hat)
+    logger.info("log(λ(δ)) 的值: " + str(log_lambda_hat_value))
+