实用脚本如何结合伤停信息调仓?

wen 实用脚本 3

实用脚本如何结合伤停信息调仓?

结合伤停信息调仓,核心是把非结构化/半结构化的伤停情报转成可执行的调仓信号,下面给你一套完整的脚本框架和落地思路。

实用脚本如何结合伤停信息调仓?


整体架构

伤停数据源 → 抓取/解析 → 结构化存储 → 影响度评分 → 生成调仓信号 → 执行/回测

关键不是"抓到伤停",而是量化伤停对球队/球员价值的影响。


数据源选择

类型 示例 获取方式
官方伤病报告 NBA Injury Report、英超官网 API/爬虫
体育媒体 ESPN、Rotowire、Transfermarkt 爬虫 + LLM 抽取
博彩赔率变化 Pinnacle、Betfair 赔率API(隐含伤停信息)
社交媒体 球队官推、记者推特 Twitter API

推荐组合:官方报告(准确)+ 赔率变化(及时)+ LLM 解析新闻稿(覆盖广)。


脚本核心模块

伤停抓取与结构化

import requests
from bs4 import BeautifulSoup
import pandas as pd
def fetch_injuries(team, date):
    # 示例:从 ESPN 抓取
    url = f"https://www.espn.com/{sport}/injuries"
    r = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
    soup = BeautifulSoup(r.text, "html.parser")
    injuries = []
    for row in soup.select("table.injuries tr"):
        cols = [c.get_text(strip=True) for c in row.find_all("td")]
        if len(cols) >= 4:
            injuries.append({
                "team": cols[0],
                "player": cols[1],
                "position": cols[2],
                "status": cols[3],   # Out / Day-To-Day / Questionable
                "date": date
            })
    return pd.DataFrame(injuries)

用 LLM 解析非结构化新闻

from openai import OpenAI
PROMPT = """从下面新闻中抽取伤停信息,输出 JSON:
{news}
字段: player, team, status(Out/Doubtful/Questionable/Probable), 
expected_return, importance(1-10)"""
def parse_news(news_text):
    resp = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": PROMPT.format(news=news_text)}],
        response_format={"type": "json_object"}
    )
    return json.loads(resp.choices[0].message.content)

影响度评分(关键)

把"谁伤了"转成"球队实力变化多少"。

def injury_impact(player, team, status, base_value):
    """
    base_value: 球员对球队的边际贡献(可用 PER、BPM、xG 贡献等)
    """
    status_weight = {
        "Out": 1.0,
        "Doubtful": 0.7,
        "Questionable": 0.4,
        "Probable": 0.1,
        "Day-To-Day": 0.3,
    }
    # 位置深度调整:替补深度好的球队影响打折
    depth_factor = get_bench_depth(team, player.position)
    return base_value * status_weight.get(status, 0.5) * depth_factor

球员价值来源:

  • NBA:PER、BPM、RAPTOR、On/Off 净效率
  • 足球:xG/xA、Transfermarkt 身价、分钟权重
  • 棒球:WAR

生成调仓信号

def generate_signal(team, injuries_df, market_line):
    total_impact = injuries_df.apply(
        lambda r: injury_impact(r.player, team, r.status, get_value(r.player)), axis=1
    ).sum()
    # 换算成对让分/胜负的影响(经验系数)
    line_shift = -total_impact * 0.15   # 每单位 impact 影响 0.15 分
    fair_line = market_line + line_shift
    edge = fair_line - market_line
    if abs(edge) < 0.5:
        return {"action": "HOLD"}
    return {
        "action": "BUY" if edge > 0 else "SELL",
        "edge": edge,
        "size": min(abs(edge) / 2, 1.0),  # 凯利简化版
    }

调仓触发规则(实战建议)

触发条件 动作
核心球员 Out 且替代者弱 下调球队评级 / 卖出相关持仓
关键球员 Probable 复出 上调评级 / 买入
赔率已反应(>80% 定价) 不追,等回调
赛前 1 小时突发的 inactive 快速执行(半自动)
长期伤停 → 短期回归 提前布局

回测与验证

# 记录每次信号 → 赛后结算
def backtest(signals_df, results_df):
    merged = signals_df.merge(results_df, on=["game_id"])
    merged["pnl"] = merged.apply(
        lambda r: r.edge if r.result_match else -r.edge, axis=1
    )
    return merged.pnl.cumsum(), merged.pnl.mean()

必看指标:

  • 按伤停严重度分组的胜率
  • 信号到开赛的时间衰减曲线(越早越准?还是越晚?)
  • 与赔率变化的领先/滞后关系

常见坑

  1. 重复计数:同一球员多源报道,需去重(用 player_id + date)
  2. 假消息:主教练赛前烟雾弹,需交叉验证(官方 + 赔率)
  3. 过拟合:impact 系数别调太细,用滚动窗口验证
  4. 时区/赛程:跨时区比赛,抓取时间要对齐
  5. 流动性:小市场调仓滑点吃掉 edge

最小可用脚本(MVP)

# main.py 每日流程
def daily_pipeline(date):
    injuries = fetch_injuries_all(date)          # 抓取
    injuries = dedupe(injuries)                  # 去重
    injuries["impact"] = injuries.apply(score, axis=1)  # 评分
    teams = injuries.groupby("team").impact.sum()       # 汇总
    lines = get_market_lines(date)               # 市场线
    signals = [generate_signal(t, teams[t], lines[t]) for t in teams.index]
    execute(signals)                             # 执行
    log(signals, date)                           # 记录回测

进阶方向

  • 图神经网络:球员-球队-位置关系建模影响传导
  • 赔率异动检测:把伤停作为赔率变化的解释变量,反推市场定价效率
  • LLM Agent:自动监控记者推特 → 实时预警 → 半自动下单
  • 多运动通用化:抽象出 Player Value 接口,NBA/足球/棒球共用

如果你告诉我具体运动(NBA/足球/电竞)+ 交易品种(让分/胜负/球员数据)+ 数据预算,我可以给一份更贴合的脚本模板。

抱歉,评论功能暂时关闭!