Optiver MM Game 2
🏓

Optiver MM Game 2

 

🎯 一、游戏核心目标

你的目标是:
在每一轮信息揭示后,利用你手上的信息(自己的牌 + 公共牌 + 各bot报价)判断市场的定价偏差,进行短线交易(买低卖高),并在下一轮前平仓,最大化期望PnL。

🧩 二、已知设定回顾

元素
说明
牌堆
39 张(去掉方块),黑牌 +10×点数,红牌 −10×点数
点数
A=1, 2=2, …, K=13
每张牌期望
μ = 7/3 × 10 = 23.33
总和目标
9 张牌:4张公共 + 你1张 + 4个bot各1张
市场结构
每一轮有:4个bot的个别市场 + 总和市场;每个市场都报 bid@ask
信息揭示
第0轮:无公共牌;第1–4轮:依次翻开第1至第4张公共牌;第2轮可花100提前看1张;第4轮可花500看最后一张
交易规则
卖打bid,买打ask;每轮都可与4个bot逐个交易;可以看总和市场价;建议每轮结束先平仓
最终PnL
所有交易盈亏 + 最终结算价变动 – 看牌费用

🧮 三、关键公式(记熟!)


(1) 单张期望值

μ = 23.33

(2) 反推Bot的手牌(信息提取)

在第 (k) 轮(已翻出 (k) 张公共牌):
其中:
  • :已翻出公共牌的总和(含正负)
  • (k):已揭示公共牌张数(0~4)

(3) 你对该Bot的EV(你的主观公平价)

其中:
  • :你的手牌(黑红有正负)

(4) 买卖判断

条件
操作
逻辑
买入(long 1)
市场低估总和,你预期会上涨
卖出(short 1)
市场高估总和,你预期会下跌
不交易
定价合理,点差吃掉优势

(5) 交易手数(risk-based)

其中 (spread = Ask - Bid)。
取整或上限控制(如 max 1 手)。

(6) 总和市场交易(可选)

对“总和市场”的公平价估计:
若 (),买入;若 (),卖出。

🧭 四、逐轮交易策略(清晰流程)


🔹 第0轮:未翻任何公共牌

输入: 你知道自己的牌 (),看到4个bot报价 & 总和市场价。
步骤:
  1. 计算每个bot的 mid 与反推手牌区间:
  1. 用 () 算出自己的EV。
  1. 比较Bid@Ask:
      • 若 ( → 买入该bot的市场(long 1);
      • → 卖出(short 1);
      • 否则不动。
  1. 总和市场判断(可选对冲):
    1. ,和总和市场价比较。
  1. 记录持仓与成本。
重点:
先只做方向最明确的1~2笔(EV 与 Ask/Bid 差距 > spread 的2倍以上),避免过度加仓。

🔹 第1轮:揭示第1张公共牌(值 = P1)

  1. 更新 , (k=1)。
  1. 重新计算每个bot的 mid & 反推手牌:
  1. 更新每个
  1. 与上轮持仓对比:
      • 若EV方向变反 → 平仓;
      • 若EV差距加大 → 加仓;
      • 若点差扩大 → 减仓。
  1. 可考虑 花100提前看第二张牌,条件:
      • 当前持仓较大(>2手或EV明显接近临界);
      • 预期信息能大幅减少不确定性。

🔹 第2轮:揭示第2张公共牌(或花100提前看)

  1. 更新
  1. 同步更新各bot的反推与EV。
  1. 重新比较价格:
      • → long;
      • → short。
  1. 平旧仓,重新建新仓(保持方向与EV一致)。
  1. 观察总和市场价是否滞后(可反向操作)。

🔹 第3轮:揭示第3张公共牌(值 = P3)

  1. 更新反推:
  1. 更新EV、调整仓位。
  1. 若波动放大(公共牌剧烈正负),先全平仓再观察价差再入场。

🔹 第4轮:揭示第4张公共牌(值 = P4)

  1. 更新反推:
  1. 再算每个
  1. 若最后一张未翻,可花500提前看
      • 若你持仓较大(≥3手);
      • 或4张公共牌合计绝对值>80(剧烈偏离平均)。
        • 此时提前看值大。
  1. 最后平仓准备结算。

🔹 最终摊牌:所有bot与公共牌揭示完毕

  1. 计算真实总和
  1. 你的PnL:
  1. 扣除看牌成本(100 或 500)。
  1. 统计总收益。

⚙️ 五、风险控制与细节

风控点
说明
持仓上限
单个bot最多1手,总敞口≤3手
每轮平仓
新一轮开始先平旧仓
价差判断
仅当超过spread时行动
对冲
若对多个bot方向一致,可在总和市场做反向对冲部分风险
记录
每笔记下:轮次、方向、价格、EV、PnL

📘 六、例子讲解(照步骤算)

假设:
  • 你牌:+50(黑5);
  • μ=23;
  • 第0轮报价:
Bot
Bid
Ask
Mid
推算 (c_{bot})
你的EV
操作
1
220
230
225
225−8×23=41
50+225−23=252
EV>Ask→买
2
250
260
255
255−8×23=71
50+255−23=282
EV>Ask→买
3
150
153
151.5
151.5−8×23=−32.5
50+151.5−23=178.5
EV<Bid→卖
4
225
230
227.5
227.5−8×23=43.5
50+227.5−23=254.5
EV>Ask→买
于是:
  • Long bot1@230
  • Long bot2@260
  • Short bot3@150
  • Long bot4@230
  • 平均价约 +PnL 替代见结算。
进入下一轮再按新牌更新。

🔮 七、策略核心总结(口诀)

每轮:看牌 → 算均值 → 推Bot → 比价差 → 只做极差 → 先平仓再开仓。
或更短一句:
EV高买、EV低卖、轮前平仓、价差优先、信息可买。

🧠 八、补充直觉图解

  • 当bot报的价越高 → 表示它手上牌可能越大(黑高牌),你倾向做空(因为市场高估总和)。
  • 当bot报的价越低 → 表示它手上可能是红牌(负数),你倾向做多。
  • 公共牌揭示的负值越多 → 总和期望下降,所有bot的mid会同步往下,你应先平多仓再评估新方向
  • 信息越多,EV区间越窄,交易越有把握。
  • 看牌花费相当于“买波动”,只有当你未平仓或波动加大时值得。

✅ 九、简化版“算法模板”伪代码

mu = 23.33 positions = [] for round in range(5): update_Scomm() for i in range(4): # 4 bots bid, ask = get_quote(i) mid = (bid + ask) / 2 EV = c_me + mid - mu if EV > ask + spread: # Buy positions.append(("long", i, ask)) elif EV < bid - spread: # Sell positions.append(("short", i, bid)) pnl = mark_to_market(positions) if round < 4: close_positions() # flatten at start of next round

🧭 十、最终效果

通过这套策略:
  • 你在每轮都系统化地提取 bot报价→反推手牌→算EV→比价差→决策→平仓
  • 不会被信息滞后或过度持仓困扰;
  • 清晰地控制市场风险;
  • 并在信息价值高的轮次理性决定是否“花钱看牌”。

是否希望我帮你把这个策略画成一张图表(流程图 + 公式框)
那样可以更直观看到每轮的输入、计算、决策与平仓逻辑。