Vanliga frågor om Pine Script: backtester och larm
4 min läsning · Uppdaterad
Det här är en FAQ på vanlig svenska om de två Pine-frågor som får nästan alla att snubbla på TradingView: varför en strategis backtest ser bättre ut än handeln live känns, och varför ett larm ibland utlöses vid en annan tidpunkt eller till ett annat pris än du väntade dig. Båda har samma grundorsak, en skillnad mellan vilken data som faktiskt fanns när ett beslut fattades och vad dina ögon ser när staplarna har stängt.
Vad är skillnaden mellan en indikator, en strategi och ett larm?
En indikator (indicator()) ritar och beräknar bara, den plottar linjer, färger och etiketter. En strategi (strategy()) simulerar order: den anropar strategy.entry/strategy.exit, fyller dem mot historiska staplar och ger rapporten i Strategy Tester med nettovinst, drawdown och andel vinnande affärer. Ett larm är ett separat aviseringslager som TradingView utlöser när ett villkor är sant, och det handlar ingenting på egen hand. Förvirringen börjar när folk läser ett backtest som ett löfte, eller väntar sig att ett larm ska vara en fyllning. Det är tre olika uppgifter. För en djupare genomgång, se guiden om indikator och strategi.
Varför ser mitt backtest bra ut men mina resultat live stämmer inte?
Fyra saker blåser upp ett backtest jämfört med verkligheten, och alla går att åtgärda:
- Antaganden om stängning mot intrastapel. Som standard utvärderar Strategy Tester logiken vid stapelstängning. Om ditt villkor använder den aktuella stapelns högsta, lägsta eller
stängningskurspå ett sätt som först är känt efter att staplen är klar, använder den historiska fyllningen information som en livehandel aldrig kunde ha haft. - Standardfyllningar till orealistiska priser. En marknadsorder i testaren fylls vid nästa stapels öppning, och vid en snabb öppning kan det priset ligga flera tickar eller punkter från vad du får live.
- Inget courtage eller slippage modelleras. Om du låter
commission_valueochslippagestå på noll istrategy()är varje simulerad affär friktionsfri. Lägg in realistiska värden, redan en bråkdel av en tick slippage gör många "lönsamma" scalpingsystem negativa. (Courtage ställs in medcommission_typeochcommission_value.) - Små stickprov. Tolv affärer som alla lyckades är för litet underlag för att tala om en fördel. Se hur du upptäcker överanpassade tradingsystem innan du litar på någon kurva.
Räkneexempel: ett system som visar +4200 US$ över 40 affärer i ES utan kostnader ser helt annorlunda ut när du lägger till ett courtage på 2,50 US$ per rundtur och en tick slippage på varje sida, vid ingång och utgång. En tick i ES är 0.25 punkt = 12,50 US$, så två tickar är 25,00 US$. Lägg till courtaget på 2,50 US$ så får du 27,50 US$ i friktion per affär. Över 40 affärer blir det ungefär 1100 US$, vilket gör en rubriksiffra på +4200 US$ till ungefär +3100 US$, och det blir värre om ingångarna klumpar sig vid volatila öppningar där verklig slippage ligger över en enda tick.
Vad är repainting, och betyder det att skriptet är trasigt?
Inte nödvändigtvis. "Repainting" är ett samlingsbegrepp för att ett skript visar andra värden på historiska staplar än det gav i realtid. Det ärliga testet är enkelt: hade beslutet kunnat fattas med samma information, i samma ögonblick, live? En signal som först bekräftas efter att staplen stängt gör sitt jobb: den väntar på stängningen innan den bekräftar. Problem uppstår med skript som plottar en signal på den stapel som håller på att bildas och sedan flyttar den när staplen är klar, eller som hämtar data från en högre tidsram med lookahead påslaget. Vill du ha en signal du kan agera på, utvärdera den på barstate.isconfirmed (stapelstängning), som bara reagerar på den färdiga staplen.
Varför utlöstes mitt larm sent, till ett annat pris eller två gånger?
- "Once Per Bar Close" mot "Once Per Bar." Ett larm som är inställt att utlösas på den stapel som bildas kan gå av i samma ögonblick som ett villkor flimrar till sant inom staplen, och sedan stänger staplen någon annanstans och det ser "fel" ut. Att utlösa vid stapelstängning är senare, men det motsvarar det ögonblick då en bekräftad strategi faktiskt fattar sitt beslut (strategin agerar sedan vid nästa stapels öppning).
- Larmpriset är en ögonblicksbild vid den tidpunkt då larmet utlöstes. Din mäklare fyller dig till det aktuella marknadspriset, som rör sig under de millisekunder som ligger mellan larmet och din order.
- Dubbla utlösningar betyder oftast att villkoret var sant över flera tickar och att larmet var inställt på att utlösas vid varje tick när det borde utlösas en gång per stapel.
Hur hänger det här ihop med metoden bakom handelsplanerna?
Handelsplanerna kringgår hela frågan "repaintade min signal?" genom att ge dig fasta, förplanerade nivåer. De dagliga nivåerna, inritade på ES, SPY, NQ och QQQ före öppningen, beräknas efter föregående stängning och flyttar sig inte under sessionen, så det finns inget som kan repainta: varje nivå är satt före 9:30 ET och ligger kvar. MyLinedChart ritar bara de nivåerna och simulerar aldrig order, så det bär inget av antagandena om backtestfyllningar ovan. Om en publicerad nivå inte stämmer med ditt eget larm eller din strategi, se det som information, och ofta är svaret att vänta. För vokabulären, se ordlistan för handelsplaner.
Praktisk checklista innan du litar på något Pine-resultat
- Bekräfta logiken på
barstate.isconfirmedså att backtest och live delar samma beslutsögonblick. - Ställ in realistiskt courtage och slippage,
commission_type,commission_valueochslippageistrategy(), för det instrument du faktiskt handlar. - Välj larmfrekvens medvetet: stapelstängning för bekräftelse, en gång per stapel för att undvika dubbletter.
- Bedöm resultat utifrån tillräckligt många affärer för att det ska säga något.
- Håll kontextuella överlägg (som publicerade nivåer) skilda från beslutsmakten. Diagrammet ger underlag, och dina nedskrivna regler fattar beslutet.
Relaterad läsning
- Guide: Pine Script, indikator eller strategi
- Så upptäcker du överanpassade tradingsystem
- Guide: bekräftelse mot första beröring
Källor
- TradingView Pine Script-dokumentation: strategier
- TradingView Pine Script-dokumentation: omritning
- TradingView: dokumentation för Pine Script, larm
- CFTC: Varning för bedrägerier med tradingsystem
Endast utbildningsinnehåll. Ingen investeringsrådgivning.
Endast utbildningsinnehåll. Ingen investeringsrådgivning.