Little Bird Trading

Pine Script, indikator mot strategi: skillnader och när du använder vilken

6 min läsning · Uppdaterad

På TradingView ser en indikator och en strategi nästan likadana ut i Pine Editor. En indikator ritar i ditt diagram. En strategi simulerar affärer och rapporterar vad de skulle ha gett. Att blanda ihop de två är den vanligaste orsaken till att ett skript som ser bra ut på historik gör en besviken live. Den här guiden går igenom skillnaderna som påverkar dina resultat, plus den tredje skripttypen, biblioteket.

Indikator, strategi och bibliotek: vad var och en är till för

  • Indikator (indicator()): beräknar och plottar. Använd den för nivåer, signaler som ritas med plotshape(), instrumentpaneler, marknadsbias och larm som byggs med alertcondition().
  • Strategi (strategy()): allt en indikator kan rita, plus simulerade order via strategy.entry, strategy.exit och strategy.close. TradingView kör de ordrarna och fyller Strategy Tester med affärsstatistik.
  • Bibliotek (library()): en uppsättning återanvändbara funktioner som du publicerar och sedan importerar i andra skript. Ett bibliotek läggs aldrig till i ett diagram på egen hand.

Ett enskilt skript deklarerar exakt en av de tre, så ett skript kan inte vara både indikator och strategi. En vanlig uppsättning är ett bibliotek med din gemensamma logik, en indikator för diagrammet och larmen och en strategi för testning.

Skillnaden på en rad

Den allra första raden i ett Pine-skript anger vilken sort det är. Ett skript som inleds med indicator() kan bara beräkna och plotta: linjer, färger, etiketter, fyllningar. Det har ingen uppfattning om en position, ett fyllningspris eller vinst. Ett skript som inleds med strategy() lägger till en motor för ordersimulering: det kan anropa funktioner som strategy.entry och strategy.exit, och TradingView kör de ordrarna mot historiska staplar för att ta fram rapporten i Strategy Tester, nettovinst, största drawdown, andel vinnande affärer, vinstfaktor och listan över simulerade affärer.

Uppdelningen är alltså: en indikator beskriver villkor, medan en strategi påstår vad de villkoren skulle ha gett. Det andra påståendet väger mycket tyngre än det första, eftersom du i samma stund som du simulerar order ärver en hög antaganden om när och till vilket pris ordrarna fylldes.

Där backtestmotorn i tysthet gör antaganden

En strategis kapitalkurva är bara så pålitlig som fyllningsantagandena under den. Fyra standardvärden gör det mesta av skadan:

  • Utvärdering vid stapelstängning. Som standard utvärderar testaren din logik när en stapel stänger. Om ett villkor hänvisar till stapelns egen högsta, lägsta eller stängningskurs kan den historiska "fyllningen" använda information som en livehandel inte kunde ha haft förrän efter att staplen var klar.
  • Fyllningar vid nästa stapels öppning. En marknadsorder som läggs på en signal fylls vid nästa stapels öppning i simuleringen. Vid en snabb öppning kan det utskrivna priset ligga flera tickar, eller punkter, från där du faktiskt skulle bli fylld.
  • Noll friktion. Om commission och slippage lämnas på noll i anropet till strategy() är varje simulerad affär gratis, medan varje verklig affär betalar courtage och slippage.
  • Stickprovsstorlek. Testaren rapporterar gärna en vacker kurva byggd på tolv affärer. Tolv vinster är brus i en fördels kläder.

Ett genomgånget exempel

Säg att en strategi visar +4200 US$ över 40 affärer i ES-terminer med kostnaderna lämnade på noll. Lägg till ett courtage på ungefär 5 US$ per rundtur, courtage för privatkunder på terminer varierar mycket mellan mäklare, så använd ditt eget, plus en tick slippage per sida. I ES är en tick 0.25 punkter, värd 12,50 US$, så en tick åt vardera hållet blir 25 US$. Det blir ungefär 30 US$ i friktion per affär, omkring 1200 US$ över 40 affärer, vilket drar en rubriksiffra på +4200 US$ ned mot ~3000 US$. Och det är den försiktiga varianten: om ingångarna klumpar sig vid volatila öppningar ligger verklig slippage över en tick och glappet växer. Ingen av den friktionen syns i indikatorversionen av samma logik, eftersom en indikator aldrig påstår att något har fyllts. Mer om att skilja en verklig fördel från en anpassad finns i hur du upptäcker överanpassade tradingsystem.

Signaler: plotshape i en indikator, order i en strategi

