|
@@ -8,7 +8,7 @@ from collections import deque
|
|
|
from logger_config import logger
|
|
from logger_config import logger
|
|
|
|
|
|
|
|
# 假设我们有一个数据流,订单簿和成交数据
|
|
# 假设我们有一个数据流,订单簿和成交数据
|
|
|
-order_book_snapshots = deque(maxlen=10000) # 存储过去100ms的订单簿快照
|
|
|
|
|
|
|
+order_book_snapshots = deque(maxlen=1000) # 存储过去10000个订单簿快照
|
|
|
|
|
|
|
|
# 数据积累的阈值
|
|
# 数据积累的阈值
|
|
|
DATA_THRESHOLD = 20
|
|
DATA_THRESHOLD = 20
|
|
@@ -28,16 +28,19 @@ def on_message_depth(_ws, message):
|
|
|
'asks': asks,
|
|
'asks': asks,
|
|
|
'timestamp': timestamp
|
|
'timestamp': timestamp
|
|
|
})
|
|
})
|
|
|
- process_depth_data(bids, asks)
|
|
|
|
|
|
|
|
|
|
|
|
+ if len(order_book_snapshots) >= DATA_THRESHOLD:
|
|
|
|
|
+ process_depth_data(order_book_snapshots)
|
|
|
|
|
|
|
|
-def process_depth_data(bids, asks):
|
|
|
|
|
|
|
+
|
|
|
|
|
+def process_depth_data(order_book_snapshots):
|
|
|
# 提取订单大小数据
|
|
# 提取订单大小数据
|
|
|
order_sizes = []
|
|
order_sizes = []
|
|
|
- for bid in bids:
|
|
|
|
|
- order_sizes.append(float(bid[1]))
|
|
|
|
|
- for ask in asks:
|
|
|
|
|
- order_sizes.append(float(ask[1]))
|
|
|
|
|
|
|
+ for snapshot in order_book_snapshots:
|
|
|
|
|
+ for bid in snapshot['bids']:
|
|
|
|
|
+ order_sizes.append(float(bid[1]))
|
|
|
|
|
+ for ask in snapshot['asks']:
|
|
|
|
|
+ order_sizes.append(float(ask[1]))
|
|
|
|
|
|
|
|
if len(order_sizes) < 2: # 确保有足够的数据进行计算
|
|
if len(order_sizes) < 2: # 确保有足够的数据进行计算
|
|
|
logger.warning("Not enough data to calculate kappa.")
|
|
logger.warning("Not enough data to calculate kappa.")
|
|
@@ -74,4 +77,14 @@ def process_depth_data(bids, asks):
|
|
|
return
|
|
return
|
|
|
|
|
|
|
|
# 计算kappa值
|
|
# 计算kappa值
|
|
|
- logger.info(f"Estimated beta_hat: {beta_hat}, beta_lsm: {beta_lsm}")
|
|
|
|
|
|
|
+ gamma = 0.1 # 库存风险厌恶参数
|
|
|
|
|
+ sigma = 0.02 # 市场波动率
|
|
|
|
|
+ T_minus_t = 1 # 交易会话的剩余时间
|
|
|
|
|
+
|
|
|
|
|
+ # 结合不同方法估算的β值,计算kappa
|
|
|
|
|
+ kappa_mle = (2 / (gamma * sigma ** 2 * T_minus_t)) * np.log(1 + (gamma / beta_hat))
|
|
|
|
|
+ kappa_lsm = (2 / (gamma * sigma ** 2 * T_minus_t)) * np.log(1 + (gamma / beta_lsm))
|
|
|
|
|
+
|
|
|
|
|
+ # 输出结果
|
|
|
|
|
+ logger.info(f"Estimated beta_hat (MLE): {beta_hat}, kappa (MLE): {kappa_mle}")
|
|
|
|
|
+ logger.info(f"Estimated beta_lsm (LSM): {beta_lsm}, kappa (LSM): {kappa_lsm}")
|