← 返回文章列表
March 20, 2026
5 分鐘閱讀

LLM Alpha挖掘:如何從財報電話會議和金融文件中提取交易訊號

LLM Alpha挖掘:如何從財報電話會議和金融文件中提取交易訊號
#llm
#alpha
#earnings
#nlp
#gpt
#金融分析
#演算法交易
🤖
Part 5 of 5 · Collection
AI Agents for Trading

華爾街有個笑話:"財報電話會議中最有價值的資訊不是CEO說了什麼,而是他怎麼說的。"當蒂姆·庫克說"我們持謹慎樂觀態度"而不是去年的"我們非常滿意"——這不是語言遊戲,而是價值數億美元的訊號。

數十年來,量化基金一直試圖系統化地提取這些訊號。最初,他們用詞典統計"積極"和"消極"詞彙的頻率。後來引入了BERT。而現在我們擁有GPT-4o、Claude和開源LLM,它們能以令研究者自己都感到驚訝的精度解析企業話術的微妙之處。

讓我們深入瞭解如何構建一個完整的財報電話會議交易訊號提取流水線——從獲取會議記錄到回測累計異常收益。

為什麼財報電話會議是Alpha的金礦

盈餘公告後漂移:不死的市場異象

1968年,Ball和Brown發現了一個奇怪的現象:在季度業績公佈後,股票會在"驚喜"方向上繼續漂移60-90天。他們將其命名為盈餘公告後漂移(Post-Earnings Announcement Drift,PEAD)。自那以後已過去半個多世紀,發表了數百篇論文,從十幾個角度解釋了這一異象——但它仍然有效。

PEAD是金融史上最持久的市場異象之一。"買入正面驚喜,賣出負面驚喜"的組合策略歷史上產生了10-25%的年化超額收益。為什麼市場至今未將其套利消除?原因有幾個:

  • 投資者注意力有限——當200家公司在同一周公布業績時,物理上不可能閱讀所有會議記錄
  • 認知複雜性——財報電話會議持續45-60分鐘,關鍵訊號可能隱藏在Q&A環節第38分鐘的某一句話中
  • 語言模糊性——CFO說"we are navigating headwinds",不瞭解上下文就無法判斷這是溫和的警告還是標準的套話

這正是LLM登場的時刻。我們第一次擁有了一個工具,能在一個晚上處理500份會議記錄,同時捕捉到即使經驗豐富的分析師也可能遺漏的細微之處。

PEAD.txt:文本比數字更重要

費城聯儲的研究人員(Meursault、Liang、Routledge、Scanlon)發表了PEAD.txt論文,顛覆了人們對文本資訊價值的認知。他們構建了標準盈餘驚喜的文本類似物——SUE.txt——完全不使用利潤的數值

結果如何?SUE.txt產生的漂移是經典PEAD的兩倍。更重要的是:近年來,當基於數值驚喜的經典PEAD幾乎消失時(市場已經學會了),文本漂移仍然顯著。市場學會了快速處理數字,但在文本解讀方面仍然不夠。

這是支援基於NLP方法分析財報電話會議的根本論據。

從情感到語義:方法的演進

從情感到語義

第一代:詞袋模型和詞典(2000-2015)

一切始於Loughran-McDonald詞典(2011)——一份將詞彙標註為"積極"、"消極"、"不確定"和"訴訟相關"的詞表。其理念在簡潔中彰顯優雅:統計10-K報告中消極詞彙的比例,然後據此交易。

問題是?"outstanding"在金融語境中更常意味著"未償還的債務"而非"出色的業績"。Risk Management中的"risk"不是消極訊號,而是流程描述。標準NLP情感詞典在金融文本上的表現令人尷尬。

Loughran和McDonald建立了專業詞典,情況有所改善,但根本問題依然存在:詞袋模型不理解上下文。"We did not fail to meet expectations"——這裡有兩個"消極"詞彙,但含義是積極的。

第二代:FinBERT和Transformer(2019-2023)

2019年,Dogu Araci釋出了FinBERT——在路透社TRC2金融文本上微調的BERT。結果令人印象深刻:在Financial PhraseBank資料集上比最先進水平提高了14個百分點。FinBERT理解上下文:"outstanding"與"debt"相鄰——消極,與"performance"相鄰——積極。

但FinBERT有一個限制:512個token的上下文視窗。財報電話會議有8000-12000個詞。分塊並平均情感意味著丟失段落間的語義關聯。CEO可能以樂觀開場,然後在Q&A中不經意提到供應鏈問題。FinBERT獨立分析每個片段,看不到這種對比。

