LLM Alpha Mining: киреше боюнча чалуулардан жана каржылык документтерден соода сигналдарын кантип алуу керек
Уолл-стриттте бир тамаша бар: "Киреше боюнча чалуудагы эң баалуу маалымат — башкы директордун эмне айтканы эмес, аны кантип айтканы." Тим Кук өткөн жылдагы "биз абдан ыраазыбыз" дегендин ордуна "биз этияттык менен оптимиствиз" десе — бул тилдик оюн эмес, жүздөгөн миллион доллар турган сигнал.
Ондогон жылдар бою квант-фонддор бул сигналдарды алууну системалаштырууга аракет кылышкан. Алгач алар сөздүктөрдүн жардамы менен "оң" жана "терс" сөздөрдүн жыштыгын эсептешкен. Андан кийин BERT-ти иштетишкен. Ал эми азыр бизде GPT-4o, Claude жана корпоративдик эки ача сүйлөмдүн нюанстарын изилдөөчүлөрдүн өздөрүн да коркутуучу тактык менен талдай ала турган ачык булактуу LLM-дер бар.
Киреше боюнча чалуулардан соода сигналдарын алуу үчүн толук кандуу пайплайнды кантип түзүүгө болорун талдап көрөлү — транскриптти алуудан баштап жыйынды аномалдуу кирешелерди бэктестирлөөгө чейин.
Киреше боюнча чалуулар эмне үчүн альфа үчүн алтын кен
Post-Earnings Announcement Drift: өлбөгөн аномалия
1968-жылы Болл менен Браун бир кызык нерсени тапкан: тоок кинтелик натыйжалар жарыяланганда, акциялар дагы 60-90 күн бою "күтүлбөгөн жыйынтыктын" багытында жылышын улантат. Алар муну Post-Earnings Announcement Drift (PEAD) деп аташкан. Ошондон бери жарым кылымдан ашык убакыт өттү, жүздөгөн макала жазылды, аномалия ондогон бурчтан түшүндүрүлдү — жана ал азыр деле иштейт.
PEAD — каржы тарыхындагы эң туруктуу рыноктук аномалиялардын бири. "Оң сюрпризди сатып ал, терс сюрпризди сат" портфелдик стратегиясы тарыхый жактан жылына 10-25% ашыкча киреше берген. Рынок муну эмне үчүн арбитраждаган эмес? Бир нече себеп бар:
- Инвесторлордун чектелген көңүлү — бир жумада 200 компания отчет берсе, бардык транскрипттерди окуу физикалык жактан мүмкүн эмес
- Когнитивдик татаалдык — киреше боюнча чалуу 45-60 мүнөткө созулат, ал эми негизги сигнал Q&A сессиясынын 38-мүнөтүндөгү бир сүйлөмдө жашырылышы мүмкүн
- Тилдин эки ача маанилүүлүгү — каржы директору "биз каршы шамалда сүзүп баратабыз" дейт, контекстсиз бул жумшак эскертүү же стандарттуу хеджирлөө экени түшүнүксүз
Дал ушул жерде LLM-дер сахнага чыгат. Биринчи жолу бизде тажрыйбалуу талдоочулар да байкабай калуучу нюанстарды кармап, бир кечте 500 транскриптти иштете турган курал бар.
PEAD.txt: сандардан көбүрөөк текст маанилүү
Филадельфия Федералдык резервдик банкынын изилдөөчүлөрү (Meursault, Liang, Routledge, Scanlon) тексттик маалыматтын баалуулугу жөнүндөгү болжолдорду четке каккан PEAD.txt макаласын жарыялашкан. Алар стандарттуу киреше сюрпризинин тексттик аналогун түзүшкөн — SUE.txt — ал кирешенин сандык маанисин таптакыр колдонбойт.
Натыйжасы кандай? SUE.txt классикалык PEAD-ден эки эсе чоң дрифт жаратат. Мындан тышкары: акыркы жылдары сандык сюрприздерге негизделген классикалык PEAD дээрлик жоголуп кеткенде (рынок үйрөндү), тексттик дрифт дагы деле маанилүү бойдон калууда. Рынок сандарды тез иштетүүнү үйрөндү, бирок текстти чечмелөөдө дагы деле кыйналууда.
Бул киреше боюнча чалууларга NLP негизделген мамилени колдогон негизги далил.
Сентименттен семантикага: мамилелердин эволюциясы

