V tomto článku
Po přečtení dokážete…
- Odhalit přesun signálu při ztrátě indexu a použití budoucí publikace.
- Oddělit uzavření svíčky, rozhodnutí, pokyn a plnění.
- Usmířit náklady a sdílený kapitál před porovnáním výsledků.
Vysvětlení pojmů přímo v článku
Backtest: historický test pravidel Provedení pokynu Obchodní provize Drawdown: pokles od předchozího vrcholu Stop-loss: aktivace a plnění Take Profit (TP) Skluz při provedeníPythonový backtest je řetězec od identifikovaných dat přes tehdy dostupné informace k pokynu, plnění a účetnímu záznamu. Rychlý graf equity neodhalí, že signál použil budoucí publikaci, neuzavřenou svíčku nebo cenu, kterou realizační model nepovoluje. Začněte několika dohledatelnými řádky, nikoli tvrzením o výnosnosti.
Prostředí vybírejte podle výzkumné otázky
MT5 Strategy Tester podporuje víceinstrumentové EA, testování i optimalizaci; Python není nutný únik z domnělého limitu jednoho páru. Pomáhá organizovat data, vlastní výpočty a výzkum. Pro srovnání implementací zmrazte stejná data, kontrakt a pravidla. pandas a NumPy jsou výpočetní nástroje, Backtrader nabízí událostní postup. vectorbt při simulaci rovněž mění stav hotovosti a aktiv a nabízí režimy pokynů, signálů i vlastní funkce.
Název knihovny nezaručuje realistickou exekuci ani pevný čas běhu. Zvolte nejmenší potřebnou sestavu, uložte verze a prověřte licenci, práva k datům i podporované prostředí. Data a provoz mohou mít samostatnou cenu. yfinance není oficiální záruka úplnosti Yahoo dat a CCXT obsluhuje data burz; pro konkrétní FX produkt nejprve ověřte skutečný zdroj.
Uložte data i jejich význam
Evidujte poskytovatele, produkt, instrument, cenovou stranu, interval, časové pásmo a požadovaný i skutečný rozsah. Uchovejte originál, ID, pořadí, duplicity a transformace. Uzavření trhu není automaticky poškozený soubor a doplnění mezery může vymyslet pozorování. Kontrola mezer proto předchází opravám.
MetaTrader 5 copy_rates_range vrací čas, OHLC, tick volume, spread a real volume, nikoli úplný historický sazebník komisí a financování. Historie závisí na terminálu a nastavení počtu svíček. Zadání rozsahu nedokazuje jeho úplné vrácení. Argumenty a vrácené časy používejte jako explicitní UTC, teprve potom převádějte lokální harmonogram.
Zahozením indexu můžete přesunout signál na jinou svíčku
Stejná délka polí nestačí. Cena kandidáta ještě není plnění.
- Ceny A,B,C
- 100,102,104 – Jedinečná ID.
- Příznaky C,A,B
- 1,0,0 – Jednička náleží C.
- Series podle ID
- C:104 – Pole bez ID by označilo A:100.
Fiktivní dokončené ceny mají ID A:100, B:102, C:104. Příznaky jsou v jiném pořadí C:1, A:0, B:0. Součin pandas Series podle štítků dává A:0, B:0, C:104. Součin neoznačených polí podle pozice dává 100,0,0; při připsání k A,B,C označí A. Obě pole mají délku tři, takže kontrola délky tuto chybu nenajde. Před to_numpy() zkontrolujte ID a duplicity. Ani správné přiřazení nezaručuje správný čas dostupnosti. Příznak jen vybírá kandidáta; neznamená pokyn, cenu plnění nebo finanční výsledek.
Kdy lze záznam skutečně použít
Svíčka H1 označená otevřením 10:00 nemá dokončené OHLC v 10:00. Při převzorkování rozlišujte členství intervalu closed a jeho popisek label; přejmenování nezpřístupní agregát dříve. Makrodata spojujte podle času publikace tehdy dostupné verze, nikoli pouze měsíce, který popisují.
merge_asof vyžaduje seřazené spojovací klíče. backward vybere dřívější či stejný čas, nearest může budoucí. Rozhodnutí nastává v 10:04 UTC. V uloženém souboru jsou publikace 10:00 s 50 a 10:05 s 60; druhá ještě dostupná není. Bez omezení tolerance backward vybere 50, čtyři minuty staré; nearest 60, minutu v budoucnosti. Se zpětnou tolerancí včetně dvou minut není shoda. Chybějící údaj zachovejte; funkce sama nerozpozná pozdější revizi. Událostem se stejným časem určete pořadí.
Samostatný model dvaceti svíček má High 100 až 119, každá Open=High−0,5, Low=High−2, Close=High−1. Svíčka 21 má O120/H121/L118/C120,5;22 má O120,6/H122/L119/C121. Jde o libovolné ceny, ne pozorované FX obchody.
previous_high = bars["high"].shift(1).rolling(20).max()
signal = bars["close"] > previous_high
next_bar_signal = signal.shift(1, fill_value=False)
U21 je maximum předchozích dvaceti 119 a 120,5>119 platí. Zahrnutí aktuálního High by dalo 121 a nepravdu. Posun přesune signál do 22, ale neurčuje jeho realizační cenu, přijetí pokynu ani výstup. Uzavřené vstupy, objem a pořadí událostí musejí být výslovné.
Oddělte signál, plnění a náklady
Standardní model Backtrader pro Market po zpracování svíčky používá Open příští dostupné svíčky; jiné nastavení může časování změnit. OHLC neříká, zda při zasažení stopu i cíle nastal první jeden, nebo druhý. Vlastní model: nákup 10 000EUR za EUR/USD Ask 1,1002 při Bid 1,1000, pozdější prodej za Bid 1,1012 při Ask 1,1014. Pip 0,0001USD/EUR dává deset pipů,10USD. Komise 1USD na každé straně ponechá 8USD při nulovém financování a dodatečném skluzu. Další odečet dvoupipového vstupního spreadu by dal 6USD a započítal již obsažený náklad znovu.
Nový oddělený CZK případ sdílené hotovosti: účet má 10 000Kč dostupného marginu, dva současné požadavky potřebují každý 6 000Kč. Přidělená politika přijímá celý pokyn, ne částečný, bez uvolnění či změny ceny. První projde, zbude 4 000; druhý je odmítnut, neboť by celkem potřebovaly 12 000. Dvě nezávislé simulace s vlastními 10 000 by přijaly oba. Uložte ID prvního přijatého pokynu a pravidlo pořadí; samotný součet nezávislých křivek nereprodukuje tento účet.
Specifikujte financování, převody, kontrakt, margin a odmítnutí. Náhodný skluz potřebuje distribuci, seed a verzi knihovny. Tyto ilustrace nejsou skutečný běh brokera.
Účetní kniha umožňuje výsledek zkontrolovat
Čtyřicet výher+2R a šedesát ztrát−1R při stejném peněžním R dává zisky 80R, ztráty 60R, čistých 20R, PF80/60≈1,33, průměr 0,2R. Cena 0,1R na každý obchod mění výplaty na+1,9/−1,1: zisky 76R, ztráty 66R, čistých 10R, PF≈1,15 a průměr 0,1R. Nejde o tržní backtest.
Samostatná stavová ukázka má podmínky pěti svíček true,true,true,false,true. Obě politiky vstoupí na 1; stop zavře na 2 před vyhodnocením vstupu, později již nevystupují. Politika „flat a true“ znovu vstoupí na 2. Politika vyžadující nové false čeká přes 2–3, znovu se aktivuje na 4 a vstoupí na 5. Obě mají dva vstupy, ale jiné časy. Toto je zvolený automat, nikoli výchozí chování knihoven.
Uchovejte otevřené ocenění i uzavřené obchody, počáteční kapitál pro propad a oddělte toky. Nepřidávejte Sharpe, výnos či propad, který nelze z časované knihy reprodukovat.
Výběr pravidel oddělte od vyhrazených dat
Před volbou parametrů stanovte chronologická trénovací a testovací okna. Uložte všechny zkoušené instrumenty, filtry, parametry a řezy včetně odmítnutých. Malý počet parametrů neznamená málo zkoušených hypotéz. Práce Baileyho a spoluautorů řeší přeučení opakovaným výběrem; zde nepočítáme PBO. Walk-forward vyžaduje vlastní protokol.
Samostatných 75 výher+0,2R a 25 ztrát−1R má 75% úspěšnost, ale 15R−25R=−10R před náklady a PF0,6. Univerzální hranice win rate nebo PF neidentifikuje chybu či přeučení. Prověřujte příčiny přímo.
Co udělat při dalším offline přezkumu
- Uložte izolovaný projekt, originál s ID, UTC a cenovou stranou; nejsou potřebné živé přihlašovací údaje ani pokyn.
- U několika záznamů doložte dostupnost signálu, další realizovatelnou událost, revize a chybějící hodnoty.
- Definujte přidávání, obrácení a opětovné vstupy po stopu; porovnejte očekávaná ID.
- Usmiřte plnění a náklady před výpočtem souhrnů; zmrazte pravidla i alternativní předpoklady.
- Uchovejte pokusy, vyhrazená okna a omezení. Pevný pokles výkonu sám neurčuje příčinu; využijte rozbor rozdílného výsledku.
Ověřte si, co jste se naučili
Přibližně 2 minut procvičování.
Zobrazit odpověď a vysvětlení
Jediná jednička patří ID C. Jeho cena je 104 bez ohledu na pořadí příznaků.
Další otázky
Potřebuji pokročilý Python?
Nejprve zvládněte čtení dat, funkce a rozdíl indexu od pozice. Reprodukujte malý úplný model s časem, stavem, výstupem a náklady. Třicet řádků ani pevný harmonogram neprokazuje připravenost.
Backtrader nebo vectorbt?
Porovnejte skutečný režim s požadavky. Standardní Market Backtrader pracuje s příštím Open; vectorbt rovněž aktualizuje stav a má více režimů simulace. V obou ověřte výchozí náklady, pořadí a závislosti. Univerzální rychlost ani realističnost z názvu neplyne.
Kde hledat historická data?
Určete poskytovatele, produkt, cenovou stranu, čas a dostupnou historii. copy_rates_range poskytuje svíčková pole a UTC s omezením historie terminálu. yfinance používá Yahoo data s podmínkami užití, CCXT data burz. Zachovejte originál a popis oprav místo žebříčku názvů nástrojů.
Jak poznám příliš dobrý výsledek?
Ověřte příčinnost, ID, tehdy dostupné signály, jednotky plnění a nákladů a záznam všech výběrů. Použijte předem vyhrazená okna. Samotná úspěšnost ani PF neprokazuje chybu: zde 75% výher po 0,2R stále vede k−10R před náklady.
Zdroje a ověření
- pandas — Spojování podle času
Čerstvě čteno 60–137: vzestupné klíče, backward/nearest, tolerance a přesné shody. Funkce nezná skutečný čas publikace a následné revize; naše časy jsou ilustrace.
- pandas — Index Series
Čerstvě relevantně čteny indexy a převod na pole 135–196; zachování štítků se liší od operace bez indexu. Jde o kontrolu přiřazení, nikoli důkaz správné exekuce.
- MetaQuotes — Historické svíčky Python API
Čerstvě čteno 75–111: rozsah podle času otevření, pole, limit historie a UTC. Neobsahuje úplný historický sazebník nákladů.
- Backtrader — Standardní realizace Market
Čerstvě přečten oficiální popis dalšího Open pro standardní Market. Jiná nastavení mění model; z toho neplyne realistické plnění libovolného živého produktu.
- vectorbt — Stav portfolia
Čerstvě přečten oficiální úvod workflow a tří režimů: simulace aktualizuje cash a aktiva. Nepřisuzujeme vektorovým vstupům nezávislost všech exekucí ani univerzální rychlost.
- Bailey a spoluautoři — Pravděpodobnost přeučení backtestu
Čerstvě přečten veřejný autorský abstrakt28–30 a bibliografický záznam. Zabývá se PBO a CSCV; plný článek zde nebyl čten a z vlastních ilustrací nepočítáme PBO. Pokus o jiný univerzitní záznam narazil na ochranu proti robotům.
Výpočty používají výslovně uvedené předpoklady. Nenahrazují aktuální tržní údaje ani podmínky poskytovatele.