第三代:長上下文LLM(2023至今)

GPT-4、Claude、Gemini擁有128K-1M token的上下文視窗,改變了遊戲規則。現在可以一次載入整個會議記錄,並提出需要理解全文才能回答的問題。

關鍵研究——Lopez-Lira & Tang(2023)《Can ChatGPT Forecast Stock Price Movements?》。在50000+條標題上,GPT-4在預測市場初始反應方向上顯示出~90%的命中率,並且顯著預測了後續漂移,特別是對於小盤股和負面新聞。而早期模型(GPT-1、GPT-2、BERT)沒有表現出這種能力——預測能力作為大模型的湧現屬性而出現。

BloombergGPT(2023)——在Bloomberg金融語料庫上訓練的500億參數模型——在金融NER、新聞分類和情感分析方面取得了改進。FinGPT——其開源替代方案——通過以資料為中心的方法和RAG在金融情感任務上達到89%的準確率。

使用GPT-4配合Chain-of-Thought和In-Context Learning分析S&P 100的MarketSenseAI,在15個月的測試中顯示出10-30%的超額alpha和高達72%的累計收益。是的,這些數字需要謹慎對待(回測≠實盤交易),但趨勢是明確的。

資料流水線:資料從哪來

SEC EDGAR:官方來源

對於美股,主要來源是SEC EDGAR。財報電話會議通常不直接提交,但相關檔案可獲取:

  • 8-K檔案(Item 2.02——經營業績)——包含業績的新聞稿,通常包括附有會議記錄的exhibit 99
  • 10-Q / 10-K——季度和年度報告,包含管理層討論與分析(MD&A)——也是寶貴的文本來源
  • DEF 14A——包含管理層薪酬資訊的代理宣告
from edgar import Company

company = Company("AAPL")
filings = company.get_filings(form="8-K")

for filing in filings.latest(10):
    if "2.02" in str(filing.items):
        doc = filing.document()
        text = doc.text()  # 包含附件的完整文本
        print(f"{filing.filing_date}: {len(text)} chars")

Seeking Alpha和商業API

財報電話會議記錄是獨立的產品。Seeking Alpha歷來是主要的免費來源,但現在限制了訪問。商業選項:

  • Seeking Alpha Premium API——帶有說話人標註的完整記錄
  • AlphaVantage Earnings API——有限制的免費層
  • Financial Modeling Prep——會議記錄+基本面資料
  • Earnings Call Edge / Motley Fool Transcripts——替代來源

加密貨幣:治理電話會議和DAO提案

這裡更有意思。大型DeFi協議舉行相當於財報電話會議的活動:

  • Uniswap——治理電話會議、社群電話會議,YouTube錄播
  • Aave——月度社群電話會議+治理論壇提案
  • MakerDAO——治理電話會議+詳細的論壇討論
  • Compound——帶有詳細討論的治理提案

加密電話會議的記錄通常沒有結構化。解決方案——使用OpenAI的Whisper轉錄YouTube錄播:

import openai
from yt_dlp import YoutubeDL

def transcribe_governance_call(youtube_url: str) -> str:
    """从YouTube下载音频并通过Whisper转录。"""
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '64',  # 低码率对语音足够
        }],
        'outtmpl': '/tmp/governance_call.%(ext)s',
    }

    with YoutubeDL(ydl_opts) as ydl:
        ydl.download([youtube_url])

    client = openai.OpenAI()

    with open("/tmp/governance_call.mp3", "rb") as audio_file:
        transcript = client.audio.transcriptions.create(
            model="whisper-1",
            file=audio_file,
            response_format="verbose_json",
            timestamp_granularities=["segment"]
        )

    return transcript.text

通過Whisper API轉錄的成本:0.006/分钟。一小时的治理电话会议约0.006/分钟。一小时的治理电话会议约0.36。自託管方案——Whisper Large-v3 Turbo在現代GPU上約17秒內轉錄60分鐘的檔案(216倍即時速度)。

LLM提示策略:從簡單到工業級

訊號提取流水線

策略1:直接情感分析(弱)

最簡單的方法——直接詢問模型:

"Is this earnings call positive or negative for the stock price?"

