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

ID přežije změnu pořadíTři libovolné ceny a příznaky; pouze přiřazení kandidáta.MODELOVÝ VÝPOČETCeny A,B,C100,102,104Příznaky C,A,B1,0,0Series podle IDC:104
ID přežije změnu pořadí. Tři libovolné ceny a příznaky; pouze přiřazení kandidáta.

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

  1. Uložte izolovaný projekt, originál s ID, UTC a cenovou stranou; nejsou potřebné živé přihlašovací údaje ani pokyn.
  2. U několika záznamů doložte dostupnost signálu, další realizovatelnou událost, revize a chybějící hodnoty.
  3. Definujte přidávání, obrácení a opětovné vstupy po stopu; porovnejte očekávaná ID.
  4. Usmiřte plnění a náklady před výpočtem souhrnů; zmrazte pravidla i alternativní předpoklady.
  5. Uchovejte pokusy, vyhrazená okna a omezení. Pevný pokles výkonu sám neurčuje příčinu; využijte rozbor rozdílného výsledku.