必发指数变化分析实用脚本思路
必发(Betfair)指数是博彩市场中反映资金流向和市场预期的重要指标,其变化能揭示庄家/大户的动向,下面从数据获取、指标计算、变化识别、信号解读四层来讲。

必发指数的核心指标
分析前先明确要跟踪的字段:
| 指标 | 含义 |
|---|---|
| 成交量(Volume) | 该选项累计成交金额 |
| 成交价(Odds) | 当前赔率 |
| 资金占比(%) | 某选项成交量 / 总成交量 |
| 挂牌量 | 未成交的挂单量 |
| 冷热指数 | 实际成交量占比 vs 理论概率占比 |
脚本分析框架
数据采集层
import requests
import pandas as pd
from datetime import datetime
def fetch_betfair_snapshot(market_id):
"""抓取某一时刻的必发盘口快照"""
url = f"https://api.example.com/market/{market_id}"
r = requests.get(url, timeout=10).json()
return {
"time": datetime.now(),
"home_vol": r["runners"][0]["totalMatched"],
"draw_vol": r["runners"][1]["totalMatched"],
"away_vol": r["runners"][2]["totalMatched"],
"home_odds": r["runners"][0]["lastPriceTraded"],
"draw_odds": r["runners"][1]["lastPriceTraded"],
"away_odds": r["runners"][2]["lastPriceTraded"],
}
时间序列存储
history = []
def poll(interval=60, duration=3600):
end = time.time() + duration
while time.time() < end:
history.append(fetch_betfair_snapshot("1.234567"))
time.sleep(interval)
df = pd.DataFrame(history).set_index("time")
变化分析的四个维度
维度1:成交量增速(资金流入速度)
df["home_vol_delta"] = df["home_vol"].diff() # 单期增量 df["home_vol_rate"] = df["home_vol"].pct_change() # 增速
- 增速突然放大 → 有大资金进场
- 某选项持续高增速 → 市场看好该结果
维度2:资金占比迁移
total = df[["home_vol","draw_vol","away_vol"]].sum(axis=1) df["home_pct"] = df["home_vol"] / total df["away_pct"] = df["away_vol"] / total
- 主胜占比从 45% → 60% 而赔率未降 → 庄家吸筹/诱盘
- 占比与赔率背离 = 异常信号
维度3:赔率-资金背离度
# 理论赔率 = 1 / 资金占比 df["home_fair_odds"] = 1 / df["home_pct"] df["home_premium"] = df["home_odds"] - df["home_fair_odds"]
premium > 0:实际赔率高于理论 → 该选项被低估,可能有价值- 持续负溢价 + 资金涌入 → 庄家压赔率防赔付
维度4:冷热指数
df["home_heat"] = df["home_pct"] / (1/df["home_odds"] /
(1/df["home_odds"]+1/df["draw_odds"]+1/df["away_odds"]))
- 冷热 > 1 表示该选项偏热(资金多于概率)
- 结合临场变化可判断是否被"造热"
信号识别(关键应用)
常见模式
| 模式 | 特征 | 解读 |
|---|---|---|
| 临场急升 | 开赛前30分钟成交量暴增 | 大户进场,参考价值高 |
| 赔率倒挂 | 资金占比升但赔率反升 | 庄家诱多,警惕反向 |
| 冷门吸筹 | 冷门选项占比缓慢上升 | 内部消息或精准资金 |
| 资金离场 | 某选项占比持续下降 | 市场否定该结果 |
自动标记脚本
def detect_signals(df, window=10):
signals = []
# 1. 急升检测
recent = df["home_vol_rate"].tail(window)
if recent.mean() > 0.5:
signals.append("主胜资金急升")
# 2. 背离检测
if df["home_premium"].iloc[-1] < -0.3 and df["home_pct"].iloc[-1] > 0.5:
signals.append("主胜高占比低赔率,防诱盘")
return signals
可视化建议
import matplotlib.pyplot as plt fig, ax1 = plt.subplots() ax1.plot(df.index, df["home_odds"], 'r-', label="主胜赔率") ax2 = ax1.twinx() ax2.plot(df.index, df["home_pct"], 'b--', label="主胜资金占比")"赔率 vs 资金占比背离图") plt.show()
双轴折线图最能直观看出赔率与资金的背离。
实战注意点
- 数据延迟:必发公开数据有延迟,勿用于实时套利
- 样本量:低成交量场次(<10万)信号不可靠
- 多市场交叉:结合亚盘、欧赔一齐看,单一必发指数易被误导
- 时间窗口:越接近开赛,信号权重越高
- 回测验证:用历史数据先验证信号胜率再实盘
如果你手头有具体的脚本或数据格式,可以发上来,我可以帮你逐行解析逻辑、优化信号阈值或补充回测模块。