這有效嗎?令人驚訝的是,有效。Lopez-Lira & Tang表明,即使如此原始的提示也能產生統計顯著的預測。但存在問題:

  • 二元輸出——丟失了梯度。"災難"和"輕微失望"得到相同的標籤
  • 缺乏解釋——不清楚模型基於什麼做出決策
  • 不穩定性——重複執行可能給出不同的答案

策略2:帶Chain-of-Thought的結構化提取(強)

思路:不是提取單一數字,而是提取結構化的訊號集合,強制模型解釋每一步。

from pydantic import BaseModel, Field
from openai import OpenAI
from enum import Enum
from typing import Optional


class SentimentLevel(str, Enum):
    VERY_BEARISH = "very_bearish"
    BEARISH = "bearish"
    NEUTRAL = "neutral"
    BULLISH = "bullish"
    VERY_BULLISH = "very_bullish"


class GuidanceSurprise(BaseModel):
    """前瞻性指引与一致预期的偏差。"""
    revenue_guidance_vs_consensus: Optional[float] = Field(
        None, description="营收指引与一致预期的偏差百分比"
    )
    margin_guidance_direction: Optional[str] = Field(
        None, description="expanding / stable / contracting"
    )
    key_quote: str = Field(
        description="包含指引的原文引用"
    )
    reasoning: str = Field(
        description="CoT:为什么这个指引很重要"
    )


class ConfidenceMetrics(BaseModel):
    """管理层信心指标。"""
    hedge_word_count: int = Field(
        description="对冲词数量:'approximately'、'potentially'、'subject to'"
    )
    forward_looking_ratio: float = Field(
        description="前瞻性声明占总声明的比例"
    )
    q_and_a_evasion_count: int = Field(
        description="CEO/CFO给出含糊回答的问题数量"
    )
    ceo_vs_cfo_sentiment_delta: float = Field(
        description="CEO和CFO情感差异(-1到1)。分歧是危险信号"
    )


class CompetitiveIntelligence(BaseModel):
    """竞争对手提及和市场定位。"""
    competitors_mentioned: list[str] = Field(
        description="提及的竞争对手列表"
    )
    market_share_claims: list[str] = Field(
        description="市场份额声明"
    )
    new_product_signals: list[str] = Field(
        description="新产品/服务信号"
    )


class ManagementSignals(BaseModel):
    """管理层信号。"""
    turnover_risk: SentimentLevel = Field(
        description="关键管理层变动风险"
    )
    tone_shift_from_previous: Optional[str] = Field(
        None, description="与上季度相比语气如何变化"
    )
    insider_language_flags: list[str] = Field(
        description="标记性短语:'exploring strategic alternatives'、'right-sizing'等"
    )


class EarningsCallAnalysis(BaseModel):
    """完整的财报电话会议分析。"""
    ticker: str
    quarter: str
    overall_sentiment: SentimentLevel
    sentiment_score: float = Field(description="从 -1.0 到 1.0")
    guidance_surprise: GuidanceSurprise
    confidence_metrics: ConfidenceMetrics
    competitive_intel: CompetitiveIntelligence
    management_signals: ManagementSignals
    key_risks: list[str]
    key_catalysts: list[str]
    one_line_summary: str


def analyze_earnings_call(transcript: str, ticker: str, quarter: str) -> EarningsCallAnalysis:
    """
    从财报电话会议中提取结构化信号。
    成本:每次调用约$0.15-0.30(GPT-4o,约10K token输入)。
    """
    client = OpenAI()

    system_prompt = """You are a senior equity research analyst with 20 years of experience.
Analyze the following earnings call transcript and extract structured trading signals.

IMPORTANT INSTRUCTIONS:
1. Use Chain-of-Thought reasoning for each field — explain WHY before giving the value
2. Focus on DEVIATIONS from expectations, not absolute statements
3. Pay special attention to Q&A section — management is less scripted there
4. Compare management's language to typical corporate hedging baseline
5. Flag any "strategic alternatives", "right-sizing", or other euphemisms
6. Score sentiment relative to market expectations, not in absolute terms

HEDGE WORDS TO COUNT: approximately, potentially, subject to, may, might,
could, uncertain, challenging, headwinds, navigate, prudent, cautious,
evolving, dynamic, unprecedented, transitional"""

    completion = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": f"Ticker: {ticker}\nQuarter: {quarter}\n\n{transcript}"}
        ],
        response_format=EarningsCallAnalysis,
        temperature=0.1,  # 低温度以保证可重复性
    )

    return completion.choices[0].message.parsed

注意幾個關鍵點:

