1. září 2026 · korporátní události

Data upravená o štěpení, rozebraná do posledního řádku: co NVDA udělá s každým řádkem při štěpení 10 za 1

Data upravená o štěpení, rozebraná do posledního řádku: co NVDA udělá s každým řádkem při štěpení 10 za 1

Tady je jeden řádek ze souboru denních dat akcií. NVDA, pátek 7. června 2024, poslední obchodní seance před účinností štěpení 10 za 1.

Sloupec Hodnota
date 2024-06-07
close 1208.88
volume 42,800,000 (zaokrouhleno)
split_factor 1.0
dividend 0.00
adj_close 120.8781

Sloupce OHLC jsem v tomto přehledu záměrně vynechal. Vrátíme se k nim ke konci a právě ty nenápadně způsobují potíže.

Všechno zajímavé na tomto řádku se skrývá v rozdílu mezi druhým a šestým sloupcem. Trh 7. června zaznamenal cenu 1208.88. Za tuto cenu už nikdo nikdy neobchoduje, protože akcie, kterou tato jednotka označovala, už neexistuje. Hodnota 120.8781 je rekonstrukce a nejde jednoduše o 1208.88 děleno deseti. Projděme si sloupce jeden po druhém.

10:1dělitel použitý na každý předchozí řádek
0.99991789dividendový faktor zapsaný o den později
$90fiktivní provize za celý nákup a prodej
5.6pproční náklad vytvořený dělitelem

date: 2024-06-07 a další dvě data, která jsou důležitější

Štěpení bylo oznámeno 22. května 2024 spolu s výsledky hospodaření. Rozhodným dnem bylo 6. června. Obchodování na základě upraveném o štěpení začalo v pondělí 10. června. Tři data, ale sloupec split_factor vašeho dodavatele dat odpovídá přesně jednomu z nich, obvykle první seanci po štěpení. Chyba o jeden den je nejčastější chyba v práci s korporátními událostmi, kterou vídám, a v souhrnných výsledcích není vidět: vaše kapitálová křivka za jediný den zaznamená propad o 90 % nebo skok o 900 %, což Sharpeho poměr počítaný za 2,000 dní skoro nezachytí, ale maximální propad nebo pravidlo stop-lossu rozhodně ano.

Dividenda má vlastní problém s datem a v roce 2024 se pravidla změnila pro všechny. Čtvrtletní dividenda NVDA po štěpení činila $0.01 a její rozhodný den byl 11. června. Vypořádání obchodů v USA přešlo 28. května 2024 na režim T+1, což znamená, že nyní den bez nároku na dividendu a rozhodný den připadají na tentýž den. Každý načítač dat, který odvozuje den bez nároku jako „rozhodný den minus jeden pracovní den“ — což po desetiletí fungovalo správně — začal v červnu 2024 potichu vytvářet dividendové úpravy o jednu seanci dříve. Nic nespadne. Faktor se jen zapíše k nesprávnému řádku.

Chyba v kódu pro korporátní události se nikdy neprojeví výjimkou. Je to číslo posunuté o den, které vypadá naprosto věrohodně.

close: 1208.88 — cena, která v souboru není

Tohle je původní zaznamenaná cena a ve většině výzkumných pipeline existuje jen jako sloupec, který nikdo nečte. Signály se počítají z adj_close. A každé pravidlo, které pracuje s cenovou úrovní v dolarech za akcii, teď používá číslo, které žádný účastník trhu nikdy neviděl.

Růst NVDA směrem k $1,000 na jaře 2024 byl skutečný a stál za ním skutečný tok objednávek: kulaté cenové hladiny jako magnety, opční strike ceny soustředěné kolem 950 a 1000, titulková rizika při každém přiblížení. V upravených datech se celá tahle epizoda odehrává na úrovni $100. Pokud testujete chování kolem psychologických cenových hladin, logiku vyplňování cenových mezer poblíž kulatých čísel nebo příznak blízkosti strike ceny, testujete je na cenové řadě přepočtené událostí, která v té době ještě nenastala.