Биринчи муун: Bag-of-words жана сөздүктөр (2000-2015)
Баары Loughran-McDonald сөздүгүнөн (2011) башталган — "оң", "терс", "белгисиз" жана "сотко байланыштуу" деп белгиленген сөздөр тизмеси. Идея өзүнүн жөнөкөйлүгү менен сонун болгон: 10-K документиндеги терс сөздөрдүн пайызын эсептеп, ошого таянып соода кылуу.
Көйгөй эмнеде? Каржылык контекстте "outstanding" сөзү көбүнчө "төлөнбөгөн карыз" дегенди билдирет, "мыкты натыйжа" эмес. Risk Management-теги "тобокел" сөзү терс сигнал эмес — бул процесстин сыпаттамасы. Стандарттуу NLP сентимент сөздүктөрү каржылык тексттерде уят даражада начар иштешкен.
Loughran менен McDonald атайын сөздүк түзүшкөн, бул абалды жакшыртты, бирок негизги көйгөй калды: bag-of-words контекстти түшүнбөйт. "Биз күтүүлөрдү аткарбай калган жокпуз" — бул жерде эки "терс" сөз бар, бирок мааниси оң.
Экинчи муун: FinBERT жана трансформерлер (2019-2023)
2019-жылы Догу Арачи Reuters TRC2 каржылык тексттерине ылайыкташтырылган BERT — FinBERT-ти жарыялаган. Натыйжалар таасирдүү болгон: Financial PhraseBank датасетинде state-of-the-art менен салыштырганда 14 пайыздык пунктка жакшыруу. FinBERT контекстти түшүнгөн: "debt" жанындагы "outstanding" — терс, "performance" жанындагы — оң.
Бирок FinBERT-тин чектөөсү болгон: 512 токендик контекст терезеси. Киреше боюнча чалуу 8000-12000 сөзгө созулат. Бөлүктөргө бөлүп, сентименттин орточо маанисин алуу абзацтардын ортосундагы семантиканы жоготот. Башкы директор оптимизм менен баштап, андан кийин Q&A учурунда тизмек боюнча жеткирүү көйгөйлөрүн айтып кетиши мүмкүн. FinBERT ар бир бөлүктү өз алдынча талдайт жана бул карама-каршылыкты өткөрүп жиберет.
Үчүнчү муун: узак контексттүү LLM-дер (2023-азыркы учур)
128K-1M токендик контекст терезеси бар GPT-4, Claude, Gemini оюндун эрежелерин өзгөрттү. Азыр бүтүндөй транскриптти бир жолу жүктөп, толук документти түшүнүүнү талап кылган суроолорду берүүгө болот.
Негизги изилдөө — Lopez-Lira & Tang (2023) "Can ChatGPT Forecast Stock Price Movements?" 50 000ден ашык аталышта GPT-4 баштапкы рыноктук реакциянын багытын болжолдоодо ~90% дал келүү көрсөткүчүн көрсөттү жана кийинки дрифтти, өзгөчө кичи капиталдуу компаниялар жана терс жаңылыктар үчүн олуттуу болжолдоду. Мурунку моделдер (GPT-1, GPT-2, BERT) бул жөндөмдү көрсөткөн жок — болжолдоо күчү чоң моделдердин пайда болуучу касиети катары келип чыгат.
BloombergGPT (2023) — Bloomberg-дин каржылык корпусунда үйрөтүлгөн 50 миллиард параметрдүү модель — каржылык NER, жаңылыктарды классификациялоо жана сентимент талдоосунда жакшыртууларды көрсөттү. FinGPT — анын ачык булактуу альтернативасы — маалыматка багытталган мамиле жана RAG жардамы менен каржылык сентимент тапшырмаларында 89% тактыкка жетет.
S&P 100 талдоосу үчүн Chain-of-Thought жана In-Context Learning менен GPT-4-тү колдонгон MarketSenseAI 15 айлык сыноо учурунда 10-30% ашыкча альфа жана 72%ге чейинки жыйынды киреше көрсөттү. Ооба, бул сандарды этияттык менен кабыл алуу керек (бэктест ≠ тирүү соода), бирок тенденция түшүнүктүү.
Маалымат пайплайны: маалыматты кайдан алса болот
SEC EDGAR: расмий булак
АКШ акциялары үчүн негизги булак — SEC EDGAR. Киреше боюнча чалуулар адатта түз каттоодон өтпөйт, бирок байланыштуу документтер жеткиликтүү:
- 8-K каттоолору (Item 2.02 — операциялардын натыйжалары) — натыйжалар менен басма сөз билдирүүлөрү, көбүнчө транскрипти бар exhibit 99 менен кошо
- 10-Q / 10-K — Management Discussion & Analysis (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() # Full text with exhibits
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 — толук талкуулары бар башкаруу сунуштары
Крипто чалууларынын транскрипттери адатта структураланган эмес. Чечим — YouTube жазууларын транскрипциялоо үчүн OpenAI-дын Whisper:
import openai
from yt_dlp import YoutubeDL
def transcribe_governance_call(youtube_url: str) -> str:
"""Download audio from YouTube and transcribe via Whisper."""
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '64', # Low bitrate is sufficient for speech
}],
'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,36 турат. Өзүн-өзү жайгаштыруу варианты үчүн — Whisper Large-v3 Turbo заманбап GPU-да 60 мүнөттүк файлды ~17 секундда (реалдуу убакыттан 216 эсе тез) транскрипциялайт.
LLM промптоо стратегиялары: жөнөкөйдөн өндүрүштүк деңгээлге чейин