Pydantic模式——OpenAI結構化輸出保證100%符合模式。不再出現"sorry, I cannot parse the JSON"。每個欄位都有description,作為特定分析維度的迷你提示。

模式中的Chain-of-Thought——reasoningkey_quote欄位迫使模型"展示工作過程"。這不僅提高了質量(模型被迫在做出判斷前找到具體引用),還為監管機構建立了審計追蹤。

Temperature 0.1——我們不需要創造力。我們需要可重複性。Temperature為0時,模型有時會"卡"在某些模式上,0.1是最佳折衷。

策略3:帶歷史示例的Few-Shot

更強大的方法——給模型提供過去的財報電話會議示例及實際市場反應:

few_shot_examples = """
EXAMPLE 1:
Transcript excerpt: "We are cautiously optimistic about the second half...
While we continue to navigate macro headwinds, our pipeline remains robust."
Actual market reaction: -3.2% (next day)
Analysis: Despite surface-level positivity, "cautiously optimistic" is a
DOWNGRADE from previous quarter's "very confident". Five hedge words in
two sentences. Market read through the hedging.

EXAMPLE 2:
Transcript excerpt: "Frankly, demand has exceeded our ability to supply.
We're expediting CapEx to address this."
Actual market reaction: +7.8% (next day)
Analysis: "Frankly" signals genuine surprise even from management.
Accelerated CapEx on demand = strong confidence. No hedging language.
"""

Few-shot示例幫助模型校準:它學到"cautiously optimistic"在華爾街語言中不是積極的——而是溫和的消極訊號。沒有示例,LLM可能會字面理解詞語。

四種訊號型別

1. 業績指引驚喜

最直接的訊號。公司提供下一季度/年的預測(guidance),市場對偏離一致預期的程度做出反應。即使管理層表達模糊,LLM也能提取指引:

  • "We expect revenues in the range of..."——直接指引,容易解析
  • "We feel comfortable with current Street estimates"——隱含確認一致預期
  • "There are puts and takes relative to consensus"——隱含的風險訊號

LLM能理解這三種表述;正規表示式只能理解第一種。

2. 信心指標:對沖詞密度

這是我最喜歡的訊號,因為它是反直覺的。本質在於:管理者是受過法律訓練、擁有偏執法律部門的人。當一切順利時,他們允許自己具體化。當問題醞釀時——他們開始對沖。

需要追蹤的指標:

指標 描述 看空訊號
對沖詞密度 每1000詞中對沖詞的比例 > 每1000詞15個
確定性比率 "will/expect"與"may/could"的比值 < 1.5
Q&A迴避率 未直接回答的問題百分比 > 30%
CEO/CFO差異 CEO和CFO語氣的分歧度 > 0.3([-1, 1]量表)

最後一點特別有趣。CEO是講故事的人——他的工作是描繪美好的畫面。CFO是對審計師負責的人。當CEO說"transformative growth ahead"而CFO立即插入"while maintaining disciplined cost management"——這種分歧訊號著內部緊張。

3. 競爭情報

LLM可以從會議記錄中提取競爭對手的提及,即使管理層避免直接點名。"The largest player in the market"——如果GPT-4瞭解行業,這並不是什麼謎。

交易訊號:如果A公司在財報電話會議中以負面語境提到競爭對手B("we're taking share from..."),這不僅是A的訊號(做多),也是B的訊號(做空)。配對交易。

4. 管理層變動訊號

標誌管理層變更或戰略轉向的短語:

  • "Exploring strategic alternatives"——可能出售公司
  • "Right-sizing our operations"——大規模裁員
  • "The board has initiated a comprehensive review"——CEO即將離任
  • "We're bringing in fresh perspectives"——現任團隊失敗了

這些短語中的每一個都與後續價格走勢有統計顯著的相關性。LLM可以零誤報地檢測它們——因為它理解上下文,而正規表示式可能在產品線描述中誤捕"strategic alternatives"。

回測:事件研究方法論

事件研究結果

我們生成了訊號——很好。但它們有效嗎?標準驗證方法是計算累計異常收益(CAR)的事件研究。

方法論

  1. 定義事件——財報電話會議日期
  2. 估計視窗——事件前[-250, -30]個交易日,用於估計"正常"收益
  3. 事件視窗——事件前後[-1, +60]天
  4. 計算正常收益——通過市場模型:Rit=αi+βiRmt+ϵitR_{it} = \alpha_i + \beta_i R_{mt} + \epsilon_{it}
  5. 異常收益——實際收益與"正常"收益的差值
  6. CAR——事件視窗內異常收益的累計和