Totéž platí pro filtry investičního univerza. „Vyřadit akcie pod $5“ je legitimní ukazatel reálných problémů s mikrostrukturou: širokých relativních spreadů, pravidel pro obchodování na margin a cenových kroků. Použijte ho na historická data upravená o štěpení a vyřadíte firmy v obdobích, kdy se obchodovaly za $30 a později prošly reverzním štěpením. Použijte filtr „cena nad $500“ a potichu vyřadíte NVDA ze všech let před červnem 2024. Cenové filtry patří na neupravené zaznamenané ceny. Tečka.

split_factor: 1.0 — a 0.1 v následujícím řádku

Faktor je kumulativní součin počítaný zpětně od dneška. Každý řádek před 10. červnem 2024 nese hodnotu 0.1 z tohoto štěpení, vynásobenou hodnotou 0.25 ze štěpení 4 za 1 v roce 2021 a pak všemi předchozími faktory. Historie NVDA před rokem 2021 je přepočtená faktorem 0.025, takže cenový záznam, který v roce 2019 ukazoval $200, se nyní zobrazuje jako $5.00.

Stojí za to pamatovat na dva důsledky. Zaprvé, upravená historie se mění s každou novou korporátní událostí. Backtest, který jste spustili v květnu 2024, a ten dnešní dají při stejném kódu a stejném období odlišné výsledky. Pokud jste navíc cachovali příznaky podle symbolu a data bez označení verze dat, máte teď cache, která kombinuje dvě různá měřítka. Právě proto zahrnujeme epochu úpravy do klíče příznaku; stálo nás jedno velmi matoucí odpoledne, než jsme na to přišli.

Zadruhé, při přepočtu faktorem 0.025 se akcie, která se obchodovala v cenových krocích po $0.01, nyní pohybuje v krocích po $0.00025. Vaše logika zaokrouhlování na tick, porovnávání typu „je to nové maximum“ i kontroly rovnosti čísel s plovoucí desetinnou čárkou: to vše teď pracuje s přesností mnohem vyšší, než jakou měl skutečný trh.

dividend: 0.01 — hodnota, která naruší cenovou mřížku všech předchozích cen

Jeden cent. Vypadá to jako šum a právě kvůli němu adj_close ukazuje 120.8781 namísto čistých 120.888.

Závěrečná cena 10. června byla 121.79. Dividendový faktor je (121.79 − 0.01) / 121.79 = 0.99991789. Tento faktor násobí všechny ceny před 11. červnem, takže cena upravená o štěpení 120.888 se změní na 120.878074. Je to málo, ale natrvalo — a faktor se znovu použije při každém z více než šedesáti dnů bez nároku na dividendu v historii NVDA. Rozhoduje složený účinek: když se podíváte třeba na rok 2015, sledujete cenu vynásobenou desítkami faktorů, z nichž každý je trochu neintuitivní. Žádná upravená historická cena neleží přesně na cenové mřížce po centech.

To znamená, že každé porovnání == s kulatou cenovou hladinou je chybné, každá kontrola „dotkli jsme se limitní ceny?“ potřebuje toleranci a rekonstruované OHLC už po naivním zaokrouhlení na 4 desetinná místa nesplňuje vztah low ≤ open ≤ high. Znamená to také, že adj_close je řada celkového výnosu, zatímco close je řada cenového výnosu. Pokud z jedné počítáte výnosy a z druhé propady, smíchali jste dvě různé definice toho, co se stalo.

volume: 42,800,000 — dělitel, který se nepoužívá důsledně

Aby byl objem akcií srovnatelný se seancemi po štěpení, je potřeba ho vynásobit 10. Někteří dodavatelé to dělají, jiní ne. Někteří upraví OHLC a nechají objem v původních jednotkách — to je ze tří možností nejhorší, protože soubor vypadá vnitřně konzistentně, dokud nevynásobíte cenu objemem.

Rozumné řešení je přestat používat objem akcií jako příznak a místo něj použít dolarový objem, který je ze své podstaty vůči štěpení neměnný. Filtr likvidity založený na průměrném dolarovém objemu za 20 dní nepotřebuje žádnou logiku úprav a korporátní událost ho nemůže rozbít. Neměnnost příznaků je lepší než správně napsaný kód pro úpravy, protože správnost tohoto kódu musíte neustále udržovat.

Tři podoby souborů od dodavatelů, tři způsoby, jak selhat.

