📈 Python实现代码
# 市场微观结构分析 - 订单簿博弈
import numpy as np
import pandas as pd
def calc_obl(order_book, levels=10):
"""
订单簿失衡度 (Order Book Imbalance)
OBL = (BidVol - AskVol) / (BidVol + AskVol)
"""
bids = order_book['bid_vol'][:levels]
asks = order_book['ask_vol'][:levels]
obl = (bids.sum() - asks.sum()) / (bids.sum() + asks.sum() + 1e-10)
return obl
def calc_vpin(trades, bucket_size=50):
"""
成交量同步概率 (Volume-Synchronized Probability of Informed Trading)
VPIN = |V_buy - V_sell| / V_total (per bucket)
"""
buys = trades[trades['side']=='buy']['volume']
sells = trades[trades['side']=='sell']['volume']
vpin = abs(buys - sells).sum() / trades['volume'].sum()
return vpin
def calc_adverse_selection(spread, mid_price_move):
"""
反向选择成本分解
价差 = 处理成本 + 库存成本 + 反向选择成本
"""
half_spread = spread / 2
# 简化:反向选择 ≈ 半价差与价格漂移的相关性
adverse_selection = abs(mid_price_move) / half_spread if half_spread > 0 else 0
return adverse_selection
def detect_spoofing(cancel_rate, large_order_ratio):
"""检测幌骗(spoofing)操纵"""
if cancel_rate > 0.7 and large_order_ratio > 0.3:
return "HIGH", "检测到高取消率+大单占比异常"
return "LOW", "未检测到明显操纵"
def classify_counterparty(trades):
"""
交易对手分类: 机构知情者 vs 噪声交易者
- 知情者: 连续盈利、低延迟、大单
- 噪声者: 随机交易、高延迟、小单
"""
results = []
for trader in trades['trader_id'].unique():
t = trades[trades['trader_id']==trader]
size_avg = t['volume'].mean()
latency = t['latency'].mean()
profit = t['pnl'].sum()
if profit > 0 and latency < 100 and size_avg > 100000:
cls = "INST" # 机构知情者
else:
cls = "NOISE" # 噪声交易者
results.append({'trader': trader, 'class': cls, 'size': size_avg, 'latency': latency})
return pd.DataFrame(results)
def nash_equilibrium_matrix(player_types, actions):
"""
构建博弈矩阵,计算纳什均衡策略
"""
nash = {}
for p1 in actions:
for p2 in player_types:
# 简化的收益矩阵
if p1 == '做多' and '知情' in p2:
payoff = 0.8
elif p1 == '做空' and '噪声' in p2:
payoff = 0.6
elif p1 == '观望':
payoff = 0.0
else:
payoff = -0.2
nash[(p1, p2)] = payoff
return nash
# 使用示例
print("=== 市场微观结构分析 ===")
print("OBL:", calc_obl(order_book))
print("VPIN:", calc_vpin(trades))
print("对手分类:", classify_counterparty(trades))