import numpy as np
import pandas as pd
from scipy import stats
from dataclasses import dataclass


@dataclass
class EventStudyResult:
    car: np.ndarray          # 按天的累计异常收益
    t_stats: np.ndarray      # 每天的t统计量
    avg_car_3d: float        # CAR[-1, +1]
    avg_car_30d: float       # CAR[-1, +30]
    avg_car_60d: float       # CAR[-1, +60]
    p_value_3d: float
    p_value_30d: float
    n_events: int


def run_event_study(
    returns: pd.DataFrame,       # 股票日收益率(columns = ticker)
    market_returns: pd.Series,   # 市场指数日收益率
    events: pd.DataFrame,        # DataFrame,columns: [ticker, date, signal_score]
    estimation_window: int = 220,
    gap: int = 30,
    event_window: tuple = (-1, 60),
) -> EventStudyResult:
    """
    事件研究,用于评估LLM信号的预测能力。

    按signal_score排序事件,构建多空组合,
    计算CAR并测试统计显著性。
    """
    all_cars = []

    for _, event in events.iterrows():
        ticker = event['ticker']
        event_date = event['date']

        if ticker not in returns.columns:
            continue

        try:
            event_idx = returns.index.get_loc(event_date, method='ffill')
        except KeyError:
            continue

        est_start = event_idx - estimation_window - gap
        est_end = event_idx - gap

        if est_start < 0:
            continue

        y = returns.iloc[est_start:est_end][ticker].values
        x = market_returns.iloc[est_start:est_end].values

        mask = ~(np.isnan(y) | np.isnan(x))
        if mask.sum() < 60:  # 最少60个观测值
            continue

        y_clean, x_clean = y[mask], x[mask]

        slope, intercept, _, _, _ = stats.linregress(x_clean, y_clean)
        residual_std = np.std(y_clean - (intercept + slope * x_clean))

        ev_start = event_idx + event_window[0]
        ev_end = event_idx + event_window[1] + 1

        if ev_end > len(returns):
            continue

        actual = returns.iloc[ev_start:ev_end][ticker].values
        market = market_returns.iloc[ev_start:ev_end].values

        expected = intercept + slope * market
        ar = actual - expected
        car = np.cumsum(ar)

        all_cars.append(car)

    if not all_cars:
        raise ValueError("No valid events found")

    min_len = min(len(c) for c in all_cars)
    all_cars = np.array([c[:min_len] for c in all_cars])

    mean_car = np.mean(all_cars, axis=0)
    std_car = np.std(all_cars, axis=0) / np.sqrt(len(all_cars))
    t_stats = mean_car / (std_car + 1e-10)

    offset = -event_window[0]  # 到事件日期的偏移

    car_3d = mean_car[min(offset + 1, min_len - 1)] if min_len > offset + 1 else mean_car[-1]
    car_30d = mean_car[min(offset + 30, min_len - 1)] if min_len > offset + 30 else mean_car[-1]
    car_60d = mean_car[min(offset + 60, min_len - 1)] if min_len > offset + 60 else mean_car[-1]

    n = len(all_cars)
    p_3d = 2 * (1 - stats.t.cdf(abs(car_3d / (np.std([c[min(offset+1, min_len-1)] for c in all_cars]) / np.sqrt(n) + 1e-10)), df=n-1))
    p_30d = 2 * (1 - stats.t.cdf(abs(car_30d / (np.std([c[min(offset+30, min_len-1)] for c in all_cars]) / np.sqrt(n) + 1e-10)), df=n-1))

    return EventStudyResult(
        car=mean_car,
        t_stats=t_stats,
        avg_car_3d=car_3d,
        avg_car_30d=car_30d,
        avg_car_60d=car_60d,
        p_value_3d=p_3d,
        p_value_30d=p_30d,
        n_events=n,
    )