1-стратегия: түз сентимент (алсыз)
Эң жөнөкөй мамиле — моделден түз суроо:
"Бул киреше боюнча чалуу акциянын баасы үчүн оң беле, же терс беле?"
Бул иштейби? Ооба, таң калыштуу түрдө. 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):
"""Deviation of forward guidance from consensus expectations."""
revenue_guidance_vs_consensus: Optional[float] = Field(
None, description="% deviation of revenue guidance from consensus"
)
margin_guidance_direction: Optional[str] = Field(
None, description="expanding / stable / contracting"
)
key_quote: str = Field(
description="Verbatim quote with guidance"
)
reasoning: str = Field(
description="CoT: why this guidance matters"
)
class ConfidenceMetrics(BaseModel):
"""Management confidence metrics."""
hedge_word_count: int = Field(
description="Number of hedge words: 'approximately', 'potentially', 'subject to'"
)
forward_looking_ratio: float = Field(
description="Ratio of forward-looking statements to total statements"
)
q_and_a_evasion_count: int = Field(
description="Number of questions where CEO/CFO gave an evasive answer"
)
ceo_vs_cfo_sentiment_delta: float = Field(
description="Sentiment difference between CEO and CFO (-1 to 1). Divergence is a red flag"
)
class CompetitiveIntelligence(BaseModel):
"""Mentions of competitors and market position."""
competitors_mentioned: list[str] = Field(
description="List of mentioned competitors"
)
market_share_claims: list[str] = Field(
description="Market share claims"
)
new_product_signals: list[str] = Field(
description="Signals about new products/services"
)
class ManagementSignals(BaseModel):
"""Management signals."""
turnover_risk: SentimentLevel = Field(
description="Risk of key management turnover"
)
tone_shift_from_previous: Optional[str] = Field(
None, description="How tone changed compared to last quarter"
)
insider_language_flags: list[str] = Field(
description="Marker phrases: 'exploring strategic alternatives', 'right-sizing', etc."
)
class EarningsCallAnalysis(BaseModel):
"""Complete earnings call analysis."""
ticker: str
quarter: str
overall_sentiment: SentimentLevel
sentiment_score: float = Field(description="from -1.0 to 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:
"""
Extract structured signals from an earnings call.
Cost: ~$0.15-0.30 per call (GPT-4o, ~10K tokens input).
"""
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, # Low temperature for reproducibility
)
return completion.choices[0].message.parsed
Бир нече негизги пункттарга көңүл буруңуз:
Pydantic схемасы — OpenAI Structured Outputs схемага 100% дал келүүнү кепилдейт. Эми "sorry, I cannot parse the JSON" жок. Ар бир талаада талдоонун конкреттүү аспектиси үчүн мини-промпт катары иштеген сыпаттама бар.
Схема ичиндеги Chain-of-Thought — reasoning жана key_quote талаалары моделди "жумушун көрсөтүүгө" мажбурлайт. Бул жалгыз гана сапатты жакшыртпайт (модель чечим чыгарардан мурун конкреттүү цитатаны табууга мажбур болот), бирок ошондой эле жөнгө салуучулар үчүн аудит изин да түзөт.
0,1 температура — бизге чыгармачылык керек эмес. Бизге кайталануучулук керек. 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 сюрпризи
Эң түз сигнал. Компания кийинки тоок кинтеликке/жылга болжол (guidance) берет, ал эми рынок консенсустан четтөөгө жооп берет. LLM жетекчилик аны бүдөмүк жеткирсе да, guidance-ты ала алат:
- "We expect revenues in the range of..." — түз guidance, талдоо оңой
- "We feel comfortable with current Street estimates" — консенсустун кыйыр тастыктоосу
- "There are puts and takes relative to consensus" — кыйыр тобокелдик сигналы
LLM үч фразаны тең түшүнөт; regex болсо биринчисин гана түшүнөт.
2. Ишеним көрсөткүчтөрү: хеджирлөө сөздөрүнүн тыгыздыгы
Бул менин сүйүктүү сигналым, себеби ал контринтуитивдүү. Маңызы: менеджерлер — юридикалык билими бар жана параноиялык юридикалык бөлүмдөрү бар адамдар. Иш жакшы жүрүп жатканда, алар так болууга уруксат берет. Көйгөйлөр бышып жатканда — алар хеджирлей башташат.
Байкалуучу көрсөткүчтөр:
| Көрсөткүч | Сыпаттама | Bearish сигнал |
|---|---|---|
| Хеджирлөө сөздөрүнүн тыгыздыгы | 1000 сөзгө хеджирлөө сөздөрүнүн үлүшү | 1000 сөзгө > 15 |
| Ишенимдүүлүк коэффициенти | "will/expect" катышы "may/could"-га | < 1,5 |
| Q&A качуу деңгээли | Түз жообу жок суроолордун % | > 30% |
| CEO/CFO дельтасы | CEO менен CFO ортосундагы тон айырмасы | [-1, 1] шкаласында > 0,3 |
Акыркы пункт өзгөчө кызыктуу. CEO — аңгемечи, анын иши — сулуу сүрөт тартуу. CFO — аудиторлордун алдында отчет берүүчү адам. CEO "transformative growth ahead" десе, ал эми CFO дароо "while maintaining disciplined cost management" деп кошсо — бул айырма ички чыңалуулардын белгиси.
3. Атаандаштык чалгындоо
LLM атаандаштардын аталыштарын транскриптен ала алат, атүгүл жетекчилик түз аталыштарды айланып өткөндө да. "The largest player in the market" — бул GPT-4 үчүн жумбак эмес, эгер ал тармакты билсе.
Соода сигналы: А компаниясы өзүнүн киреше боюнча чалуусунда В атаандашын терс контекстте эскертсе ("we're taking share from..."), бул жалгыз гана А үчүн эмес (long), ошондой эле В үчүн да (short) сигнал. Pairs trade.
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" деген сөздү кармап калышы мүмкүн болгон regex-ден айырмаланып.
Бэктестирлөө: Event Study методологиясы

