Alex — du sendte mig to aktiekurver og en klage. 20-dages breakout ved højeste kurs ser rent ud i backtesten. Papirkontoen, der kører den samme kode på de samme aktier, tager omtrent halvt så mange positioner og bliver så stoppet ud på dage, hvor backtesten aldrig blinkede. Du spurgte, om vores paper-gateway taber ordrer. Det gør den ikke. Dine dagsbars klistrer to sessioner sammen og kalder resultatet for en dag.
Jeg fandt den mid-cap-aktie, du satte ring om, fra 22. oktober. Leverandørens daglige højeste kurs er $41.86. I den almindelige handelssession kom kursen aldrig over $41.12. De $41.86 stammer fra en handel på 800 aktier kl. 7:41 PM Eastern, midt i et spread på 22 cent. Dit signal markerede en ny 20-dages højeste kurs og lagde en købsordre ind til næste åbning. Papirhandlen, som vi kører fra 9:30 til 16:00 Eastern, medmindre du ændrer indstillingen, så aldrig breakoutet. Der var intet at købe.
Hvilken højeste kurs står der på den række?
På amerikanske aktier er daglige bars en bekvemmelighed, som leverandøren tilbyder. Du kan få mindst tre forskellige bars for den samme kalenderdato, og de fleste CSV-eksporter fortæller dig ikke, hvilken du har fået.
| Bar | Klokkeslæt | Hvor den højeste/laveste kurs kommer fra | En handel til den højeste kurs ville have betydet |
|---|---|---|---|
| Almindelig handelssession | 9:30-16:00 ET plus de to auktioner | Den løbende ordrebog og åbnings-/lukningsauktionerne | At være med i den almindelige session, ofte i en auktion |
| Udvidet | Omtrent 4:00-9:30 og 16:00-20:00, afhængigt af mægler | Sparsomme handler før markedets åbning og efter lukketid | En session, din kontantkonto måske slet ikke har adgang til |
| Sammensat | Det, leverandøren nu engang har flettet sammen | En blanding af ovenstående, nogle gange odd lots og TRF-handler | En handel, der måske omfattede 80 aktier ved et bredt kursinterval |
Krypto lærte dig at betragte midnat UTC som starten på en handelsdag. Aktier er ikke forpligtet til at følge den logik. Den handelsplatform, du faktisk kan nå fra en kontantkonto, der kun må gå long, giver dig seks og en halv times løbende handel og to auktioner. Resten er en anden gruppe aktører, et andet spread og ofte en anden sidste kurs.
Jeg har stadig en mappe med Yahoo-CSV'er fra 2015, hvor jeg var sikker på, at jeg havde fundet en fin Donchian-strategi på små biotekaktier. De højeste kurser kom fra handler efter lukketid i forbindelse med binære begivenheder. Jeg backtestede andres panikhandler på 200 aktier og kaldte det en kanal. Du gør det samme i en mere respektabel udgave med et betalt datafeed.
Hvis din research-agent bad en leverandør om daglige OHLCV-data uden at spørge, hvilken session de dækker, så gå ud fra, at de er sammensatte. Agenter vælger standardindstillingen, fordi den er bekvem. Det er sådan, en handel kl. 7:41 PM ender midt i et breakout.
Hvorfor papirhandlen så ser forkert ud i begge retninger
Når sessionen i filen og sessionen på kontoen ikke stemmer overens, får du ikke bare for få handler. Du får tre slags afvigelser, og du havde dem alle tre.
- Breakout ved en højeste kurs fra den udvidede session. Backtesten går ind ved næste almindelige åbning. Papirhandlen fik aldrig et signal. Det forklarer dine otte manglende positioner.
- Stop under gårsdagens laveste kurs, hvor gårsdagens laveste kurs kommer fra den sammensatte bar. Backtesten har allerede lukket positionen efter et udsving efter lukketid. Papirhandlen, der kun registrerer den almindelige session, holder positionen ind i en dag, som backtesten viser som flad.
- Det omvendte stop: Papirhandlen registrerer sidste kurs, også før markedets åbning. En handel kl. 5:10 AM lukker din position, mens backtesten for den almindelige session stadig har den åben, fordi den handel ikke er med på dens bar.
Stop-scenariet er værre end det missede breakout. Missede indgange viser sig som færre handler. Stop, der udløses i et rum med syv personer, viser sig som andre dollarbeløb på de handler, du faktisk tog. Derfor gav du gatewayen skylden.
På 1-minute-bars er den samme fejl mindre tydelig. Filtrér efter session i America/New_York. Hvis filen ikke har et sessionstag, er filteret ren staffage.
Fastlæg sessionen, før du justerer lookback-perioden
Jeg kørte din 20-dages højeste kurs igen med daglige bars fra den almindelige handelssession, de samme aktier og de samme datoer. Seks breakouts er tilbage. Det er papirhandelskontoens resultat. De andre otte skyldtes en handel, du skulle have taget kl. 7:41 PM med 800 aktier. Brug ikke en uge på at tilpasse en parameter for slippage i papirhandlen til en uoverensstemmelse mellem sessioner.
For hver aktieserie skal du sætte tre booleske værdier i research-kontrakten: includes_premarket, includes_afterhours, includes_odd_lots. Vælg derefter den session, strategien må handle i, og sørg for, at fill-modellen bruger den session. Hvis du faktisk vil handle i den udvidede session, så sig det, og dimensionér positionerne som ved handel kl. 7:41 PM: bredere spreads, langsommere annulleringer og en ordrebog, der ligner et kursbud, men i virkeligheden kun er én lot.
Hvis en leverandør ikke kan fortælle dig, hvilken session en daglig række dækker, så behandl den som sammensat, indtil de kan. Spørg dem skriftligt. Et webdiagram giver dig ikke svaret. Hvis du senere beslutter, at strategien skal handle ved lukning, er det en anden historie: Den officielle lukkekurs sættes ved en auktion, du skal deltage i.
Kør den igen med sessionen fastlagt. Så kan vi tale om de seks.
← Alle indlæg


