Backtesting en 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 utnyttja Maskiner vi introducerade för att genomföra forskning om en verklig strategi, nämligen Moving Average Crossover på AAPL. Moving Average Crossover Strategy. The 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 glidande genomsnittsvärdet överstiger det längre återkommande glidande genomsnittet. Om längre genomsnittet överstiger därefter det kortare genomsnittet, tillgången säljs tillbaka. Strategin fungerar vi ll när en tidsserie går in i en period med stark trend och sedan sakta tillbaka trenden. För det här exemplet har jag valt Apple, Inc AAPL som tidsserie med en kort lookback på 100 dagar och en lång återgång på 400 dagar. Detta är Exemplet från zipline algoritmiska handelsbiblioteket 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. Var noga med att följa den tidigare handledningen här, som beskriver hur initialen objekt hierarkin för backtester är konstruerad, annars kommer koden nedan inte att fungera För denna speciella implementering har jag använt följande bibliotek. Implementeringen av kräver från den tidigare handledningen Det första steget är att importera nödvändiga moduler och objekt. Som i föregående handledning vi ska subklassera abstrakta basklassen för att producera MovingAverageCrossStrategy som innehåller alla detaljer om hur man genererar signalerna när flyttningen av Fel av AAPL korsar varandra. Objektet kräver en shortwindow och en longwindow att fungera. 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. Medelvärden skapas med hjälp av pandas rollingmean-funktionen på staplarna Stäng slutkurs 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ångrörande medelvärde eller 0 0 annars Från detta kan positionsbeställningarna genereras för att representera handelssignaler. MarketOnClosePortfolio är underklassificerad från Portfolio som finns i Det är nästan identisk med genomförandet som beskrivs i föregående handledning, med undantag för att branschen utförs nu på nära håll, snarare än en öppen till grund. För detaljer om hur Portfolio-objektet definieras, se tidigare t Utorienterat Jag har lämnat in koden för fullständighet och för att hålla den här självstudiet. Nu när klasserna MovingAverageCrossStrategy and MarketOnClosePortfolio har definierats kommer en huvudfunktion att kallas för att knyta all funktionalitet 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. Sedan är portföljen genereras med en 100 000 USD basiskapitalbas och avkastningen beräknas på egenkapitalkurvan. Det sista steget är att använda matplotlib för att rita en tvåsiffrigt plot av båda AAPL-priserna, överlagrade med glidande medelvärden och köpförsäljningssignaler, liksom aktiekurvan med samma köpförsäljningssignaler Plottningskoden tas och modifieras från zipline-implementeringsexemplet. Den grafiska utmatningen av koden är som följer Jag är arg Användning av IPython-klistraget för att sätta det här direkt i IPython-konsolen i Ubuntu, så att den grafiska produktionen förblev i sikte. Den rosa upticks representerar att köpa lageret, medan de svarta nedåtriktade knapparna representerar att sälja den tillbaka. AAPL Flyttande genomsnittlig Crossover Performance från 1990-01-01 till 2002-01-01.As kan ses strategin förlorar 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 resultatet av den slutliga handeln, 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 återkallningsperioderna för de individuella rörliga genomsnittssignalerna. Bara komma igång med kvantitativ handel. Utmattning med exponentiellt väsentligt Hted Moving Averages. Ett rörligt medelvärde tar en högljudd tidsserie och ersätter varje värde med medelvärdet för ett grannskap om det angivna värdet. Detta grannskap kan bestå av rent historiska data, eller det kan vara centrerat kring det givna värdet. Dessutom är värdena i Kvarteret kan vägas med olika viktsatser Här är ett exempel på ett lika viktat trepunkts glidande medelvärde med historiska data. Här representerar den släta signalen och representerar de högljudda tidsserierna Till skillnad från enkla glidmedel är en exponentiellt vägd glidande medelvärdet EWMA justerar ett värde enligt en exponentiellt vägt summa av alla tidigare värden. Detta är grundsidan. Det här är trevligt eftersom du inte behöver oroa dig för att ha ett trepunktsfönster, mot ett fempunktsfönster eller oroa dig för lämpligheten av ditt viktningsschema Med EWMA, minns tidigare förturer och långsamt bortglömda, med termen i den sista ekvationen, medan med ett fönster eller grannskap med diskreta gränser, glöms en störning så fort den går ut ur fönstret. Förmedling av EWMA för att tillgodose trender. Efter att ha läst om EWMA i en databasbok hade jag lyckats med att använda det här verktyget på varje enskild utjämningsprogram som Jag kom över Det var inte förrän senare att jag lärde mig att EWMA-funktionen egentligen bara är lämplig för stationär data, dvs data utan trender eller säsongsmässighet. I synnerhet motverkar EWMA-funktionen trenderna bort från strömmen att det redan ses Så, om Du har en högljudd hattfunktion som går från 0 till 1 och sedan tillbaka till 0, så kommer EWMA-funktionen att returnera låga värden på upp-backsidan och höga värden på nedre sidan En väg att kringgå detta är För att jämna signalen i båda riktningarna, marschera framåt och sedan marschera bakåt, och sedan med de två här, kommer vi att använda EWMA-funktionen som tillhandahålls av pandasmodulen. Hollt-Winters Second Order EWMA. Holt-Winters andra order träffades Hod försöker att integrera den uppskattade trenden i den jämnda data med hjälp av en term som håller koll på höjden hos den ursprungliga signalen Den släta signalen skrivs till termen. Och här är en viss Python-kod som implementerar Holt-Winters andra ordningsmetod på en annan bullerhatt funktion, som tidigare. Post navigation. Recent Postsputational tools. Analogously, DataFrame har en metod för att beräkna parvisa covariances bland serierna i DataFrame, även uteslutande NA null-värden. Att slumra de saknade data saknas slumpmässigt resulterar detta i en Uppskattning av kovariansmatrisen som är opartisk Men för många tillämpningar kan denna uppskattning inte vara acceptabel eftersom den uppskattade kovariansmatrisen inte garanteras vara positiv semit definierad. Detta kan leda till beräknade korrelationer med absolutvärden som är större än en och eller en icke-inverterbar kovariansmatris Se Estimering av kovariansmatriser för mer detaljer. stöder också ett valfritt minperiods nyckelord som specificerar det önskade minimala antalet observationer för varje kolumnpar för att få ett giltigt resultat. Vikten som används i fönstret anges av wintypsordet. Listan över erkända typer är. kaiser behöver beta. gaussian behöver std. generalgaussian behöver kraft, width. slepian behöver bredd. Notera att boxcarfönstret motsvarar medelvärdet. För vissa fönsterfunktioner måste ytterligare parametrar anges. För en wintype finns ingen normalisering gjord för vikterna för fönstret Passing anpassade vikter av 1, 1, 1 ger ett annat resultat än viktvärden på 2, 2, 2 till exempel När man passerar en wintype istället för att uttryckligen specificera vikterna, är vikterna redan normaliserade så att den största vikten är 1. I motsats , Beräkningen är sådan att vikterna normaliseras i förhållande till varandra. Vikten av 1, 1, 1 och 2, 2, 2 ger samma resultat. Tid-medveten Rolling. New i version 0 19 0.Ne w i version 0 19 0 är förmågan att överföra en förskjutning eller konvertibel till en metod och få den att producera fönster med varierande storlek baserat på det löpande tidsfönstret. För varje tidpunkt inkluderar detta alla föregående värden som uppträder inom den angivna tiden delta. Denna kan vara särskilt användbart för ett icke-regelbundet tidsfrekvensindex. Detta är ett vanligt frekvensindex Använda ett heltalsparameter arbetar parametern att rulla längs fönsterventilen. Att specificera en förskjutning medger en mer intuitiv specifikation av rullande frekvens. Använda en icke-vanlig, Men fortfarande monotoniskt index, rulla med ett heltal fönster ger inte någon särskild beräkning. Användning av tidsspecifikationen alstrar variabla fönster för denna sparsamma data. Dessutom tillåter vi nu en valfri parameter för att ange en kolumn snarare än indexets standard i en DataFrame. Time-aware Rolling vs Resampling. Using med ett tidsbaserat index är ganska likt resampling De båda opererar och utför reduktiva operationer på tid indexerad pa Ndas-objekt. När man använder en förskjutning Offset är ett tids-delta Ta ett bakåt-i-tiden-fönstret och summera alla värden i det fönstret inklusive slutpunkten, men inte startpunkten Det här är det nya värde i det här fallet i resultatet Dessa är variabla storlekar i tidrymden för varje punkt i ingången. Du får samma resultat som ingången. När du använder en kompensering Konstruera ett nytt index som är frekvensen för offseten För varje frekvensfack, aggregatpunkter från inmatningen i ett bakåtblickande fönster som faller i facket Resultatet av denna aggregering är utgången för den frekvenspunkten. Fönstren är fast storlekstorlek i frekvensutrymmet Ditt resultat kommer att ha Form av en vanlig frekvens mellan min och max för det ursprungliga ingående objektet. För att sammanfatta rullning är en tidsbaserad fönsteroperation, medan en frekvensbaserad fönsteroperation. Centering Windows. By standard är etiketterna inställda på högra kanten Av fönstret, men a center-nyckelordet är tillgängligt så att etiketterna kan ställas in i mitten. Binära fönsterfunktioner. cov och corr kan beräkna flyttningsfönsterstatistik om två serier eller någon kombination av DataFrame-serien eller DataFrame DataFrame Här är beteendet i varje fall. två serier beräknar statistik för parning. DataFrame-serien beräknar statistiken för varje kolumn i DataFrame med den överförda serien och returnerar därmed en DataFrame. DataFrame DataFrame som standard beräkna statistiken för att matcha kolumnnamn, returnera en DataFrame Om sökordsargumentet parvis True passerar sedan beräknar statistiken för varje par kolumner och returnerar en panel vars föremål är aktuella datum, se nästa sektionerande rullande parvisa covarians och korrelationer. I finansiell dataanalys och andra fält är det vanligt att beräkna kovarians - och korrelationsmatriser för en samling av tid serie Ofta är man också intresserad av kovarians - och korrelationsmatriser i rörfönstret. Detta kan göras av pa ssing det parvisa sökordet argumentet, vilket i fallet med DataFrame-ingångar kommer att ge en Panel vars objekt är de aktuella datumen. Vid ett enda DataFrame-argument kan det parvisa argumentet utelämnas. Missande värden ignoreras och varje post beräknas med de parvisa fullständiga observationerna Vänligen se kovariansavsnittet för överväganden som är associerade med denna metod för beräkning av kovarians - och korrelationsmatriser. Förutom att inte ha en fönsterparameter har dessa funktioner samma gränssnitt som deras motsvarigheter Liksom ovan är parametrarna alla accepterar. minioder tröskeln för icke-null-datapunkter för att kräva standardvärden som krävs för att beräkna statistik Nej NaNs kommer att matas ut när minperioder har icke-null-datapunkter har visats. center boolean, om du vill ställa in etiketterna i mitten är default. och metoderna returnerar inte en NaN om det finns minst minvärden icke-nullvärden i det aktuella fönstret Detta skiljer sig från cumsum cumprod cumma X och cummin som returnerar NaN i utgången där en NaN uppträder i ingången. En expanderande fönsterstatistik kommer att vara stabilare och mindre mottaglig än dess rullande fönster motpart eftersom den ökande fönsterdimensionen minskar den relativa effekten av en enskild datapunkt som en Exempel här är den genomsnittliga utgången för den tidigare tidsserien dataset. Exponentially Weighted Windows. En relaterad uppsättning funktioner är exponentiellt viktade versioner av flera av ovanstående statistik Ett liknande gränssnitt till och är tillgängligt via metoden för att ta emot ett EWM-objekt Ett nummer av expanderande EW-exponentiellt viktade metoder tillhandahålls.
Så här handlar du om volatilitet Chuck Norris Style. När handelsalternativ är en av de svåraste koncepten för nybörjare att lära sig är volatilitet och specifikt hur man hanterar volatilitet Efter att ha mottagit många e-postmeddelanden från människor angående detta ämne, ville jag ta en djup titt på Alternativ volatilitet Jag kommer att förklara vad alternativ volatilitet är och varför det är viktigt. Jag ska också diskutera skillnaden mellan historisk volatilitet och underförstådd volatilitet och hur du kan använda detta i din handel, inklusive exempel jag ska sedan titta på några av de viktigaste alternativen handelsstrategier och hur stigande och fallande volatilitet kommer att påverka dem Denna diskussion kommer att ge dig en detaljerad förståelse för hur du kan använda volatiliteten i din trading. OPTION TRADING VOLATILITY EXPLAINED. Option volatilitet är ett nyckelbegrepp för alternativhandlare och även om du är nybörjare bör försöka ha åtminstone en grundläggande förståelse Alt...
Comments
Post a Comment