Биз сигналдарды түзүп жатабыз — сонун. Бирок алар иштейби? Стандарттуу текшерүү ыкмасы — жыйынды аномалдуу кирешелерди (CAR) эсептөө менен Event Study.
Методология
- Окуяны аныктоо — киреше боюнча чалуунун датасы
- Баалоо терезеси — "калыпта" кирешелерди баалоо үчүн окуядан мурунку [-250, -30] соода күндөрү
- Окуя терезеси — окуянын айланасындагы [-1, +60] күн
- Калыпта кирешелерди эсептөө рыноктук модель аркылуу:
- Аномалдуу киреше — чыныгы жана "калыпта" кирешелердин ортосундагы айырма
- CAR — окуя терезесиндеги аномалдуу кирешелердин жыйынды суммасы
import numpy as np
import pandas as pd
from scipy import stats
from dataclasses import dataclass
@dataclass
class EventStudyResult:
car: np.ndarray # Cumulative abnormal returns by day
t_stats: np.ndarray # t-statistics for each day
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, # Daily stock returns (columns = tickers)
market_returns: pd.Series, # Daily market index returns
events: pd.DataFrame, # DataFrame with columns: [ticker, date, signal_score]
estimation_window: int = 220,
gap: int = 30,
event_window: tuple = (-1, 60),
) -> EventStudyResult:
"""
Event study to evaluate the predictive power of LLM signals.
Sort events by signal_score, form long/short portfolios,
calculate CAR and test statistical significance.
"""
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: # Minimum 60 observations
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] # Shift to event date
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,
):
"""Backtest: long top-quintile signals, short bottom-quintile."""
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:
| Терезе | Long портфели | Short портфели | L/S спреди |
|---|---|---|---|
| [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-ден Prod-го чейин
Реалдуу убакыттагы пайплайн архитектурасы
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 чалуу) стандарттуу вариант менен 10000 турат. Позиция боюнча орточо альфа 1-3% болгондо — ROI астрономиялык.
Кечигүү: миллисекунддарга жарыш
HFT дүйнөсүндө кечигүү — баары. Бирок кирешеге негизделген стратегиялар үчүн абал башкача:
- Киреше боюнча чалуу 45-60 мүнөткө созулат — убакыт бар
- PEAD 60 күнгө созулат — биринчи секундда кирүүнүн кереги жок
- Негизги жылышуу чалуу аяктагандан кийинки алгачкы 30 мүнөттө болот
Оптималдуу стратегия — эки баскычтуу:
- 1-баскыч (реалдуу убакыт): чалуу учурунда 5 мүнөттүк бөлүктөрдү талдоо, алдын ала сигнал түзүү
- 2-баскыч (чалуудан кийин): аяктагандан кийин 2-5 мүнөттөн кийин бүтүндөй транскриптти толук талдоо
1-баскыч чалуунун аякташын күткөн рынок катышуучуларынан 5-10 мүнөт артыкчылык берет. Орточо капиталдуу акциялар үчүн бул жетиштүү.
Криптого кеңейтүү: DeFi башкаруусу жана DAO сунуштары
Крипто рыногу LLM alpha mining үчүн идеалдуу полигон. Себеби:
- Институционалдык оюнчулар аз — бул пайдаланууга боло турган натыйжасыздыктын көбүрөөк экенин билдирет
- Башкаруу = киреше боюнча чалуу — DAO чечимдери токеномикага түз таасир этет
- 24/7 рынок — реакцияны дароо соодалоого болот
- Ачык маалыматтар — бардык сунуштар жана добуш берүүлөр on-chain
Талдоо үчүн крипто окуяларынын түрлөрү
Башкаруу сунуштары (Aave, Compound, Uniswap)
Сунуш протокол параметрлерин өзгөртөт — пайыздык чендер, күрөө факторлору, fee switch-тер. 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-ну ишке киргизгенде — бул TradFi-де продукт чыгаруу менен барабар. LLM баяндоо динамикасын жана техникалык маанилүүлүктү баалай алат.
Казыналык отчеттор
Ири DAO-лордун жүздөгөн миллион турган казыналыгы бар. Тоок кинтелик казыналык отчеттор кирешенин түз аналогу. Runway, күйүү ыргактуулугу, диверсификация — баары LLM талдоосуна баш ийет.
Крипто сигналдарынын өзгөчөлүктөрү
TradFi-ден айырмаланып, криптодо:
- On-chain маалыматтар баяндоону ырастайт же четке кагат — башкаруу чалууларында айтылгандарды чыныгы протокол көрсөткүчтөрү (TVL, көлөм, активдүү колдонуучулар) менен кайчылаш салыштырууга болот
- Кит капчыктары инсайдердик соода катары — башкаруу талкууларынан кийинки чоң капчык кыймылдары көбүнчө добуш берүүдөн мурун болот
- CT (Crypto Twitter) аркылуу сентиментти күчөтүү — башкаруу чалуусунан алынган сигнал Twitter баяндоолору менен күчөтүлүшү же басылышы мүмкүн
Тузактар жана чектөөлөр
Галлюцинациялар: модель сандарды ойлоп тапканда
LLM транскриптте болбогон guidance-ты "алышы" мүмкүн. Бул хеджирлөө сөздөрүнүн тыгыздыгын талдоодо өзгөчө коркунучтуу: модель чындыгында бар сөздөрдөн көбүрөөк же азыраак эсептеши мүмкүн.
Чечим: эки баскычтуу текшерүү. LLM алат, детерминисттик код текшерет. Хеджирлөө сөздөрү үчүн — LLM баалоосу менен параллель regex эсептөө. Четтөө > 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:
"""Deterministic verification of LLM hedge word count."""
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 токен да жетишсиз болушу мүмкүн:
- Учурдагы транскрипт (~10K токен)
- Салыштыруу үчүн мурунку транскрипт (~10K)
- Талдоочулардын консенсус болжолдору (~2K)
- Few-shot мисалдары (~3K)
- Системалык промпт (~1K)
Баары ~26K — биз батабыз. Бирок эгер контекст үчүн 10-K каттоону (~80-120K токен) кошсоңуз — сиз мурунтан эле чектин четинде болосуз. Чечим: узун документтерден тиешелүү бөлүктөрдү алуу үчүн RAG.
Жактоо жана системалык каталар
LLM белгилүү фразалар белгилүү натыйжалар менен байланышкан тарыхый маалыматтарда үйрөтүлөт. Бирок рынок ыңгайлашат:
- Эгер баары GPT-4 менен хеджирлөө сөздөрүн эсептей баштаса, менеджерлер тилин өзгөртөт
- Модель окутуу маалыматтарынан алынган үлгүлөрдүн маанилүүлүгүн ашыкча баалашы мүмкүн (survivorship bias)
- Корпоративдик тил өнүгөт: 2010-жылы "синергия" бир нерсени билдирген, 2026-жылы — башка нерсени
Ашык топтолгон соода тобокелдиги
Эгер 50 квант-фонд бирдей транскрипттерди талдоо үчүн бирдей GPT-4-тү колдонсо — сигнал начарлайт. Окшоштук: баары сандык сюрприздер боюнча PEAD соодалай баштаганда, аномалия кичирейген. Тексттик сигналдар менен да ушундай болот, бирок кечигүү менен:
- Азыр (2026) — азыраак адам киреше боюнча чалуулар үчүн LLM-ди системалуу түрдө колдонот. Альфа олуттуу
- 2-3 жылда — кеңири колдонуу, альфа азаят
- 5 жылда — негизги LLM сигналдары товарга айланат, edge жалгыз гана атайын моделдерде жана уникалдуу маалыматтарда сакталат
Бул альфа сигналынын стандарттуу жашоо циклы. Ал уланганча ырахат алыңыз.
Жыйынтыктын ордуна: аракет планы
Киреше боюнча чалууларды талдоо үчүн LLM-ди колдонууну баштагыңыз келсе, минималдуу иштей турган план:
- Акысыз маалыматтардан баштаңыз — 8-K/10-Q каттоолору үчүн SEC EDGAR + EdgarTools
- Структураланган экстракцияны колдонуңуз — OpenAI Structured Outputs аркылуу Pydantic схемалары
- Event study аркылуу бэктест жасаңыз — тарыхый маалыматтардагы CAR, кеминде 200 окуя
- Few-shot мисалдарын кошуңуз — 5-10 белгиленген мисал сапатты түп-тамырынан жакшыртат
- Детерминисттик түрдө текшериңиз — LLM алат, regex текшерет, адам аудит жасайт
- Орточо капиталдан баштаңыз — көбүрөөк альфа, ири фонддор менен азыраак атаандаштык
- Криптого кеңейтиңиз — изилденбеген аймак катары башкаруу чалуулары жана DAO сунуштары
Сандык талдоонун негизги эрежесин эстен чыгарбаңыз: эгер сигнал чындыкка коошпогондой жакшы угулса — кайра текшериңиз. LLM-дер түшүнүү иллюзиясын жаратат, бирок анын артында статистикалык үлгү дал келтирүү жатат. Күчтүү курал — бирок курал, оракул эмес.
Библиография
-
Ball, R., Brown, P. (1968). An Empirical Evaluation of Accounting Income Numbers. Journal of Accounting Research, 6(2), 159-178. — PEAD-дын биринчи ачылышы.
-
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 макаласы.
-
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. — Каржылык сентимент сөздүгү.
-
Araci, D. (2019). FinBERT: Financial Sentiment Analysis with Pre-trained Language Models. arXiv:1908.10063. — Каржылык NLP үчүн BERT, SOTA-дан +14 пайыздык пункт.
-
Wu, S. et al. (2023). BloombergGPT: A Large Language Model for Finance. arXiv:2303.17564. — Bloomberg-дин 50B параметрдүү модели.
-
Yang, H. et al. (2023). FinGPT: Open-Source Financial Large Language Models. arXiv:2306.06031. — BloombergGPT-ке ачык булактуу альтернатива, 89% тактык.
-
Lopez-Lira, A., Tang, Y. (2023). Can ChatGPT Forecast Stock Price Movements? Return Predictability and Large Language Models. arXiv:2304.07619. — GPT-4 ~90% дал келүү менен кирешелерди болжолдойт.
-
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-ден эки эсе чоң.
-
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% ашыкча альфасы бар GPT-4 фреймворку.
-
Chen, Y. et al. (2025). GPT-Signal: Generative AI for Semi-automated Feature Engineering in the Alpha Research Process. arXiv:2410.18448. — LLM аркылуу соода сигналдарын автоматтык түзүү.
-
Zhang, X. et al. (2025). Can LLMs Hit Moving Targets? Tracking Evolving Signals in Corporate Disclosures. arXiv:2510.03195. — Корпоративдик ачыкка чыгарууларда "кыймылдуу максаттарды" аныктоо.
-
Chen, Z. et al. (2025). Large Language Models in Equity Markets: Applications, Techniques, and Insights. Frontiers in Artificial Intelligence. — Каржыдагы 84 LLM изилдөөсүнө сереп.
Бул макала билим берүү мүнөзүндө жана инвестициялык кеңеш болуп саналбайт. Бул жерде сыпатталган ар кандай соода стратегиясы чыныгы капитал менен ишке киргизүүдөн мурун толук бэктестирлөөнү жана тобокелдиктерди башкарууну талап кылат.
Authors
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.