Saturday, 21 October 2017

Backtest resultat handelssystem


Backtesting Vad är Backtesting Backtesting är processen att testa en handelsstrategi för relevant historisk data för att säkerställa dess lönsamhet innan näringsidkaren riskerar något aktuellt kapital. En näringsidkare kan simulera handel med en strategi över en lämplig tidsperiod och analysera resultaten för lönsamhetsnivåerna och riskerna. AVBRYDNING Backtesting Om resultaten uppfyller de nödvändiga kriterier som är acceptabla för näringsidkaren kan strategin sedan implementeras med viss grad av förtroende för att det kommer att leda till vinst. Om resultaten är mindre gynnsamma kan strategin modifieras, justeras och optimeras för att uppnå de önskade resultaten eller det kan helt skrotas. En betydande del av volymen handlas på dagens finansmarknad görs av handlare som använder någon form av datorautomatisering. Detta gäller särskilt för handelsstrategier baserade på teknisk analys. Backtesting är en integrerad del av att utveckla ett automatiserat handelssystem. Betydande Backtesting När det görs korrekt kan backtesting vara ett ovärderligt verktyg för att fatta beslut om huruvida man ska använda en handelsstrategi. Provperioden som en backtest utförs på är kritisk. Varaktigheten av provperioden bör vara tillräckligt lång för att omfatta perioder med olika marknadsförhållanden, inklusive uppåtgående tendenser, nedåtgående trend och omfattande handel. Att utföra ett test på endast en typ av marknadsförhållanden kan ge unika resultat som kanske inte fungerar bra under andra marknadsförhållanden, vilket kan leda till falska slutsatser. Provstorleken i antalet branscher i testresultaten är också avgörande. Om provet antal branscher är för litet kan testet inte vara statistiskt signifikant. Ett prov med för många branscher under en längre period kan ge optimerade resultat där ett överväldigande antal vinnande affärer samlar sig kring ett specifikt marknadsförhållande eller trend som är gynnsam för strategin. Detta kan också leda till att en näringsidkare drar vilseledande slutsatser. Att hålla det riktigt En backtest bör spegla verkligheten så mycket som möjligt. Handelskostnader som annars kan anses vara försumbara av handlare när de analyseras individuellt kan ha en betydande inverkan när den sammanlagda kostnaden beräknas under hela backtestingperioden. Dessa kostnader inkluderar provisioner, spridningar och släpp, och de kunde bestämma skillnaden mellan huruvida en handelsstrategi är lönsam eller inte. De flesta backtesting programvarupaket innehåller metoder för att redovisa dessa kostnader. Kanske är den viktigaste metriska förknippade med backtesting strategins nivå av robusthet. Detta uppnås genom att jämföra resultaten av ett optimerat bakprov i en specifik provperiod (kallad in-sample) med resultaten av en backtest med samma strategi och inställningar i en annan provperiod (kallad out - of-prov). Om resultaten är lika lönsamma kan strategin anses vara giltig och robust och den är redo att genomföras i realtidsmarknader. Om strategin misslyckas i jämförelser utan jämförelser behöver strategin ytterligare utveckling, eller det bör helt överges. Back-testa dina handelsideer En av de mest användbara sakerna som du kan göra i analysfönstret är att back - testa din handelsstrategi på historiska 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 regel för köphandel. 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 priskors 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 korta som visas i det här enkla exemplet: långa transaktioner inmatnings - och utträdesregler: köp kors (cci (), 100) sälj kors (100, cci) handlar inmatnings - och utträdesregler: kort kors (-100, cci ()) kors (cci (), -100) Observera att i det här exemplet om CCI är mellan -100 och 100 är du ute av 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 av det som ä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 kontanter: när denna flagg är markerad placeras positionen med storlek shinked 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 prisdata 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 att 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 den här Knowledge Base-artikeln: amibrokerkb20080703quickafl Observera att det här alternativet inte bara fungerar i backtestern utan också i optimeringar, utforskningar och scans. Excel Benchmark I stället för det äldre riktmärket i post nedan, Här är länken till det nya och kraftigt förbättrade Excel Benchmark (läggs till 2011). Nedan är den gamla Benchmark-versionen. uppdaterad 2 juli 2010, lagt till Test of Excel 2010. Prestanda varierar kraftigt mellan olika operativsystem och Excel-versioner. Benchmark. xls mäter denna skillnad i prestanda och kan hjälpa Excel-användare att bestämma huruvida deras system ska uppgraderas eller inte, för att få bästa prestanda. Benchmark. xls tester snabba grafiska uppdateringar med simulerade Live data. De undersökta resurserna är typiska för vad ett Stock, Futures eller Forex-automatiserat handelsprogram skulle kräva. Benchmark. xls replikerar SampP 500 ES (Emini) futures tick data. På referensarket finns två backtestknappar: Fast Backtest stänger av skärmens uppdatering under backtest och Backtest lämnar den på så att du kan se diagramuppdateringen och handläggningen ritad under backtest. Som anges nedan Windows XPExcel 2003 tog bara 4 sekunder att köra snabb backtest medan VistaOffice 2007 tog 22 sekunder i mitt eget test som anges nedan. Med Windows 7-systemet som visas nedan fullbordade Excel 2003 Full Backtest på bara 5 minuter 41 sekunder. Excel 2007 tog 40 minuter och 26 sekunder och Excel 2010 visade viss förbättring under 2007 och tog 34 minuter och 51 sekunder. (Andra tester visas också nedan med varje system och it8217s referensresultat visas tillsammans.) För att testa din systemhastighet: 1. Hämta och öppna Benchmark. xls 2. Kör Backtest och notera din tid 3. Kör snabb backtest och notera din tid gratis att skicka dina resultat i kommentarfältet inklusive systeminformation och Excel-version. OS-namn Microsoft Windows 7 Home Premium Version 6.1.7600 Bygg 7600 Annan OS Beskrivning Ej tillgänglig OS Tillverkare Microsoft Corporation System Tillverkare TOSHIBA System Modell Satellit L555D Systemtyp x64-baserad PC Processor AMD Turion (tm) II Dual Core Mobile M520, 2300 MHz , 2 Core (s), 2 Logisk Processor (s) BIOS VersionDate TOSHIBA V1.20, 11262009 SMBIOS Version 2.6 Windows Directory C: Windows Systemkatalog C: windowssystem32 Boot Device DeviceHarddiskVolume1 Landsting United States Hardware Abstraction Layer Version 82206.1.7600.163858221 Time Zone Central Dagsljus Installerat fysiskt minne (RAM) 4,00 GB Totalt fysiskt minne 3,75 GB Tillgängligt fysiskt minne 2,58 GB Totalt virtuellt minne 7,49 GB Tillgängligt Virtuellt minne 6,02 GB Sida Filutrymme 3,75 GB Excel 2010 (32 bitar) Snabba backtestresultat: 00:00:07 (Excel 2010 XLS-fil i kompatibilitetsläge). Snabbbacktestresultat: 00:00:07 (Excel 2010 XLSM filtyp).

No comments:

Post a Comment