Tuesday, 19 December 2017

Moving genomsnittet backtesting


Enkla rörliga medelvärden - Trading backtests Vilka glidande medelparametrar är bäst Den här sidan har ett hav av rörliga genomsnittliga backtests som jag utförde för DAX, SP500 och även USDEU (Forex). Dessa tester gjordes med hjälp av olika signalstrategier: simpleexponential - och crossover-varianter och olika index för en tidsperiod på 1000 handelsdagar. I motsats till andra webbplatser testade jag alla glidande medelvärden för dagfönster från 1 till 1000 dagar, för övergångsstrategierna i kombination också. Dessa data är också unqiue när jag försökte utföra realistiska tester som simulerar buysell spridningen och skatterna för jämförelse med en referens (buy hold) strategi. Ett snabbt reagerande fönstervärde ser bra ut i teorin och med ett enkelt test. Men spridningen, avgifter och skatter kommer att förstöra alla prestationer i praktisk tillämpning. Det är därför dessa realistiska tester är så värdefulla. Jag hoppas att den här webbplatsen kan hjälpa dig med dina affärer, njut av detBacktesting a Moving Average Crossover i Python med pandas I den tidigare artikeln om Research Backtesting Environments I Python With Pandas skapade vi en objektorienterad forskningsbaserad backtestingmiljö och testade den på en slumpmässig prognosstrategi. I den här artikeln kommer vi att använda sig av den maskin som vi introducerade för att utföra forskning om en faktisk strategi, nämligen Moving Average Crossover på AAPL. Flyttande genomsnittlig Crossover-strategi Den Moving Average Crossover-tekniken är en extremt välkänd förenklad momentumstrategi. Det anses ofta Hello World-exemplet för kvantitativ handel. Strategin som beskrivs här är långsiktig. Två separata enkla glidande medelfilter skapas, med varierande återkänningsperioder, för en viss tidsserie. Signaler för att köpa tillgången inträffar när det kortare återgåande glidande medlet överstiger det längre återkommande glidmedlet. Om det längre genomsnittet därefter överstiger det kortare genomsnittet säljs tillgången tillbaka. Strategin fungerar bra när en tidsserie går in i en period med stark trend och sedan sakta tillbaka trenden. I det här exemplet har jag valt Apple, Inc. (AAPL) som tidsserier, med en kort lookback på 100 dagar och en lång återgång på 400 dagar. Detta är exemplet från zipline algoritmiska handelsbiblioteket. Således, om vi vill implementera vår egen backtester måste vi se till att den matchar resultaten i zipline, som ett grundläggande sätt att validera. Genomförande Se till att du följer den tidigare handledningen här. som beskriver hur den ursprungliga objekthierarkin för backtesteren är konstruerad, annars fungerar inte koden nedan. För detta specifika genomförande har jag använt följande bibliotek: Implementeringen av macross. py kräver backtest. py från föregående handledning. Det första steget är att importera de nödvändiga modulerna och objekten: Som i föregående handledning kommer vi att subklassera abstraktionsklassen Strategi för att producera MovingAverageCrossStrategy. som innehåller alla detaljer om hur man genererar signalerna när de rörliga medelvärdena av AAPL passerar över varandra. Objektet kräver en shortwindow och en longwindow att fungera för. Värdena har ställts till standardvärden på 100 dagar respektive 400 dagar, vilka är samma parametrar som används i huvudexemplet för zipline. De glidande medelvärdena skapas genom att använda pandas rollingmean-funktionen på staplarna. Slutkursen för AAPL-aktien. När de individuella rörliga medeltalen har konstruerats genereras signalen Serie genom att kolumnen är lika med 1,0 när det korta glidande medlet är större än det långa glidande medlet eller 0,0 annars. Från detta kan positioneringsorder genereras för att representera handelssignaler. MarketOnClosePortfolio är subclassed från Portfolio. som finns i backtest. py. Det är nästan identiskt med det genomförande som beskrivs i den föregående handledningen, med det undantaget att handeln nu utförs på nära håll, snarare än en öppen till öppen basis. Mer information om hur Portfolio-objektet definieras finns i föregående handledning. Ive lämnade koden för fullständighet och för att hålla denna handledning fristående: Nu när klasserna MovingAverageCrossStrategy och MarketOnClosePortfolio har definierats kommer en huvudfunktion att kallas för att binda alla funktioner tillsammans. Dessutom kommer strategins resultat att undersökas via en kurva av aktiekurvan. Pandas DataReader-objekt laddar ner OHLCV-priser på AAPL-lager för perioden 1 januari 1990 till 1 januari 2002, vid vilken tidpunkt signalerna DataFrame skapas för att generera de långsiktiga signalerna. Därefter genereras portföljen med en initialkapital på 100 000 USD och avkastningen beräknas på egenkapitalkurvan. Det slutgiltiga steget är att använda matplotlib för att rita en tvåsiffrigt plot av båda AAPL-priserna, överlagrade med de glidande medelvärdena och buysell-signalerna, såväl som kapitalkurvan med samma buysell-signaler. Plottingskoden tas (och modifieras) från exempelsegmentet för zipline. Kodens grafiska utgång är enligt följande. Jag använde kommandot IPython-klistra för att placera detta direkt i IPython-konsolen i Ubuntu, så att den grafiska produktionen förblev i sikte. De pink upticksna representerar att köpa beståndet, medan de svarta downtickarna representerar att sälja tillbaka: Som det kan ses, förlorar strategin pengar under perioden, med fem rundturer. Detta är inte förvånande med tanke på AAPL: s beteende under perioden, vilket var en liten nedåtgående trend följt av en signifikant uppgång som började 1998. Utsläppsperioden för de rörliga genomsnittssignalerna är ganska stor och detta påverkade slutproduktens vinst , vilket annars kan ha gjort strategin lönsam. I efterföljande artiklar kommer vi att skapa ett mer sofistikerat sätt att analysera prestanda, samt beskriva hur man optimerar utkikningsperioderna för de individuella rörliga genomsnittssignalerna. Just Komma igång med Kvantitativ TradingMoving Average Backtest Symbol - Ange vilken symbol som spåras i vår databas, eller använd ett förhållande mellan symboler genom att ange två symboler som sym1: sym2. Flyttande medelvärden - kan vara antingen enkla eller exponentiella för antal angivna dagar. Med en enda MA bestäms innehavet av värdet av Pris i förhållande till det rörliga genomsnittet. När två MAs används används fastigheten av förhållandet mellan de två rörliga genomsnittsvärdena. Innehav - Fonden som kan hållas kan vara densamma eller annorlunda än den fond som används för beräkningarna ovan. Till exempel kan du modellera köpförsäljning av en hyrd fond baserat på det rörliga genomsnittet av den obelönade fonden. Benchmark - SPY är standard men alla symboler kan användas. Statistik - Statistikerna innehåller tre volatilitetsåtgärder som du vill vara låga, Standardavvikelsen, Ulcerindex och Max Drawdown. Dessutom finns tre avkastning: riskåtgärder där högre är bättre. Dessa inkluderar Sharpe Ratio, Sortino Ratio och Martin Ratio. Från nyhetsskärmar ETF Market View från och med måndag, mar 6 Viktig ansvarsfriskrivning: Informationen som tillhandahålls av ETFScreen är strikt för informationsändamål och ska inte tolkas som råd eller uppmaning att köpa eller sälja någon säkerhet. Ägaren till ETFScreen påtar sig inget ansvar som följer av användningen av materialet som innehållet häri för några ändamål, inklusive investeringsändamål. Sekretesspolicy Ansvarsfriskrivning Användarvillkor Om du har en kommentar, vänligen kontakta oss. BackTesting Flytta medeltal Varför flytta medeltal Som en näringsidkare eller investerare är den enda anledningen till att undersöka glidande medelvärden att få kunskap för att öka vinsten. Som många andra tekniska indikatorer är rörliga medelvärden avsett att hjälpa oss att objektivt berätta marknadsstatusen vid vilken tidpunkt som helst. Detta hjälper oss att se igenom dagens känslor och göra rationella beslut, som vi berättar för, kommer att leda till större vinster och eller färre förluster på lång sikt. Flyttande medelvärden (MAs) släpper prisserien för ett lager. MAs används oftast för att identifiera utvecklingen av marknadsriktningen och klassificeras som en trendföljande indikator. Detta betyder inte att MAs är endast för långsiktiga investerare. 8211 Kortsiktiga handlare använder dem också. Flyttande medelvärden kan användas för att skärpa lager för bra kandidater, signal köpmöjligheter och erbjuda säljesignaler. Varför Backtest 8211 En historia Målet med backtesting är att ta reda på om glidande medelvärden verkligen leder till bättre resultat och vad är de mest lovande sätten att tillämpa MAs. Låt mig berätta en kort historia. Medan jag sammanställde resultaten för en av de rörliga genomsnittliga BackTesting Report-problemen, råkade jag besöka en vän. I hennes hus kom jag över lite läsning från en välannonserad rabattmäklare. I det var en artikel som rådde sina kunder att använda en viss rörlig genomsnittslängd som tillämpas på ett visst sätt för att få de bästa resultaten. Jag hade mina omfattande tester mitt framför mig och jag kan säga att broker8217s metod inte lyckades bäst, även om de nämnde en MA-längd som är användbar på andra sätt. Jag hade i mina handtestresultat som visade att sättet som mäklare tillämpade det rörliga genomsnittet hade en vinstgradering sämre än baslinjen när den testades på 7147 aktier över 14 års aktiemarknadsdata. Det var klart att mäklaren inte körde den typen av testning. It8217s upp till kunderna 8211 oss 8211 för att försvara oss själva och ta reda på vad som fungerar mot vad doesn8217t. Hur man beräknar MAs Vid backtesting glidande medelvärden är det första beslutet hur man beräknar glidande medelvärdet. Vill du ha ett enkelt glidande medelvärde (SMA) Eller något som är utformat för att spåra priset bättre, som ett exponentiellt glidande medelvärde (EMA) Du kan överväga ett experiment för att jämföra vinstpriserna för de två olika genomsnitten. Jag gjorde just det för ett par år sedan, och medan jag inte har resultaten att publicera kom jag bort med tanken att det inte gjorde stor skillnad om jag valde SMA eller EMA 8212 bara välj en och använd den konsekvent. Så för det här projektet väljer jag att använda enkla glidande medelvärden eftersom jag ser dem oftast i kommentarfält. För att faktiskt göra beräkningen åberopade jag den inbyggda funktionen som kom med TradeStation. (Valet av backtesting engine är ett annat beslut som är generellt nog att skriva om i ett annat inlägg.) Hur man använder MAs Nästa måste du fastställa hur exakt du vill tillämpa glidande medelvärden. Hur tolkar du förhållandet mellan pris och rörligt medelvärde Vilka regler kommer du att använda för att bestämma när du ska köpa och sälja? Du behöver inte läsa länge om aktierna innan du hamnar på en hausseisk referens till en aktiehandel över dess 200-dagars glidande medelvärde eller dess 50-dagars glidande medelvärde, eller till och med den 10 eller 20-dagars MA. Eller råd om att köpa aktier när de passerar deras 50-dagars eller 200-dagars glidande medelvärde. Dessa är viktiga regler för testning i backtesting-motorn. Och då är det8282s rörliga genomsnittliga crossover 8211 en klassisk metod för teknisk analys. Det gör tre olika sätt att använda glidande medelvärden för att testa. Går mer ingående, vissa handelstexter talar om lutningen av ett glidande medelvärde. Om du hakar tillbaka till algebra och ser MA som en linje, för att hitta sin sluttning skulle du välja två punkter på linjen och tillämpa den vanliga formeln (x2-x1) (y2-y1)). Detta ger upphov till frågan om hur långt ifrån varandra för att välja de två punkter som kan göra skillnad i resultat. Egentligen, eftersom MA används för att identifiera trenden, vill vi bara veta om den är sluttande upp eller ner. Då kan vi förenkla hela beräkningen genom att märka att om priset ligger över det glidande genomsnittet, måste det dra i genomsnittet och ett pris under MA drar ner det. Således en annan anledning att testa effekten av priset över det glidande medlet. Parameterinställningar När du väl har bestämt dig för hur du använder MAs måste du välja ett urval av olika längder för att testa. Akta dig för överoptimering. Någonstans där ute finns en kille med backtestingresultat som visar 3895 vinst eller vad som helst med bara det rätta glidande medlet. Synd han vet inte vad MA kommer att producera dessa resultat i framtiden. Med det sagt måste du försöka mer än en längd för att se till att dina resultat är en fluke. Håll fast med standardinställningarna eller de som du hör mest om i media. Att hitta den perfekta parameterinställningen kommer inte att göra dig rik. Att hitta ett kluster av bra, robusta inställningar kan bara göra dig mycket bra men. Som en praktisk sak när backtesting tillåter tillräckligt med datafördröjning före mätning. Alla tester måste börja mäta på samma plats för jämförelse mellan äpplen och äpplen mellan olika MA längder. Om du till exempel testar ett 200-dagars glidande medelvärde, tar det de första 200 dagarna av data för att beräkna den första punkten för det glidande medlet. Det betyder att den första dagen du kan få en signal är 200 dagar i datasetet. För att göra en rättvis jämförelse med t ex 10-dagars glidande medelvärde måste du se till att inte räkna några signaler från 10-dagars glidande medelvärde innan 200-dagarna är redo att gå. Lyckligtvis TradeStation har ett sätt att ställa in 8220Maximum antal barer studie kommer referens8221 i 8220Properties för All8221 strategier som tvingar backtesting motorn att vänta så länge innan tabulera data. Mer vinst från att köpa eller sälja Flytta genomsnittliga regler, och i synnerhet glidande genomsnittliga övergångsregler, diskuteras ofta som ett omvändningssystem. Det betyder att en signal, säger att MAs korsning uppåt är en köpsignal och då är motsatsen, säg MA-linjer som korsar ner, inte bara en säljsignal utan också att avtryckaren går kort. Teoretiskt sett är that8217s bara bra men många människor inte intresserade av att korta marknaden. De letar efter tekniker för att hjälpa dem att köpa och kanske sälja. Även en person som regelbundet säljer och säljer kort kan använda olika tekniker för att köpa och sälja. Av dessa skäl är it8217s klokt att testa köpssignalerna separat från säljsignalerna. Detta utgör ett dilemma eftersom it8217s svårt att utvärdera en köpsignal isolerat. Ett sätt att göra detta är att använda tidsmässiga utgångar 8211 som går ut ur handeln eller säljer beståndet efter en viss tid förflutit. Jag valde att köra varje backtest tre gånger med tre olika tillfällen utgångar eftersom olika människor har olika stilar och olika behov. För att producera backtesting resultat som är användbara för att svänga handlare, avslutar jag efter 2 dagar. Att modellera handlare, 20 dagar. För att möta behoven hos aktiva investerare håller backtesting varje position i 200 dagar. Detta ger ett sätt att isolera köpssignalerna och ta reda på hur användbart det rörliga genomsnittet är för aktieköpare av olika temperament. Behovet av att definiera godhet En mycket viktig sak att överväga om du testar på glidande medelvärden för att ta reda på hur bra de gör på aktiemarknaden: Hur vet du vad som är bra Du behöver objektiva kriterier för framgång. Det innebär att identifiera nyckeltal som vinstfrekvens, förväntad tid, hypotetiska kapitalvinster etc. Det betyder också att man ställer in standarder för acceptabel prestanda inom vart och ett av dessa områden. Ett exempel illustrerar varför detta är viktigt och varför det inte är så enkelt som det först framgår. Säg att dina test visar en vinstgrad på 55 för en viss indikator. Det kanske inte är så bra om 62 år av alla aktier gick upp under samma tidsperiod. Eller om endast 25 av aktierna ökade under denna tidsperiod skulle din 55-vinstfrekvens vara spektakulär. Det som är bra beror på hur det jämförs med baslinjens prestanda under samma förutsättningar. Du kan ladda ner en gratis kopia av BackTesting Report Baseline-problemet genom att klicka här. För en meningsfull backtest måste du ha tillräckligt med data för att göra en statistiskt giltig jämförelse. I det läget betyder det 30 affärer. Även om du handlar bara ett instrument 8211 bara ett lager eller bara ett valutapar 8211 Jag tycker it8217s viktigt att testa din handelsstrategi på många olika instrument för att bevisa dess robusthet. Jag gick överst med en extremt stor testuppsättning 8212 7147 aktier över 14 år 8212 för att se till att mina resultat skulle gälla under en mängd olika marknadsförhållanden. Du kan få din kopia av mina backtestingrapporter om flyttande genomsnittliga köpsignaler genom att klicka här.

No comments:

Post a Comment