def backtest_llm_signals(
    llm_signals: pd.DataFrame,  # [ticker, date, sentiment_score]
    returns: pd.DataFrame,
    market_returns: pd.Series,
):
    """回测:做多顶部五分位信号,做空底部五分位。"""

    llm_signals['quintile'] = pd.qcut(
        llm_signals['sentiment_score'], 5, labels=[1, 2, 3, 4, 5]
    )

    long_events = llm_signals[llm_signals['quintile'] == 5].copy()
    short_events = llm_signals[llm_signals['quintile'] == 1].copy()

    long_result = run_event_study(returns, market_returns, long_events)
    short_result = run_event_study(returns, market_returns, short_events)

    print(f"LONG portfolio (top quintile LLM sentiment):")
    print(f"  CAR[0,+3]:  {long_result.avg_car_3d:+.2%} (p={long_result.p_value_3d:.4f})")
    print(f"  CAR[0,+30]: {long_result.avg_car_30d:+.2%} (p={long_result.p_value_30d:.4f})")
    print(f"  N events:   {long_result.n_events}")

    print(f"\nSHORT portfolio (bottom quintile LLM sentiment):")
    print(f"  CAR[0,+3]:  {short_result.avg_car_3d:+.2%} (p={short_result.p_value_3d:.4f})")
    print(f"  CAR[0,+30]: {short_result.avg_car_30d:+.2%} (p={short_result.p_value_30d:.4f})")
    print(f"  N events:   {short_result.n_events}")

    ls_3d = long_result.avg_car_3d - short_result.avg_car_3d
    ls_30d = long_result.avg_car_30d - short_result.avg_car_30d
    print(f"\nLONG-SHORT spread:")
    print(f"  CAR[0,+3]:  {ls_3d:+.2%}")
    print(f"  CAR[0,+30]: {ls_30d:+.2%}")

預期結果

基於現有研究,LLM訊號的現實CAR:

視窗 多頭組合 空頭組合 多空價差
[0, +1] +0.8% — +1.5% -0.5% — -1.2% 1.3% — 2.7%
[0, +30] +1.5% — +3.0% -1.0% — -2.5% 2.5% — 5.5%
[0, +60] +2.0% — +4.0% -1.5% — -3.5% 3.5% — 7.5%

關鍵指標是統計顯著性。當p < 0.01且N > 200個事件時,可以說訊號是穩健的。當p > 0.05——可能是隨機噪聲。

生產部署:從Jupyter到生產環境

即時流水線架構

YouTube/Audio Stream
       │
       ▼
┌─────────────────┐    ┌──────────────────┐
│  Whisper         │───▶│  Transcript       │
│  Transcription   │    │  Buffer           │
│  (streaming)     │    │  (Redis Stream)   │
└─────────────────┘    └──────────────────┘
                              │
                    ┌─────────┴─────────┐
                    ▼                   ▼
            ┌──────────────┐   ┌──────────────┐
            │ Real-time    │   │ Full-call    │
            │ Chunk Anal.  │   │ Analysis     │
            │ (every 5min) │   │ (after call  │
            │              │   │  ends)       │
            └──────────────┘   └──────────────┘
                    │                   │
                    ▼                   ▼
            ┌──────────────────────────────┐
            │     Signal Aggregator        │
            │  (confidence-weighted merge) │
            └──────────────────────────────┘
                         │
                         ▼
            ┌──────────────────────────────┐
            │     Trading Engine           │
            │  (position sizing, risk mgmt)│
            └──────────────────────────────┘

成本分析:處理一次財報電話會議要多少錢

讓我們分析生產環境中處理一次財報電話會議的經濟賬:

元件 成本 延遲
Whisper API轉錄(60分鐘) $0.36 ~17秒(Turbo)
GPT-4o結構化提取 $0.15-0.30 ~8-15秒
GPT-4o即時分塊分析(x12) $1.80-3.60 每次~5秒
RAG儲存的Embedding $0.01 <1秒
合計(完整流水線) $2.30-4.30 ~30秒

等等,之前說的是每次$30-50。這些數字從哪來?取決於模型和方法:

  • 經濟方案(GPT-4o-mini,單次處理):$0.50-1.00
  • 標準方案(GPT-4o,結構化提取+分塊分析):$2-5
  • 高階方案(GPT-4o,多次處理、交叉驗證、歷史比較):$15-30
  • 對沖基金級別(多模型+人工稽核+即時流處理):$30-50+

對於交易500只股票的量化基金來說,處理一個財報季(6周內約2000次電話會議)的成本在標準方案下為4,0004,000-10,000。當每個倉位的平均alpha為1-3%時——投資回報率是天文數字。

延遲:毫秒級的競賽

在高頻交易的世界中,延遲就是一切。但對於基於財報的策略,情況不同:

  1. 財報電話會議持續45-60分鐘——你有時間
  2. PEAD持續60天——不需要在第一秒就入場
  3. 主要的定價偏離發生在電話會議結束後的前30分鐘

