Saturday, 9 December 2017

Trading strategier för amibroker


Backtesting: Tolkning Tidigare Backtesting är en nyckelkomponent i effektiv handelssystemutveckling. Det uppnås genom att rekonstruera med historiska data, som skulle ha inträffat i det förflutna med hjälp av regler definierade av en given strategi. Resultatet erbjuder statistik som kan användas för att mäta strategins effektivitet. Med hjälp av dessa data kan handlare optimera och förbättra sina strategier, hitta tekniska eller teoretiska brister och få förtroende för sin strategi innan de appliceras på de verkliga marknaderna. Den bakomliggande teorin är att varje strategi som fungerade bra i det förflutna sannolikt kommer att fungera bra i framtiden, och omvänt sett är det sannolikt att någon strategi som utförde dåligt i det förflutna sannolikt kommer att fungera dåligt i framtiden. Den här artikeln tar en titt på vilka applikationer som används för att backtest, vilken typ av data som erhålls och hur man använder den Data och verktygen Backtesting kan ge mycket värdefull statistisk återkoppling om ett visst system. Några universella backtesting statistik inkluderar: Nettoresultat eller förlust - Nettoprocent vinst eller förlust. Tidsram - Tidigare datum då testingen inträffade. Universe - Lager som inkluderades i backtest. Volatilitetsåtgärder - Max procent upp och ner. Medeltal - Procentuell genomsnittlig vinst och genomsnittlig förlust, medelstänger hålls. Exponering - Andel av investerat kapital (eller exponerat för marknaden). Förhållanden - vinst-till-förlustförhållande. Årlig avkastning - Procentuell avkastning över ett år. Riskjusterad avkastning - Procentuell avkastning som en funktion av risken. Typiskt kommer backtesting programvara att ha två skärmar som är viktiga. Den första tillåter näringsidkaren att anpassa inställningarna för backtesting. Dessa anpassningar inkluderar allt från tidsperiod till provisionkostnader. Här är ett exempel på en sådan skärm i AmiBroker: Den andra skärmen är den faktiska backtestingresultatrapporten. Här kan du hitta all statistik som nämns ovan. Återigen, här är ett exempel på den här skärmen i AmiBroker: I allmänhet innehåller de flesta handelsprogrammen liknande element. Vissa avancerade program innehåller även extra funktionalitet för automatisk positionering, optimering och andra mer avancerade funktioner. De 10 buden Det finns många faktorer som handlare uppmärksammar när de backtesting handelsstrategier. Här är en lista över de 10 viktigaste sakerna att komma ihåg vid backtesting: Ta hänsyn till de brett marknadstrender inom tidsramen där en given strategi testades. Till exempel, om en strategi bara backtestades 1999-2000, kanske det inte går bra på en björnmarknad. Det är ofta en bra idé att backtest över en lång tidsram som omfattar flera olika typer av marknadsförhållanden. Ta hänsyn till universum där backtesting inträffade. Till exempel, om ett brett marknadssystem testas med ett universum bestående av tekniska lager, kan det misslyckas att fungera bra inom olika sektorer. Som en allmän regel, om en strategi riktar sig mot en viss genre av lager, begränsa universum till den genren, men i alla andra fall behålla ett stort universum för teständamål. Volatilitetsåtgärder är oerhört viktiga att överväga när man utvecklar ett handelssystem. Detta gäller särskilt för hyrda konton, som utsätts för marginalanrop om deras eget kapital sjunker under en viss punkt. Traders bör försöka hålla volatiliteten låg för att minska risken och möjliggöra enklare övergångar in och ut ur ett visst lager. Det genomsnittliga antalet barer som hålls är också mycket viktigt att titta på när man utvecklar ett handelssystem. Även om de flesta backtestingprogrammen innehåller provisionkostnader i de slutliga beräkningarna betyder det inte att du bör ignorera denna statistik. Om möjligt ökar ditt genomsnittliga antal barer som håller på att minska provisionskostnaderna och förbättra din totala avkastning. Exponering är ett dubbelkantigt svärd. Ökad exponering kan leda till högre vinst eller högre förluster, medan minskad exponering innebär lägre vinst eller lägre förluster. Men i allmänhet är det en bra idé att hålla exponeringen under 70 för att minska risken och möjliggöra enklare övergångar in och ut ur ett visst lager. Den genomsnittliga vinstlösningsstatistiken, kombinerad med vinst-till-förlustförhållandet, kan vara användbar för att bestämma optimal positionsstorlek och penninghantering med hjälp av tekniker som Kelly-kriteriet. (Se Money Management Använda Kelly-kriteriet.) Traders kan ta större positioner och minska provisionskostnaderna genom att öka sina genomsnittliga vinster och öka deras vinst-till-förlustförhållande. Årlig avkastning är viktig eftersom den används som ett verktyg för att benchmarka systemets avkastning mot andra investeringsplatser. Det är viktigt att inte bara titta på den totala årliga avkastningen utan också ta hänsyn till ökad eller minskad risk. Detta kan göras genom att titta på den riskjusterade avkastningen, som står för olika riskfaktorer. Innan ett handelssystem antas måste det överträffa alla andra placeringsplatser med lika eller mindre risk. Backtesting anpassning är oerhört viktigt. Många backtesting-applikationer har inmatning för provisionsbelopp, runda (eller fraktionerade) partstorlekar, fältstorlekar, marginalkrav, räntor, antaganden för släppning, positioneringsstorlekar, same-bar exit-regler, (bakåt) stoppinställningar och mycket mer. För att få de mest exakta backtestingresultaten är det viktigt att ställa in dessa inställningar för att efterlikna mäklaren som kommer att användas när systemet går live. Backtesting kan ibland leda till något som kallas överoptimering. Det här är ett villkor där prestanda resultat är så högt anpassat till det förflutna att de inte längre är lika exakta i framtiden. Det är generellt en bra idé att genomföra regler som gäller för alla lager eller en vald uppsättning riktade lager och är inte optimerade i den utsträckning reglerna inte längre är förståeliga av skaparen. Backtesting är inte alltid det mest exakta sättet att mäta effektiviteten hos ett visst handelssystem. Ibland misslyckas strategier som har fungerat bra tidigare i dag. Tidigare resultat är inte en indikation på framtida resultat. Var noga med att handla ett system som har testats framgångsrikt innan du går live för att vara säker på att strategin fortfarande gäller i praktiken. Slutsats Backtesting är en av de viktigaste aspekterna av att utveckla ett handelssystem. Om de skapas och tolkas ordentligt kan det hjälpa handlare att optimera och förbättra sina strategier, hitta några tekniska eller teoretiska brister, samt få förtroende för sin strategi innan de appliceras på den verkliga världsmarknaden. Resources Tradecision (medbeslutande) - High-end Trading System Development AmiBroker (amibroker) - Budget Trading System Development. En ekonomisk teori om totala utgifter i ekonomin och dess effekter på produktion och inflation. Keynesian ekonomi utvecklades. En innehav av en tillgång i en portfölj. En portföljinvestering görs med förväntan på att få en avkastning på den. Detta. Ett förhållande som utvecklats av Jack Treynor som mäter avkastning som förvärvats över det som kunde ha blivit förtjänat på en risklös. Återköp av utestående aktier (återköp) av ett företag för att minska antalet aktier på marknaden. Företag. En skatteåterbäring är en återbetalning av skatter som betalas till en individ eller hushåll när den faktiska skatteskulden är mindre än beloppet. Det monetära värdet av alla färdiga varor och tjänster som produceras inom ett land039s gränsar under en viss tidsperiod. Bakprovning av dina handelsideer En av de mest användbara sakerna du kan göra i analysfönstret är att backtesta din handelsstrategi på historisk data. Detta kan ge dig värdefull inblick i styrkor och svaga punkter i ditt system innan du investerar riktiga pengar. Denna enda AmiBroker-funktionen kan spara mycket pengar för dig. Skriva dina handelsregler Först måste du ha objektiva (eller mekaniska) regler för att komma in och ut ur marknaden. Detta steg är basen för din strategi och du måste tänka på det själv eftersom systemet måste matcha din risk tolerans, portföljstorlek, pengarhanteringsteknik och många andra individuella faktorer. När du har egna regler för handel bör du skriva dem som köp och sälj regler i AmiBroker Formula Lanugage (plus kort och omslag om du vill testa även kort handel). I detta kapitel kommer vi att överväga ett mycket grundläggande glidande medelvärdeöverföringssystem. Systemet skulle köpa stockscontracts när nära pris stiger över 45-dagars exponentiell glidande medelvärde och kommer att sälja stockscontracts när nära pris faller under 45-dagars exponentiell glidande medelvärde. Det exponentiella glidande medlet kan beräknas i AFL med hjälp av den inbyggda funktionen EMA. Allt du behöver göra är att ange inmatnings array och medelvärde, så det 45-dagars exponentiella glidande genomsnittet av slutkurserna kan erhållas med följande uttalande: Den nära identifieraren hänvisar till inbyggd array hållande slutkurs för nu analyserad symbol . För att testa om det närmsta priset passerar över exponentiell glidande medelvärde, använder vi inbyggd korsfunktion: köp kors (nära, ema (nära 45)) Ovanstående uttalande definierar en köphandelregel. Det ger quot1quot eller quottruequot när nära pris korsar över ema (nära, 45). Då kan vi skriva försäljningsregeln som skulle ge quot1quot när motsatt situation händer - nära priskryssningar under ema (nära 45): sälja kors (ema (nära, 45), stäng) Observera att vi använder samma korsfunktion men den motsatta ordningen av argument. Så komplett formel för långa affärer ser så här ut: köp kors (nära, ema (nära 45)) sälj kors (ema (nära 45), stäng) OBS! För att skapa ny formel, vänligen öppna Formelredigeraren med hjälp av Analysis-gtFormula Editor meny, skriv formeln och välj Verktyg-gtSänd till Analys-menyn i Formel-redigeraren För att back-test ditt system klickar du bara på knappen Tillbaka test i fönstret Automatiskt analys. Se till att du har skrivit in den formel som innehåller minst köpa och sälja handelsregler (som visas ovan). När formeln är korrekt börjar AmiBroker analysera dina symboler enligt dina handelsregler och genererar en lista över simulerade affärer. Hela processen är väldigt snabb - du kan tillbaka testa tusentals symboler inom några minuter. Progressfönstret visar uppskattad slutförd tid. Om du vill stoppa processen kan du bara klicka på Avbryt-knappen i fönstret. När processen är klar visas listan över simulerade affärer i den nedre delen av det automatiska analysfönstret. (resultatpanelen). Du kan undersöka när köp och sälj signaler inträffade genom att dubbelklicka på handeln i resultatfönstret. Detta ger dig raka eller ofiltrerade signaler för varje stapel när köp och säljvillkor är uppfyllda. Om du bara vill se enstaka piltangenter (öppnande och stängning av aktuell handel) bör du dubbelklicka på raden medan du håller ned SHIFT-tangenten nedtryckt. Alternativt kan du välja typ av bildskärm genom att välja lämpligt objekt från den snabbmeny som visas när du klickar på resultatrutan med höger musknapp. Förutom resultatlistan kan du få mycket detaljerad statistik över systemets prestanda genom att klicka på knappen Rapport. För mer information om rapportstatistik, kolla in beskrivningsfönsterbeskrivningen. Ändra dina inställningar för bakåtprövning Backtestmotorn i AmiBroker använder vissa fördefinierade värden för att utföra uppgiften, inklusive portföljstorlek, periodicitet (dagligen varje vecka), provisionsbelopp, ränta, maximala förlust - och vinstmålstopp, typ av affärer, prisfält och så på. Alla dessa inställningar kan ändras av användaren med hjälp av inställningsfönstret. Efter att ha ändrat inställningarna, kom ihåg att köra din backtest igen om du vill att resultaten ska synkroniseras med inställningarna. Till exempel, för att backa test på veckobar istället för dagligen klickar du bara på Inställningar-knappen välj Weekly from Periodicity combo box och klicka på OK. Kör sedan din analys genom att klicka på Back test. Reserverade variabla namn I följande tabell visas namnen på reserverade variabler som används av Automatic Analyzer. Betydelsen och exemplen på att använda dem ges senare i detta kapitel. Tillåter kontrollen dollar belopp eller andel av portfölj som investeras i handeln (se förklaringar nedan) Automatisk analys (ny i 3,9) Hittills diskuterade vi ganska enkelt användning av backtestaren. AmiBroker stöder dock mycket mer sofistikerade metoder och begrepp som kommer att diskuteras senare i detta kapitel. Observera att nybörjaren först bör spela lite med de enklare ämnen som beskrivs ovan innan du fortsätter. Så, när du är redo, ta en titt på följande nyligen introducerade funktioner hos back-testeren: a) AFL-script värd för avancerade formelskribenter b) förbättrat stöd för korta affärer c) sättet att styra orderexekveringspriset från script d) olika typer av stopp i back tester e) positionering f) runda parti storlek och tick storlek g) marginal konto h) backtesting futures AFL scripting värd är ett avancerat ämne som är täckt i ett separat dokument tillgängligt här och jag vill inte diskutera det i det här dokumentet. Återstående funktioner är mycket lättare att förstå. I de tidigare versionerna av AmiBroker kunde du bara simulera stop-and-reverse-strategin om du vill back-test-systemet med både långa och korta affärer. När lång position stängdes öppnades en ny kort position omedelbart. Det berodde på att köp och sälja reserverade variabler användes för båda typerna av handel. Nu (med version 3.59 eller högre) finns det separata reserverade variabler för att öppna och stänga långa och korta affärer: buy - quottruequot eller 1 värde öppnas lång handelsförsäljning - quottruequot eller 1 värde stänger lång handel kort - quottruequot eller 1 värde öppnar kort handel - quottruequot eller 1 värde stänger kort handel Som för att back-test korta affärer måste du tilldela korta och täckande variabler. Om du använder stop-and-reverse-system (alltid på marknaden), tilldela du bara sälja till kort och köpa för att täcka kortförsäljningsinköp. Detta simulerar hur pre-3.59-versioner fungerade. Men nu gör AmiBroker dig möjlighet att ha separata handelsregler för att gå länge och för att gå kort som visat i det här enkla exemplet: långa affärer inmatnings - och utträdesregler: köp kors (cci (), 100) sälj kors (100, cci) handlar inmatnings - och utträdesregler: kort kors (-100, cci ()) täckkors (cci (), -100) Observera att i det här exemplet om CCI är mellan -100 och 100 är du borta från marknaden. Kontroller handelspriset AmiBroker erbjuder nu 4 nya reserverade variabler för att specificera det pris som köp, sälja, kort och orderingång utförs. Dessa arrays har följande namn: buyprice, sellprice, shortprice och coverprice. Huvudanvändningen av dessa variabler är att reglera handelspriset: BuyPrice IIF (dayofweek () 1, HIGH, CLOSE) på måndags köp på högt, annars köp på nära sätt Så du kan skriva följande för att simulera verkliga stopporder: BuyStop. Formeln för köpstoppnivå SellStop. Formeln för försäljningsstoppsnivå om köpoptionen (helst vid köpstopp eller lågt som det är högre), när som helst under dagskurserna, ökar över buystop-nivå (highgtbuystop), köper Cross (High, BuyStop) om som helst under dagens priser faller under försäljningsprisnivå Försäljningspriset (Säljpris, Säljstopp) Köppris max (Köpstopp, Låg) Se till att köppriset inte är lägre än Low SellPrice min (SellStop, High) se till att Försäljningspriset är inte högre än Högt Observera att AmiBroker förinställer köppris, försäljningspris, kortpris och täckprissatsvariabler med de värden som definieras i fönstret för systemtestinställningar (visas nedan), så du kan men behöver inte definiera dem i din formel. Om du inte definierar dem fungerar AmiBroker som i de gamla versionerna. Under back-testing kommer AmiBroker att kontrollera om de värden du tilldelade till köpcentret, försäljningspriset, kortpriset, täckpriset passar in i ett högt lågt utbud av given stapel. Om inte, kommer AmiBroker att justera det till högt pris (om prismatrisvärdet är högre än högt) eller till det låga priset (om prismatrisvärdet är lägre än lågt) Resultatmål stannar Som du kan se i bilden ovan, nya inställningar för vinstmålstopp är tillgängliga i fönstret för systemtestinställningar. Resultatmålstopp görs när högpriset för en given dag överstiger stoppnivån som kan ges som procentuell eller punktvis ökning från köpeskillingen. Som standard görs stoppen till det pris du definierar som försäljningsprismatris (för långa transaktioner) eller täckningsprismatris (för korta transaktioner). Detta beteende kan ändras genom att använda quotExit vid stopquot-funktionen. quotExit vid stopquot-funktionen Om du markerar quotExit vid stopquot-rutan i inställningarna stoppas exekveringen vid exakt stoppnivå, dvs om du definierar resultatmål stopp vid 10 ditt stopp och köpeskillingen var 50 stopporder kommer att utföras vid 55 även om Din försäljningsprismatris innehåller olika värde (till exempel stängningskurs på 56). Maximal förlust slutar fungera på ett liknande sätt - de utförs när det låga priset för en given dag sjunker under stoppnivån som kan ges som en procentandel eller punktökning från köpeskillingen. Denna typ av stopp används för att skydda vinsten som den spårar din handel så varje gång ett positionsvärde når en ny hög är bakstoppet placerat på en högre nivå. När vinsten sjunker under den bakre stoppnivån stängs positionen. Denna mekanism illustreras i bilden nedan (10 efterföljande stopp visas): Ett prov på låg nivå implementering av Profit-mål stopp i AFL: Köp Cross (MACD (), Signal ()) för (i 0 I lt BarCount i) if (priceatbuy 0 Köp i) priceatbuy BuyPrice i if (priceatbuy gt 0 Säljpriset 1.1 priceatbuy) Sälj i 1 SäljPris i 1.1 priceatbuy priceatbuy 0 annars Sälj i 0 Detta är en ny funktion i version 3.9. Positionsstorlek i backtester implementeras med hjälp av ny reserverad variabel PositionSize ltsize arraygt Nu kan du styra dollarbelopp eller procentandel av portfölj som investeras i handelspositivt antal definiera (dollar) belopp som investeras i handeln till exempel: PositionSize 1000 investera 1000 i varje handel negativt tal -100 ..- 1 definiera procentandel: -100 ger 100 av nuvarande portföljstorlek, -33 ger 33 av tillgängligt eget kapital till exempel: PositionSize -50 investerar alltid bara hälften av det aktuella kapitalet dynamiskt limeringsexempel: PositionSize - 100 RSI () eftersom RSI varierar från 0..100 det här kommer att resultera i position beroende på RSI-värden - gt låga värden på RSI kommer att resultera i högre andel investerad Om mindre än 100 av tillgängliga pengar investeras så tjänar det återstående beloppet räntan som definieras i inställningarna. Det finns också en ny kryssruta i AA-inställningsfönstret: quotAllow position size shrinkingquot - detta styr hur backtester hanterar situationen när den begärda positionsstorleken (via PositionSize-variabel) överstiger tillgängliga pengar: när denna flagg är markerad placeras positionen med storlek shinkad till tillgänglig kontant om den är avmarkerad är inte positionen inmatad. För att se aktuella positionsstorlekar använd ett nytt rapportläge i AA-inställningsfönstret: quotTrade lista med priser och pos. sizequot För slutet, här är ett exempel på Tharps ATR-baserad positionsstorleksteknik kodad i AFL: Köp ltyour buy formula heregt Sälj 0 säljer bara genom stopp TrailStopAmount 2 ATR (20) Capital 100000 VIKTIGT: Ställ det också i Inställningarna: Initial Equity Risk 0,01Capital PositionSize (RiskTrailStopAmount) BuyPrice ApplyStop (2, TrailStopAmount, 1) Tekniken kan sammanfattas enligt följande: Det totala kapitalet per symbol är 100 000. Vi fastställde risknivån till 1 av totalt eget kapital. Risknivån definieras enligt följande: Om ett eftersläpande stopp på ett 50 lager är till exempel 45 (värdet av två ATR mot positionen) är 5 förlusterna uppdelad i 1000-risken för att ge 200 aktier att köpa. Så är förlustrisken 1000 men fördelningsrisken är 200 aktier x 50share eller 10 000. Så vi tilldelar 10 av kapitalet till inköpet men riskerar bara 1000. (Redigerat utdrag från AmiBroker-postlistan) Rund lotstorlek och kryssstorlek Olika instrument handlas med olika quottrading unitsquot eller quotblocksquot. Till exempel kan du köpa bråkdel av andelar i fond, men du kan inte köpa bruttoantal aktier. Ibland måste du köpa i 10s eller 100s mycket. AmiBroker låter dig nu ange blockstorlek på global och per-symbolnivå. Du kan definiera rundstorlek per symbol på sidan Symbol-gtInformation (bild 3). Värdet på noll betyder att symbolen inte har någon speciell rundstorlek och kommer att använda quotDefault round lot sizequot (global inställning) från sidan Automatiska inställningar (bild 1). Om standardstorleken är inställd till noll betyder det att fraktionerat antal aktierkontrakt är tillåtna. Du kan också styra rundstorlek direkt från din AFL-formel med hjälp av RoundLotSize-reserverad variabel, till exempel: Den här inställningen styr lägsta prisrörelsen för den angivna symbolen. Du kan definiera den på global och per-symbolnivå. Precis som med rundstorlek kan du definiera fältstorlek per symbol på sidan Symbol-gtInformation (bild 3). Värdet på noll instruerar AmiBroker att använda quotdefault tick sizequot definierad på inställningssidan (bild 1) i Automatic Analysis-fönstret. Om standardflikstorlek också sätts till noll betyder det att det inte finns någon minimiprisrörelse. Du kan också ställa in och hämta kryssstorleken även från AFL-formel med hjälp av TickSize reserverad variabel, till exempel: Observera att inställningen för kryssstorlek påverkar ENDAST trades som lämnas av inbyggda stopp och ordet ApplyStop (). Backtestern förutsätter att prisuppgifter följer fältstorlekskrav och det ändrar inte prisuppsättningar som tillhandahålls av användaren. Så att ange fältstorlek är endast meningsfullt om du använder inbyggda stopp så att utgångspunkter genereras till quotallowedquot prisnivåer istället för beräknade. Till exempel i Japan - du kan inte ha fraktionerad delar av yen så att du bör definiera global ticksize till 1, så inbyggd slutar avsluta handel på heltal. Konto marginal inställning definierar procentuell marginal krav för hela kontot. Standardvärdet för Kontantmarginal är 100. Det innebär att du måste tillhandahålla 100 pengar för att komma in i handeln, och det här är hur backtester fungerade i tidigare versioner. Men nu kan du simulera ett marginalkonto. När du köper på marginal lånar du helt enkelt pengar från din mäklare för att köpa aktier. Med gällande regler kan du lägga upp 50 av inköpspriset på det lager du vill köpa och låna den andra hälften från din mäklare. För att simulera detta anger du bara 50 i fältet Kontantmarginal (se bild 1). Om ditt initiala eget kapital är satt till 10000 kommer din köpkraft att vara 20000 och du kommer att kunna gå in i större positioner. Observera att dessa inställningar anger marginen för hela kontot och det är INTE relaterat till futureshandel alls. Med andra ord kan du handla aktier på marginalkonto. quotReverse inmatningssignalen tvingar exitquot-kryssrutan till Backtester-inställningarna. När den är PÅ (standardinställningen) - fungerar backtester som i tidigare versioner och stänger redan öppen positon om ny inmatningssignal i omvänd riktning stöter på. Om denna strömbrytare är AV - även om omvänd signal inträffar håller backtestern nuvarande öppen handel och stänger inte positon tills den vanliga utgången (sälja eller täcka) genereras. Med andra ord när denna brytare är OFF backtester ignorerar korta signaler under långa affärer och ignorerar köpsignaler under korta affärer. quotAllow same bar exit (single bar trade) citationstext till inställningarna När den är PÅ (standardinställningarna) - inmatning och utträde i samma bar är tillåten (som i tidigare versioner) om den är AV - utgången kan hända från och med nästa stapel (det gäller för vanliga signaler, det finns en separat inställning för ApplyStop-genererade utgångar). Om du växlar till OFF kan du reproducera uppförandet av MS-backtester som inte kan hantera samma dagutgångar. quotActivate stannar immediatelyquotThis setting löser problemet med testsystem som går in i handeln på marknaden öppen. I versioner före 4,09 backtester antog du att du kom in i affärer på marknaden nära så inbyggda stopp var aktiverade från nästa dag. Problemet var när du faktiskt definierade öppet pris som handelsinträdespriset - då samma prisutveckling inte utlöst stopparna samma dag. Det fanns några publicerade lösningar baserade på AFL-kod men nu behöver du inte använda dem. Om du bara handlar öppet bör du markera quotActivate stops immediatelyquot (bild 1). Du kanske frågar varför du inte bara kontrollerar buyprice eller shortprice array om den är lika med öppet pris. Olyckligtvis kommer det inte att fungera. Varför helt enkelt för att det finns doji dagar när öppet pris är lika nära och då kommer backtester aldrig veta om handeln ingicks på marknaden öppen eller nära. Så vi behöver verkligen en separat inställning. QUOTE QuickAFLquotQuickAFL (tm) är en funktion som möjliggör snabbare AFL-beräkning under vissa förutsättningar. Ursprungligen (sedan 2003) var den endast tillgänglig för indikatorer, från version 5.14 är den också tillgänglig i automatisk analys. Ursprungligen var tanken att tillåta snabbare diagramrapporteringar genom att endast beräkna AFL-formel för den delen som syns på diagrammet. På samma sätt kan det automatiska analysfönstret använda delmängden av tillgängliga citat för att beräkna AFL, om vald parameter 8220range8221 är mindre än 8220All citationsquot. Detaljerade förklaringar om hur QuickAFL fungerar och hur man kontrollerar det finns i denna Knowledge Base-artikel: amibrokerkb20080703quickafl Observera att det här alternativet inte bara fungerar i backtester utan även i optimeringar, utforskningar och skanningar. AmiBroker Code AmiBroker Code Catalog CodeTraders är nöjd att presentera ny kod för AmiBroker-plattformen, inklusive flera tidsramsstöd. Optimering Iteration Reload Optimering Iteration Reload for Amibroker - Slutligen, ett snabbt och enkelt sätt att ladda om eventuell iteration av någon AmiBroker optimering för backtesting andor chart visualisering. Se vad du behöver se snabbt och återkräva din tid Utmärkt, billiga startpunkter för analys och vidareutveckling: RSI Strategy Suite för Amibroker - RSI Strategy Suite för Amibroker erbjuder en primär RSI-baserad AFL-formel tillsammans med tillbehörsformler , som tillsammans genomför en samling analys, visualisering, presentation och optimeringsteknik för att skapa en komplett lösning för 4-linjers indikatorhandelstransaktion. RSI Strategy Suite är både ett arbetsredskap och en handledning i användningen av AFL som kan tjäna som utgångspunkt för andra projekt. CCI-strategisuccén för Amibroker - CCI-strategisuiten för Amibroker erbjuder en primär CCI-baserad AFL-formel tillsammans med tillbehörsformler som tillsammans genomför en samling analys, visualisering, presentation och optimeringsteknik för att skapa en komplett lösning för 4-linjers indikatorhandel forskning. CCI-strategisuiten är både ett arbetsredskap och en handledning i användningen av AFL som kan tjäna som utgångspunkt för andra projekt. LRS Strategy Suite för Amibroker - LRS Strategy Suite för Amibroker erbjuder en primär LRS-baserad AFL-formel tillsammans med tillbehörsformler som tillsammans genomför en samling analys, visualisering, presentation och optimeringsteknik för att skapa en komplett lösning för 4-linjer indikatorhandel forskning. LRS Strategy Suite är både ett arbetsredskap och en handledning i användningen av AFL som kan tjäna som utgångspunkt för andra projekt. Vilken som helst av ovanstående strategisviter kan användas som en utgångspunkt för att bygga en av de andra. Köp bara en till lägsta kostnad, eller köp mer än en för maximal bekvämlighet och förmåga att omedelbart se skillnaderna i ett filjämförelsesprogram. ZigZag Strategy Suite för Amibroker - ZigZag Strategy Suite för Amibroker erbjuder en primär ZigZag-baserad AFL-formel tillsammans med tillbehörsformler som tillsammans genomför en samling analys, visualisering, presentation och optimeringsteknik för att skapa en komplett lösning för retrospektiv analys av handel eller blekning av Zig-Zags. Momo Strategy Suite, Deluxe TimeFrame Version för Amibroker - Momo Strategy Suite, Deluxe TimeFrame Version för Amibroker erbjuder 3 varianter av sin primära momentbaserade AFL-formel tillsammans med tillbehörsformler som tillsammans genomför en samling analys, visualisering, presentation och optimeringstekniker för att skapa en komplett lösning för daglig eller intradagmomenthandel. Deluxe Timeframe Suites RSI, CCI och LRS Strategy Suites finns i både vanliga och Deluxe Timeframe-versioner. Kraftfull multi-time backtesting, optimering och visualisering är nu färdig. Varför kan du tunga dig själv (The Momo Strategy Suite är endast tillgänglig som en Deluxe TimeFrame-version.) Copyright 2003-2013 Steve Johns, alla rättigheter reserverade. Framgångsrikt backtesting av algoritmiska handelsstrategier - Del I Denna artikel fortsätter serien om kvantitativ handel , som började med Beginners Guide och Strategy Identification. Båda dessa längre, mer inblandade artiklar har varit mycket populära så jag fortsätter i denna ån och ger detaljer om ämnet strategi backtesting. Algoritmisk backtesting kräver kunskap om många områden, däribland psykologi, matematik, statistik, mjukvaruutveckling och marknadsexchange mikrostruktur. Jag kunde inte hoppas att täcka alla dessa ämnen i en artikel, så jag ska dela dem i två eller tre mindre bitar. Vad ska vi diskutera i det här avsnittet Jag börjar med att definiera backtesting och då kommer jag att beskriva grunderna för hur det utförs. Då kommer jag att klargöra de fördomar vi berörde i Beginners Guide to Quantitative Trading. Nästa kommer jag presentera en jämförelse av de olika tillgängliga backtestingprogrammen. I efterföljande artiklar kommer vi att titta på detaljerna i strategimodeller som ofta knappast nämns eller ignoreras. Vi kommer också att överväga hur man gör backtesting processen mer realistisk genom att inkludera idiosyncrasies av en handelsutbyte. Då kommer vi att diskutera transaktionskostnader och hur man korrekt modellerar dem i en backtest-inställning. Vi kommer att sluta med en diskussion om utförandet av våra backtests och slutligen ge ett exempel på en gemensam kvantstrategi, känd som en genomsyrande parhandel. Låt oss börja med att diskutera vad backtesting är och varför vi bör utföra det i vår algoritmiska handel. Vad är Backtesting Algoritmisk handel står förutom andra typer av investeringsklasser eftersom vi på ett mer tillförlitligt sätt kan ge förväntningar om framtida prestanda från tidigare resultat, till följd av riklig tillgång till data. Processen genom vilken detta utförs är känt som backtesting. I enkla termer görs backtesting genom att exponera din specifika strategialgoritm till en ström av historisk finansiell data, vilket leder till en uppsättning handelssignaler. Varje handel (som vi kommer att mena här för att vara en rundresa med två signaler) kommer att ha en associerad vinst eller förlust. Sammanställningen av denna vinstlösning under löptiden för din strategi backtest kommer att leda till den totala vinsten och förlusten (även känd som PL eller PnL). Det är kärnan i idén, även om djävulen självklart alltid är i detaljerna. Vilka är de viktigaste orsakerna till att backtesting en algoritmisk strategi Filtrering - Om du kommer ihåg från artikeln om strategiidentifiering. Vårt mål vid det inledande forskningsfasen var att upprätta en strategipipeline och sedan filtrera bort någon strategi som inte uppfyllde vissa kriterier. Backtesting ger oss en annan filtreringsmekanism, eftersom vi kan eliminera strategier som inte uppfyller våra prestationsbehov. Modellering - Backtesting gör det möjligt för oss att (säkert) testa nya modeller av vissa marknadsfenomen, till exempel transaktionskostnader, orderdirigering, latens, likviditet eller andra marknadsmiljöstrukturproblem. Optimering - Även om strategin optimering är fylld med biaser tillåter backtesting oss att öka prestanda för en strategi genom att ändra kvantiteten eller värdena för parametrarna som är associerade med den strategin och omberäkna dess prestanda. Verifiering - Våra strategier är ofta anskaffade externt, via vår strategipipeline. Backtesting en strategi säkerställer att den inte har implementerats felaktigt. Även om vi sällan kommer att få tillgång till signalerna som genereras av externa strategier, har vi ofta tillgång till prestandametri som Sharpe Ratio och Drawdown egenskaper. Således kan vi jämföra dem med vår egen implementering. Backtesting ger en mängd fördelar för algoritmisk handel. Det är emellertid inte alltid möjligt att helt enkelt backtesta en strategi. I allmänhet, som frekvensen av strategin ökar, blir det svårare att korrekt modellera marknadens och börsens mikrostruktureffekter. Detta leder till mindre tillförlitliga backtests och därigenom en svårare utvärdering av en utvald strategi. Detta är ett speciellt problem där exekveringssystemet är nyckeln till strategins prestanda, som med ultrahögfrekvensalgoritmer. Tyvärr är backtesting full av fördomar av alla slag. Vi har berört några av dessa frågor i tidigare artiklar, men vi kommer nu att diskutera dem på djupet. Fördomar som påverkar strategiska backtests Det finns många fördomar som kan påverka prestandan i en backtestad strategi. Tyvärr har dessa förspänningar en tendens att blåsa upp prestanda snarare än att förringa det. Således bör du alltid överväga en backtest att vara en idealiserad övre gräns för strategins faktiska prestanda. Det är nästan omöjligt att eliminera biaser från algoritmisk handel, så det är vårt jobb att minimera dem så mycket vi kan för att fatta välgrundade beslut om våra algoritmiska strategier. Det finns fyra stora fördomar som jag önskar diskutera: Optimering Bias. Titta framåt. Survivorship Bias och psykologiska tolerans Bias. Optimering Bias Detta är förmodligen den mest skrämmande av alla backtest-förskott. Det innebär att justera eller introducera ytterligare handelsparametrar tills strategins prestanda på backtestdatasatsen är väldigt attraktiv. Men när strategin går, kan strategin vara märkbart annorlunda. Ett annat namn för denna förspänning är kurvmontering eller data-snooping bias. Optimeringsförskjutning är svår att eliminera eftersom algoritmiska strategier ofta involverar många parametrar. Parametrar i det här fallet kan vara inmatningsexekveringskriterier, återkallningsperioder, medelvärden (dvs. den glidande parametern för glidande medel) eller volatilitetsmätningsfrekvensen. Optimeringsperspektivet kan minimeras genom att hålla antalet parametrar till ett minimum och öka antalet datapunkter i träningssatsen. Faktum är att man också måste vara försiktig med den senare eftersom äldre träningspunkter kan bli föremål för en tidigare regim (som en lagstiftningsmiljö) och kan därför inte vara relevant för din nuvarande strategi. En metod för att mildra denna bias är att utföra en känslighetsanalys. Detta innebär att parametrarna varieras stegvis och plottar en yta av prestanda. Ljud, grundläggande resonemang för parametervalg bör med alla andra faktorer betraktas leda till en jämnare parametraryta. Om du har en mycket hoppig yt yta betyder det ofta att en parameter inte speglar ett fenomen och är en artefakt av testdata. Det finns en stor litteratur om flerdimensionella optimeringsalgoritmer och det är ett mycket aktivt forskningsområde. Jag kommer inte att stanna här, men behåll det bakom dig när du hittar en strategi med en fantastisk backtest. Look-Ahead Bias Look-ahead-bias introduceras i ett backtesting-system när framtida data av misstag ingår i en punkt i simulering där data inte skulle ha varit tillgängliga. Om vi ​​kör backtesten kronologiskt och vi når tidpunkt N, så kommer framåtblickande bias uppträda om data ingår för vilken punkt Nk, där k0. Look-ahead biasfel kan vara otroligt subtila. Här är tre exempel på hur framtidsförspänning kan introduceras: Tekniska buggar - Arrayvektorer i kod har ofta iteratorer eller indexvariabler. Felaktiga överskott av dessa index kan leda till en förutseende förspänning genom att inkorporera data vid Nk för icke-noll k. Parameterberäkning - Ett annat vanligt exempel på framåtriktad förspänning inträffar vid beräkning av optimala strategiparametrar, t. ex. med linjära regressioner mellan två tidsserier. Om hela datasatsen (inklusive framtida data) används för att beräkna regressionskoefficienterna och sålunda retroaktivt appliceras på en handelsstrategi för optimeringsändamål, införlivas framtida data och en framåtblickande bias finns. MaximaMinima - Vissa handelsstrategier använder sig av extrema värden under en viss tidsperiod, till exempel inkorporering av höga eller låga priser i OHLC-data. Eftersom de maximala minimala värdena endast kan beräknas i slutet av en tidsperiod införs emellertid en blick för framåtblick om dessa värden används under den aktuella perioden. Det är alltid nödvändigt att lagra highlow-värden med minst en period i någon handelsstrategi som använder dem. Precis som med optimeringsförspänning måste man vara ytterst försiktig för att undvika införandet. Det är ofta den främsta anledningen till att handelsstrategier underpresterar deras backtest signifikant i live trading. Survivorship Bias Survivorship bias är ett särskilt farligt fenomen och kan leda till betydligt uppblåst prestanda för vissa strategityper. Det inträffar när strategier testas på dataset som inte inkluderar hela universum av tidigare tillgångar som kan ha blivit utvalda vid en viss tidpunkt, men bara överväga de som har överlevt till den aktuella tiden. Tänk på att testa en strategi för ett slumpmässigt urval av aktier före och efter marknadskraschen 2001. Vissa tekniklager gick i konkurs, medan andra lyckades hålla sig flytande och till och med blomstrade. Om vi ​​hade begränsat den här strategin endast till lager som gjorde det genom marknadsutnyttjandeperioden skulle vi introducera en överlevnadsperspektiv eftersom de redan har visat deras framgång för oss. Faktum är att detta bara är ett annat specifikt fall med förutseende bias, eftersom framtida uppgifter införlivas i tidigare analyser. There are two main ways to mitigate survivorship bias in your strategy backtests: Survivorship Bias Free Datasets - In the case of equity data it is possible to purchase datasets that include delisted entities, although they are not cheap and only tend to be utilised by institutional firms. In particular, Yahoo Finance data is NOT survivorship bias free, and this is commonly used by many retail algo traders. One can also trade on asset classes that are not prone to survivorship bias, such as certain commodities (and their future derivatives). Use More Recent Data - In the case of equities, utilising a more recent data set mitigates the possibility that the stock selection chosen is weighted to survivors, simply as there is less likelihood of overall stock delisting in shorter time periods. One can also start building a personal survivorship-bias free dataset by collecting data from current point onward. After 3-4 years, you will have a solid survivorship-bias free set of equities data with which to backtest further strategies. We will now consider certain psychological phenomena that can influence your trading performance. Psychological Tolerance Bias This particular phenomena is not often discussed in the context of quantitative trading. However, it is discussed extensively in regard to more discretionary trading methods. It has various names, but Ive decided to call it psychological tolerance bias because it captures the essence of the problem. When creating backtests over a period of 5 years or more, it is easy to look at an upwardly trending equity curve, calculate the compounded annual return, Sharpe ratio and even drawdown characteristics and be satisfied with the results. As an example, the strategy might possess a maximum relative drawdown of 25 and a maximum drawdown duration of 4 months. This would not be atypical for a momentum strategy. It is straightforward to convince oneself that it is easy to tolerate such periods of losses because the overall picture is rosy. However, in practice, it is far harder If historical drawdowns of 25 or more occur in the backtests, then in all likelihood you will see periods of similar drawdown in live trading. These periods of drawdown are psychologically difficult to endure. I have observed first hand what an extended drawdown can be like, in an institutional setting, and it is not pleasant - even if the backtests suggest such periods will occur. The reason I have termed it a bias is that often a strategy which would otherwise be successful is stopped from trading during times of extended drawdown and thus will lead to significant underperformance compared to a backtest. Thus, even though the strategy is algorithmic in nature, psychological factors can still have a heavy influence on profitability. The takeaway is to ensure that if you see drawdowns of a certain percentage and duration in the backtests, then you should expect them to occur in live trading environments, and will need to persevere in order to reach profitability once more. Software Packages for Backtesting The software landscape for strategy backtesting is vast. Solutions range from fully-integrated institutional grade sophisticated software through to programming languages such as C, Python and R where nearly everything must be written from scratch (or suitable plugins obtained). As quant traders we are interested in the balance of being able to own our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill - The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your tech stack. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction - Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If youre tied into a particular broker (and Tradestation forces you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation - An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity - Certain software just isnt cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation - Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you dont introduce bugs which can lead to biases. Speed of Development - One shouldnt have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the elephant in the room here Speed of Execution - If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost - Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Backtesting Software Comparison Description: High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution: Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same tech stack. Customisation: Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation: Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed: Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed: Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost: FreeOpen Source Description: Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution: Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation: CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity: C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation: Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed: C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed: CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost: Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the all in one nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can drop in to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be left alone to trade In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. Just Getting Started with Quantitative Trading

No comments:

Post a Comment