Co obsahují Co se pokazí
Pouze upravená závěrečná cena, neupravené OHLC Výpočty cenových mezer a pohybů uvnitř seance kombinují dvě cenová měřítka
Upravené OHLC, neupravený objem Dolarový objem neodpovídá poměru štěpení; filtry ADV selhávají
Neupravené OHLCV a sloupce s faktory Nic, pokud je použijete správně. Všechno, pokud je použijete pro nesprávný řádek

Chybějící sloupce: adj_open, adj_high, adj_low

Vraťme teď OHLC zpátky. Pokud datový feed upravuje pouze závěrečnou cenu a vaše strategie počítá noční cenovou mezeru jako open / prev_adj_close − 1, pak pro 10. červen 2024 vypočítá 120.37 / 120.8781 − 1, což je rozumný výsledek, přibližně −0.4 %. Spusťte stejný kód zpětně pro 7. červen 2024 a použije otevírací cenu z neupraveného souboru (zhruba 1207) vůči závěrečné ceně upravené faktorem 0.025 kvůli starším štěpením. Výsledkem bude mezera v řádu několika tisíc procent.

Jakýkoli výpočet kombinující neupravený sloupec s upraveným počítá napříč dvěma souřadnicovými systémy. Čtení sloupců s různým typem úpravy teď hlídám kontrolou přímo v načítači dat, místo abych spoléhal na to, že si na to výzkumník vzpomene. Nevzpomene, a to včetně mě.

Co vám neřekne žádný sloupec: kolik akcií byste skutečně koupili

Právě tohle ovlivňuje náklady v nákladovém modelu backtestu a právě proto vůbec píšu o štěpení akcií.

Provize za obchodování s akciemi v USA se často počítají za akcii. Řekněme $0.005 s minimální provizí $1.00 za objednávku, což je běžná pevná sazba retailového brokera. Teď otestujte pozici v NVDA za $400,000 rok před štěpením, kdy se neupravená cena pohybovala kolem $400 a upravená cena se zobrazovala jako $40.

Akcie Provize
Skutečný průběh (neupravená cena $400) 1,000 $5.00
Co vidí backtest (upravená cena $40) 10,000 $50.00

Stejná expozice, stejný obchod, 10× vyšší modelované náklady. To je $45 fikce za každou stranu obchodu, $90 za celý obchod tam a zpět. Strategie s každodenním obratem tak ročně zaplatí zhruba $22,000 na nákladech, které nikdy neexistovaly. U portfolia za $400k jde o 5.6 procentního bodu ročního výnosu, které celé vytvořil dělitel. Tady díky tomu vypadáte hůř, než odpovídá skutečnosti, což se dá přežít.

U reverzního štěpení je to naopak a právě to je nebezpečné. Reverzní štěpení 1 za 10 znamená, že upravená historie ukazuje ceny 10× vyšší a počty akcií 10× nižší, než za kolik byste skutečně obchodovali. Nákladový model potichu vydělí provizi za akcii deseti. Reverzní štěpení je běžné u malých firem s tržní kapitalizací pod $5 a širokými spready, kde poplatky za akcii tvoří největší jednotlivou položku nákladů. Backtest tak lichotí přesně těm akciím, které by měl penalizovat.

Řešení je jednoduché a systémové: určujte velikost pozic v dolarech, převeďte ji na počet akcií pomocí neupravené ceny pro daný den a provize za akcii počítejte z tohoto počtu. Neupravený cenový sloupec ponechte v načítači napořád — ne jako záznam pro kontrolu, ale jako živý vstup do modulu plnění objednávek.

  1. Signály a výnosy: upravená řada.
  2. Počty akcií, poplatky za akcii, zaokrouhlování na tick a cenové filtry: neupravená řada.
  3. Likvidita a kapacita: dolarový objem, který nepotřebuje ani jednu úpravu.

Šest sloupců, jeden řádek a jedna poměrně běžná korporátní událost, oznámená tři týdny předem, která nikoho nepřekvapila. Trh se s ní vypořádal během jednoho dopoledne. Věrně ji zrekonstruovat ve výzkumné pipeline je podstatně těžší a nedostatečně zpracovanou pipeline téměř nikdy neprozradí chybová zpráva.

korporátní událostiúprava o štěpeníamerické akciedatové inženýrstvíbacktestování
← Všechny články