最優策略是兩階段的

  • 階段1(即時):在電話會議期間每5分鐘分析一個片段,形成初步訊號
  • 階段2(會後):電話會議結束後2-5分鐘內完成完整轉錄分析

階段1比等待電話會議結束的市場參與者提前5-10分鐘獲得優勢。對於中盤股來說,這就足夠了。

擴充到加密貨幣:DeFi治理和DAO提案

加密市場是LLM alpha挖掘的理想試驗場。原因如下:

  1. 機構參與者較少——意味著有更多低效率可以利用
  2. 治理=財報電話會議——DAO決策直接影響代幣經濟學
  3. 7x24小時市場——可以立即交易反應
  4. 公開資料——所有提案和投票都在鏈上

加密事件分析型別

治理提案(Aave、Compound、Uniswap)

提案改變協議參數——利率、抵押因子、手續費開關。LLM可以評估經濟影響:

crypto_analysis_prompt = """Analyze this DeFi governance proposal.
Extract:
1. Economic impact on token holders (positive/negative/neutral)
2. TVL impact estimate (increase/decrease/stable + magnitude)
3. Competitive positioning vs other protocols
4. Risk factors introduced by the proposal
5. Historical precedent (similar proposals in other protocols)
6. Likely voting outcome based on forum discussion sentiment

Proposal: {proposal_text}
Forum discussion: {discussion_text}
"""

協議更新公告

當Uniswap宣佈帶hooks的v4,或Aave推出GHO時——這相當於傳統金融中的產品釋出。LLM可以評估敘事動量和技術重要性。

財庫報告

大型DAO擁有數億美元的財庫。季度財庫報告是財報的直接類比。營運期限、消耗率、多元化——所有這些都適合LLM分析。

加密訊號的特殊性

與傳統金融不同,在加密領域:

  • 鏈上資料確認或反駁敘事——可以將治理電話會議上說的內容與協議的實際指標(TVL、交易量、活躍使用者)進行交叉比對
  • 巨鯨錢包如同內幕交易——治理討論後大錢包的轉移往往先於投票
  • 通過CT(Crypto Twitter)放大情緒——治理電話會議的訊號可以被Twitter敘事放大或壓制

陷阱和侷限性

幻覺:當模型編造數字

LLM可能"提取"出轉錄中不存在的指引。在分析對沖詞密度時尤其危險:模型可能比實際數多或少地計算詞彙。

解決方案:兩階段驗證。LLM提取,確定性程式碼驗證。對於對沖詞——正規表示式與LLM評估並行計數。偏差 > 20%——標記為需要人工稽核。

import re

HEDGE_WORDS = [
    r'\bapproximately\b', r'\bpotentially\b', r'\bsubject to\b',
    r'\bmay\b', r'\bmight\b', r'\bcould\b', r'\buncertain\b',
    r'\bchallenging\b', r'\bheadwinds\b', r'\bnavigate\b',
    r'\bprudent\b', r'\bcautious\b', r'\bevolving\b',
    r'\bdynamic\b', r'\bunprecedented\b', r'\btransitional\b',
]

def verify_hedge_count(text: str, llm_count: int) -> dict:
    """确定性验证LLM的对冲词计数。"""
    regex_count = sum(
        len(re.findall(pattern, text, re.IGNORECASE))
        for pattern in HEDGE_WORDS
    )

    deviation = abs(llm_count - regex_count) / (regex_count + 1)

    return {
        "llm_count": llm_count,
        "regex_count": regex_count,
        "deviation": deviation,
        "needs_review": deviation > 0.2,
    }

上下文視窗限制

即使128K個token也可能不夠,如果你想輸入:

  • 當前轉錄(~10K token)
  • 用於比較的上季度轉錄(~10K)
  • 分析師一致預期(~2K)
  • Few-shot示例(~3K)
  • System prompt(~1K)

總計~26K——可以容納。但如果加上10-K檔案(~80-120K token)作為上下文——已經處於邊緣。解決方案:使用RAG從長文件中檢索相關片段。

偏差和系統性錯誤

LLM在歷史資料上訓練,其中某些短語與特定結果相關聯。但市場會適應:

  • 如果所有人都開始用GPT-4統計對沖詞,管理者會改變他們的語言
  • 模型可能高估訓練資料中模式的重要性(倖存者偏差)
  • 企業語言在進化:"synergies"在2010年意味著一種東西,在2026年意味著另一種