En indikator markerar en signal med plotshape() eller plotchar(), en triangel eller etikett på den stapel där ditt villkor var sant. Inget köps, så indikatorn har ingen affärsstatistik. En strategi gör samma villkor till en order med strategy.entry(), och Strategy Tester rapporterar sedan nettovinst, andel vinnande affärer, drawdown och hela affärslistan. För att mäta signalens träffsäkerhet flyttar du villkoret in i en strategi, lägger till realistiska kostnader och läser affärslistan.

Testa signaler: stängning mot intrastapel

Som standard räknar en strategi en gång per stapel, vid stängningen, och en marknadsorder fylls vid nästa stapels öppning. Tre inställningar ändrar det:

  • process_orders_on_close = true fyller order vid stängningen av signalstapeln.
  • calc_on_every_tick = true räknar om vid varje live-tick. Historiken har bara färdiga staplar, så resultat live och historiska resultat kan skilja sig åt.
  • use_bar_magnifier = true använder data från en lägre tidsram för att avgöra vilket av en stapels priser som kom först när både en stopp och ett mål ligger inom samma stapel.

Signaler som bekräftas vid stapelstängning ger den närmaste överensstämmelsen mellan backtest och resultat live.

Intrastapelsignaler har fortfarande sin plats. En utbrottsstrategi som måste agera i samma stund som priset korsar en nivå kan använda calc_on_every_tick live, så länge du först testar livevarianten framåt på ett papperskonto, eftersom backtestet inte kan visa hur signalen beter sig inne i en stapel. För indikatorer gäller samma uppdelning för larm: "Once Per Bar Close" väntar på den bekräftade staplen, och "Once Per Bar" utlöses första gången villkoret blir sant inne i staplen, även om staplen senare stänger åt andra hållet. Pine Script FAQ går igenom larminställningarna mer i detalj.

Vilken skripttyp fungerar i Pine Screener?

Pine Screener kör indikatorer. För att screena efter en strategis upplägg lägger du villkoret i en indikator och plottar värdet du vill filtrera på.

Vad repainting egentligen innebär

"Repainting" kastas på varje skript som visar andra värden i efterhand än det gjorde i realtid, men etiketten används ofta fel. Det ärliga testet är en enda fråga: hade det här beslutet kunnat fattas med samma information, i samma ögonblick, live? En signal som först bekräftas vid stapelstängning ber dig helt enkelt vänta på stängningen. De verkligt vilseledande fallen är signaler som plottas på en stapel som ännu bildas och sedan hoppar när den är klar, eller data från en högre tidsram som hämtas med lookahead. Att utvärdera logiken på en bekräftad stapel håller ditt backtest och din upplevelse live ärliga mot varandra, oavsett om du bygger en indikator eller en strategi.

Så hänger det ihop med handelsplanerna

Handelsplanerna kringgår medvetet repaintproblemet genom att ge dig fasta, förplanerade nivåer. De dagliga nivåerna, nivåerna för ES, SPY, NQ och QQQ, beräknas efter föregående stängning och rör sig inte under sessionen. Det finns inget som kan repainta: varje nivå är satt före 9:30 ET och ligger kvar. MyLinedChart, som ritar de linjerna, fungerar som en indikator. Den plottar nivåerna och simulerar ingenting, så de bär inget av antagandena om fyllningar eller courtage ovan. Om en publicerad nivå inte stämmer med vad din egen strategi säger är den oenigheten information, och ofta är svaret att vänta.

Bygg en strategi av dina egna nivåer

De flesta strategier handlar kring priser som en trader redan har ritat för hand: stöd, motstånd, en pivot. MyLinedChart exporterar varje linje, nivå, anteckning och indikator i ditt diagram som JSON, CSV eller XLSX. Ge filen till ChatGPT, Claude eller din egen kod och be om en Pine Script-strategi som handlar exakt de priserna. Du och din AI bestämmer hur strategin går in och ut.

En kort checklista innan du litar på någon av skripttyperna

  • Veta vilken du håller i: indicator() ritar bara, strategy() simulerar order och ger rapporten i Strategy Tester.
  • Ställ in realistiskt commission och slippage för det instrument du faktiskt handlar i en strategi innan du läser en enda vinstsiffra.
  • Bekräfta logiken på stängda staplar så att historik och live delar samma beslutsögonblick.
  • 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.

Använd på det här sättet är en indikator ett förstoringsglas och en strategi en hypotes. Testa båda mot riktiga fyllningar innan du litar på dem.

Relaterad läsning

Källor

Endast utbildningsinnehåll. Ingen investeringsrådgivning.

Endast utbildningsinnehåll. Ingen investeringsrådgivning.