擁擠交易風險

如果50家量化基金使用相同的GPT-4分析相同的轉錄——訊號會衰減。類比:當所有人都開始根據數值驚喜交易PEAD時,異象縮小了。文本訊號也會發生同樣的事情,但有延遲:

  1. 當前(2026)——很少有人系統性地將LLM用於財報電話會議。Alpha顯著
  2. 2-3年後——廣泛採用,alpha下降
  3. 5年後——基礎LLM訊號成為大宗商品,優勢僅存在於定製模型和獨特資料中

這是alpha訊號的標準生命週期。趁還來得及享受吧。

代替結論:行動策略

如果你想開始使用LLM進行財報電話會議分析,以下是最小可行計劃:

  1. 從免費資料開始——SEC EDGAR + EdgarTools獲取8-K/10-Q檔案
  2. 使用結構化提取——通過OpenAI結構化輸出的Pydantic模式
  3. 通過事件研究回測——歷史資料上的CAR,最少200個事件
  4. 新增few-shot示例——5-10個標註示例能顯著提升質量
  5. 確定性驗證——LLM提取,正規表示式驗證,人工審計
  6. 從中盤股開始——更多alpha,與大型基金的競爭更少
  7. 擴充到加密貨幣——治理電話會議和DAO提案是未開發的領域

記住量化分析的首要法則:如果一個訊號好得不像真的——再檢查一遍。LLM創造了理解的幻覺,但背後是統計模式匹配。強大的工具——但是工具,不是神諭。


參考文獻

  1. Ball, R., Brown, P. (1968). An Empirical Evaluation of Accounting Income Numbers. Journal of Accounting Research, 6(2), 159-178. — 首次發現PEAD。

  2. Bernard, V.L., Thomas, J.K. (1989). Post-Earnings-Announcement Drift: Delayed Price Response or Risk Premium? Journal of Accounting Research, 27, 1-36. — 經典PEAD論文。

  3. Loughran, T., McDonald, B. (2011). When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks. Journal of Finance, 66(1), 35-65. — 金融情感詞典。

  4. Araci, D. (2019). FinBERT: Financial Sentiment Analysis with Pre-trained Language Models. arXiv:1908.10063. — 金融NLP的BERT,比SOTA高14pp。

  5. Wu, S. et al. (2023). BloombergGPT: A Large Language Model for Finance. arXiv:2303.17564. — Bloomberg的500億參數模型。

  6. Yang, H. et al. (2023). FinGPT: Open-Source Financial Large Language Models. arXiv:2306.06031. — BloombergGPT的開源替代,89%準確率。

  7. Lopez-Lira, A., Tang, Y. (2023). Can ChatGPT Forecast Stock Price Movements? Return Predictability and Large Language Models. arXiv:2304.07619. — GPT-4以~90%命中率預測收益。

  8. Meursault, V., Liang, P.J., Routledge, B., Scanlon, M.M. (2023). PEAD.txt: Post-Earnings-Announcement Drift Using Text. Journal of Financial and Quantitative Analysis. — 文本PEAD是數值PEAD的兩倍。

  9. Fatouros, G. et al. (2024). Can Large Language Models Beat Wall Street? Evaluating GPT-4's Impact on Financial Decision-Making with MarketSenseAI. Neural Computing and Applications. — S&P 100上10-30%超額alpha的GPT-4框架。

  10. Chen, Y. et al. (2025). GPT-Signal: Generative AI for Semi-automated Feature Engineering in the Alpha Research Process. arXiv:2410.18448. — 通過LLM自動生成交易訊號。

  11. Zhang, X. et al. (2025). Can LLMs Hit Moving Targets? Tracking Evolving Signals in Corporate Disclosures. arXiv:2510.03195. — 企業披露中"移動目標"的檢測。

  12. Chen, Z. et al. (2025). Large Language Models in Equity Markets: Applications, Techniques, and Insights. Frontiers in Artificial Intelligence. — 金融領域84項LLM研究綜述。


本文僅供教育目的,不構成投資建議。此處描述的任何交易策略在使用真實資本之前,都需要經過徹底的回測和風險管理。

免責宣告:本文提供的資訊僅用於教育和參考目的,不構成財務、投資或交易建議。加密貨幣交易涉及重大損失風險。

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

緊跟市場步伐

訂閱我們的時事通訊,獲取獨家 AI 交易見解、市場分析和平台更新。

我們尊重您的隱私。您可以隨時退訂。