Friday 22 September 2017

Garch Trading System


Quantum Financier skrev en intressant artikel Regime Switching System Använda Volatilitetsprognos Artikeln presenterar en elegant algoritm för att växla mellan genomsnittliga återgång och trend-följande strategier baserade på volatiliteten på marknaden. Två modeller undersöks en med den historiska volatiliteten och en annan som använder Garch 1, 1 Volatilitetsprognos Medelåtervändningsstrategin modelleras med RSI 2 Long när RSI 2 och Short otherwise Den trendbaserade strategin modelleras med SMA 50 200 crossover Long när SMA 50 SMA 200 och Short otherwise. I vill visa hur man implementerar dessa idéer använder backtesting biblioteket i Systematic Investor Toolbox. Följande kod laddar historiska priser från Yahoo Fiance och jämför prestanda för Buy and Hold, Mean-Reversion och Trend-Following strategier med hjälp av backtesting-biblioteket i Systematic Investor Toolbox. Next, låt oss skapa en strategi som byter mellan medelåtervändning och trendbaserade strategier baserade på historisk marknadsvolatilitet ty. Next, låt oss skapa ett GARCH 1,1-volatilitetsprognos Jag rekommenderar att du läser följande artiklar för alla som vill hitta vad GARCH handlar om eller för att uppdatera sin kunskap. GARCH 1,1 av David Harper en mycket bra inledande artikel Med många visuella diagram. Praktiska problem i Univariate GARCH Modeling av Y Chalabi, D Wurtz steg för steg exempel på montering av GARCH 1,1-modell med full R-kod. Basisk introduktion till GARCH av Quantum Financier är en serie inlägg som går in på detaljerna och antagandena för GARCH och EGARCH. Det finns några R-paket för att passa GARCH-modeller. Jag kommer att överväga garch-funktion från tseries-paketet och garchFit-funktionen från fGarch-paketet. Garch-funktionen från tseries-paketet är snabb men hittar inte alltid lösningen GarchFit-funktionen från fGarch-paketet är långsammare men konvergerar mer konsekvent. För att visa hastighetsskillnaden mellan garchfunktionen och garchFit-funktionen skapade jag en enkel benchmark. The garchFit-funktionen är i genomsnitt 6 Gånger långsammare än garch-funktion Så för att prognostisera volatilitet kommer jag att försöka använda garch-funktionen närhelst den kan hitta en lösning och garchFit-funktion annars. Nå, låt oss skapa en strategi som byter mellan medelåtervändning och trend-följande strategier baserade på GARCH 1, 1 volatilitetsprognos. Växlingsstrategin som använder GARCH 1,1-volatilitetsprognosen utfördes något bättre än den som använder historisk volatilitet. Det finns många olika metoder du kan ta för att införliva prognoser i dina modeller och handelsstrategier R har en mycket rik uppsättning paket Att modellera och prognostisera tidsserier Här är några exempel som jag funnit intressanta. För att se hela källkoden för det här exemplet, kolla in funktionen hos github. ARMA Models for Trading. I den här handledningen kommer jag att dela med mig RD och trading erfarenhet med hjälp av den välkända från statistiken Autoregressiv Moving Average Modell ARMA Det finns mycket skrivet om dessa modeller, men jag rekommenderar starkt Intro Ductory Time Series med R som jag finner är en perfekt kombination mellan ljusteoretisk bakgrund och praktiska implementeringar i R En annan bra läsning är online-e-boken Prognosprinciper och praxis skrivet av Rob Hyndman en expert i statistisk prognos och författaren till den utmärkta prognosen R-paketet. Gå startade. In R använder jag mestadels fArma-paketet, vilket är ett fint omslag med utökad funktionalitet runt arima-funktionen från statistikpaketet som används i ovan nämnda bok. Här är en enkel session för montering av en ARMA-modell Till SP 500 dagliga avkastningar. För mer information, hänvisa till litteraturen och de paket som jag bara vill betona på ett par punkter. Vi modellerar den dagliga avkastningen i stället för priserna Det finns flera orsaker på detta sätt finansiella serier blir vanligtvis stationär, vi behöver något sätt att normalisera en serie, etc. Vi använder diff och loggfunktionen för att beräkna daglig avkastning istället för procentsatser. Inte bara detta är en standard p Raktice i statistiken, men det ger också en jätte bra approximation till de diskreta avkastningarna. Den tillvägagångssätt som jag kommer att presentera här är en form av framåtriktad backtesting. När vi går serierna dag för dag använder vi historia av viss längd för att hitta det bästa modell Då kommer vi att använda denna modell för att förutse nästa dag s återvändande Om förutsägelsen är negativ antar vi kort position, annars antar vi en lång position. Ett exempel kommer att göra saker tydligare Efter slutet av 11 juni 2012 beräknar vi senaste 500 dagliga avkastningar Med hjälp av dessa returar söker vi igenom rymden av ARMA-modeller och väljer den bästa anpassningen med avseende på vissa metriska och vissa kravmodeller. Slutligen använder vi denna modell för att beräkna förutsägelsen för imorgonens retur och använda tecknet på återgången för att bestämma lämplig position. Villken av en bra modell. Det första hindret för denna metod innan det kan vara användbart för oss är att välja modellparametrarna. För ARMA finns det två parametrar I andra wo rds, det finns ett oändligt antal val 0,1, 1,0, 1,1, 2,1, etc. Hur vet vi vilka parametrar som ska användas. En gemensam inställning i statistiken för att kvantifiera godheten i passformen är AIC För Akaike Informationskriterier statistik När man har gjort det är värdet av AIS-statistiken tillgängligt via. Det finns naturligtvis andra statistik, men typiskt är resultaten ganska likartade. För att sammanfatta är allt vi behöver är en slinga för att gå igenom alla parameterkombinationer som vi anser vara rimliga, till exempel från 0,0 till 5,5 inklusive, för varje parameterpar passar modellen och slutligen välja modellen med lägsta AIC eller någon annan statistik. Notera att ibland inte armaFit finner en passform och returnerar ett fel och därmed avslutar slingan omedelbart armaSearch hanterar detta problem genom att använda tryCatch-funktionen för att fånga något fel eller varning och returnera ett logiskt värde FALSE istället för att störa allt och avsluta med ett fel Således kan vi skilja en felaktig och normal funktionbara genom att kontrollera typen av resultatet Lite rörigt, men det fungerar. Några R-paket, prognos och rugarch ger till exempel en liknande funktion ur lådan Så man kan bygga sin infrastruktur runt en av dessa istället. När parametrar är valda, det är dags att bestämma positionen i slutet. En väg att göra det är med en dag framåt förutsägelse. Om förutsägelsen kommer negativ kom ihåg att serien vi kör på är den dagliga avkastningen då är önskad position kort, Annars är det länge. Nu, för att bygga en indikator för backtestning, kan man gå i den dagliga returserien och vid varje punkt utföra de steg vi täckt hittills. Huvudloopen ser ut som förkortad med syfte. Var historien är utkik period att överväga vid varje punkt brukar jag bruka 500, vilket är ungefär två års data Med andra ord, för att bestämma positionen vid varje enskild dag föregående dag nära den aktuella dagen, bestämmer vi avkastningen vi använder historia om 500 dagar, fördröjda vid lags dag Du kommer att se senare hur lags kommer i spel i praktiken. Notice, som förutsäger, måste också vara omgiven av ett tryCatch-block armaSearch har också den trevliga funktionen att bestämma om en modell har en prognos eller inte förutsäger att det lyckas eller inte, detta test styrs Via parametern withForecast. Improving Performance. Antalet beräkningar vi måste göra läggs upp snabbt Till exempel i 10 års historisk data måste vi beräkna cirka 2 500 handelsdagar För varje dag kommer vi att passa och förutsäga minst 35 35 6 6-1, 0 till 5 både för AR och MA-komponenten, men exklusive 0,0-kombinationsmodellerna Multiplicera antal modeller efter antal dagar och vi ser redan på mer än 88 tusen modell passar det så mycket av beräkningar. Ett sätt att förbättra prestanda för dessa nödvändiga beräkningar kan uppnås genom att utnyttja flera kärnprocessorer. Min metod är att parallellisera modellvalet, armaSearch-funktionen i ovanstående kod. Även om detta inte är den mest effektiva Ient approach, det är verkligen mer praktiskt eftersom det också kommer att öka prestanda för armaSearch när det används oberoende. Jag vann inte posta den slutliga versionen av koden här på grund av den längd kommer jag att ge dig GIST-länken istället. Modelleringsvolatilitet med GARCH. Financiala tidsserier är slumpmässiga i allmänhet En av de få egenskaper de uppvisar är Volatility Clustering Detta uppnås vanligen genom att utöka ARMA-prognoserna med en GARCH-modell Sounds-komplex, och de teoretiska detaljerna är komplicerade, men det visar sig vara söt Riktigt måste vi också ändra alla relevanta funktioner, som armaSearch-samtal till garchFit och förutsäga också måste hanteras via tryCatch Notice, som också förutsätter att vi returnerar en matris för GARCH-modeller. Den fullständiga källkoden är tillgänglig från en GitHub Gist. SP 500 Performance. Let börjar med kapitalkurvan för att tillämpa ARMA GARCH-strategin under hela 60 år sedan 1950 av SP 500 historiska data. ARMA vs Köp-och - Hold. Det ser ut Fantastiskt Faktum är att det imponerade mig så mycket att jag letade efter fel i koden under ganska lång tid. Även på ett logaritmiskt diagram är prestandan av denna metod fantastisk CAGR på 18 87 och ARMA GARCH-strategin åstadkommer denna prestanda med ett jämförbart maximalt Nedräkning av 56. För att beräkna ARMA-strategins tillväxt behöver vi först den dagliga indikatorn. Denna indikator tar ungefär två dagar att beräkna med alla optimeringar som jag täckte i detta inlägg. Den första kolumnen är datumet, det andra stället för denna dag 1 för lång, -1 för kort, 0 för ingen Obs! Positionen är redan inriktad på den dag då den returneras som den beräknas vid slutet av föregående dag, med andra ord, indikatorn är inriktad korrekt med avkastningen behöver inte bytas höger via lagindikatorn Indikatorn, den första kolumnen, måste multipliceras med SP 500 dagliga avkastning Resten av kolumnerna är irrelevanta och förhoppningsvis självförklarande. Låt s vika upp inlägget med koden som laddar indikatorn och plottar grafen C. Hej Bara av nyfikenhet här producerades de resultat du publicerade genom att undersöka dagliga avkastningar under en given lookback-period och sedan försöka förutse nästa dag tillbaka. Har du testat din ARMA-strategi på veckovis avkastning. Hur resultaten stack sig mot strategi där dagliga avkastningar matas in i din modell istället. Det är också intressant att se några andra nummer som vinnare, till exempel. Användar du den här modellen för att handla riktiga pengar. Bra inlägg och fortsätt det bra arbetet. Jag har t provade veckovis avkastning, troligen värt att titta på det, men för veckovis avkastning jag föredrar att använda en modell med hänsyn till andra funktioner förutom avkastning Mer lämplig för en SVM eller ett neuralt nätverk. Ja, jag har använt ARMA GARCH-strategin för handel ett enda finansiellt instrument inte SPY i mer än ett år nu Det här är den främsta anledningen till att jag är ovillig att dela koden. Senast tittar jag på uppdatering av inlägget med några mer handelssammanfattningar och statistik, men tillflyktsort har gjort det hittills, för att jag inte kunde hitta en tillfredsställande jag är picky-format. Jag är oerhört tacksam för att du sätter upp sådana användbara r-koder och information för kvantitativ analys. Jag har inte sett sådana organiserade förfaranden och Koder för R för kvantanalys någon annanstans Jag har besökt din blogg länge jag försöker följa koderna här men jag är rädd att jag definitivt saknar några steg här armasearch-funktionen ger mig arma 5,2 för SPY men du är med hjälp av arma 0,2 för garchfit Kan jag veta varför Om jag saknar något, vänligen vägleda mig och kan du skicka mig hela koden till Tack på förhand. Den Prabin, som alltid är glad att höra från människor som tycker om bloggen, inspirerar mig att inte Försumma den. Koden du refererar till är bara en illustration hur man använder garchFit 0,2 är helt slumpmässigt Jag väljer bara några siffror För verkligt bruk måste man skapa en garchSearch-funktion som liknar den visade armaSearch Det är liknande, men det finns skillnad på pos sible modeller består av fyra element, de två första är AR, MA, men det finns två GARCH-komponenter, garchFit ersätter armaFit och även resultaten från garchFit är lite mer detaljerad en array vs ett nummer. Koden är inte fullt fungerande Som det är Anledningen till att jag inte vill lägga upp hela koden är att jag använder den dagligen. Resultaten av att köra det dagligen på SPY finns på SP 500-sidan. Det har både det dagliga läget baserat på ARMA GARCH, liksom , åtgärdstabellen för slutet av dagen. Det är staten om ARMA GARCH, men jag lovar att jag vann t göra detsamma för nya saker. SVMs kommer att jag ska publicera en fullständigt funktionell version av koden, även om jag inte vann att uppdatera den Med förbättringar. Hej Mycket intressant inlägg Jag har en fråga om funktionen armaComputeForecasts som producerar rullande prognoser. När det här skapas en prognos motsvarar förecasets datum, dvs indexet i motsvarande xtsrad, det datum det skapades eller datumet det prognostiserar jag nej, det vill säga skulle jag behöva fördröja förkastningen som vanligt med en indikator eller är detta redan omhändertagen. Eftersom ARMA-strategins outperformance ser ganska tidsperiodsspecifik så visar den stora majoriteten av överskjutande avkastning att genereras mellan 1965-75, det skulle vara mycket mer användbart för att se ett diagram över rullande kumulativa avkastningar för varje strategi, dvs över 3 eller 5 år. ARMA-avkastning är förmodligen brutto av t-kostnad här, så strategisk omsättning är ett annat mycket viktigt övervägande kan du dela vad det är Var. Hi i min gamla blogg nämnde jag att det var en handel i genomsnitt varannan 35 dagar Jag kommer ihåg att räkna handelarna och dela med dagarna Indikatorn för serien finns här Det måste matchas mot SP 500 kontant Index, ingen fördröjning, men då kan man få alla typer av statistik. Jag kommer säkert att göra det en dag, bara inte säker när med Med den här strategin är jag inte alltför orolig för transaktionskostnaderna. Med ett vanligt detaljhandelskonto på Interactive Brokers, man kan Handla en andel av SPY för 0 005 Till det nuvarande priset på 140, det är försumbart, om inte gjort några gånger om dagen. Hi, ditt inlägg är inte bara intressant att läsa men fungerar också som en guide till nya personer inom området för Kvantitativ en nybörjare på detta område, din blogg verkar vara en guldgruva Jag har några frågor, men jag har använt din Armasearch-kod på ett visst instrument och fann att med indikatorerna gav det inte bättre prestanda än köp Och håll, så jag har försökt passa in i garchFit-koden med garch 1,1 som garchfel, kan du vänligen vägleda mig så att jag skulle kunna göra det här. Relevanta exempel eller länkar skulle vara till stor hjälp Även jag förstod inte från din kod, hur exakt det är att exekvera handeln, det vill säga inmatnings - och utgångspunkter, kan du vänligen vägleda mig på samma sätt. Din blogg är inte bara intressant men också informativ för människor som är nya till kvantitativa finansvärlden Jag har några frågor, jag har använt armasearchfunktionen för ett visst instrument och på backtesting hittade resultaten att vara sämre än att köpa och hålla, så jag försöker passa garch 1,1, kan du vänligen vägleda mig om hur man gör detsamma Kan du också hjälpa mig när det gäller inmatnings - och utgångspunkter för indikatorn som genereras av du ovan. Hi är det här min bästa ansträngning utan att ge källkoden själv för att förklara hur du använder garchFit. Du kanske vill försöka första andra arma-tillvägagångssätt, jag skulle rekommendera prognospaketet och hans författares bok eller rugarchpaketet. Båda dessa Paket ger mer vetenskaplig och avancerad metod för val av arma-modeller. Att tillämpa idéerna på den här bloggen i praktiken kräver en betydande mängd ytterligare arbete. Mitt enda råd, som jag har skisserat i andra inlägg, är att tänka på att tillämpa i verklig praxis vid varje steg. Tack så mycket för de stora introduktionerna du ger för nybörjare som mig själv i kvantitativ finans. I ditt arbete går du tidsserierna dag för dag, hitta den bästa ARMA-modellen ARMA p, q och använd sedan modellen för att förutsäga nästa dag s riktning. För att förbättra prestanda använder du de bästa armparametrarna p, q för den tiden med GARCH 1,1 för att skapa en ny modell och använda den för att förutse nästa dags sriktning. Så har du en modell Med 4 parametrar som används i garchFit. Jag använder ett annat GARCH-bibliotek inte i R, det är i C och i det är parametrarna för modellen bara 2 istället för 4. antalet auto-regressiva AR-parametrar och antalet rörelser genomsnittliga MA parametrar. Kan du snälla ge råd om hur du använder din metod i mitt scenario som alltid skapa en GRACH 1,1 utan att överväga ARMA P, Q är annorlunda. Det verkar som att anledningen till att du bara har 2 parametrar för din modell är Eftersom du försöker passa ditt datum till en ARMA-modell utan heteroskedasticitetskomponenten. GarchFit-metoden i fGarch-biblioteket i R tillåter att passa på en generaliserad autoregressiv modell, följaktligen de 4 parametrarna. Knappt relaterad fråga för dig kan du peka mig på C bibliotek du refererar till jag, mysa Om jag är ganska förtjust i C eftersom jag har en hel arkitektur byggd kring den och jag skulle vilja infoga ett datahållningsbibliotek som tillåter att ringa efter en ARMA-modell. Dina inlägg är riktigt bra och har mycket värdefull information jag försökte se vid den dagliga indikatorn csv men det är inte längre upp Skulle jag kunna få en kopia för att inspektera Jag testar för närvarande den fulla arma-koden och vill veta hur man utvärderar resultaten korrekt innan man går vidare till att försöka implementera GARCH-komponenten. Älskade att läsa din blogg om det här Jag använde alternativfunktionen i stället för din mycket långsammare och dyrare ARMAsearch-funktion men den som gav drastiskt olika backtest och gjorde värre än köp-och-hold. Det reproducerade inte dina resultat baserat på din ARMAsökning, men det tog dock mycket vinst runt 08-krisen, precis som din ARMAsökning gjorde, men det gör det inte riktigt jämfört Det var intressant för mig För tillfället läser jag källkoden och jämför det med dig R ARMAsearch Det verkar som om du gjorde en rutnät sökning gör en lokal sökning som förklarar hastigheten. Jag frågar vilken typ av hårdvara du använder nuförtiden. Gör du några GPU-beräkningar. Hej, glad att du gillar min blogg För min användning hittar jag Intel CPU: er för att ge tillräcklig prestanda och parallellisering Hårdvaran jag använder är quad-core i7 med hyperthreadning, vilket gör den nästan 8-vägs. På en sådan maskin tar en ARMA GARCH-backtest mindre än en dag om mitt minne är korrekt i ungefär 50 år med data Det gör allt arbete för att prognosera omedelbara beslut för en viss dag, dvs arbetet som behövs för att förbereda en handelsdag på ungefär ett par timmar. Eftersom du har rätt använder funktionen en annan algoritm som inte analyserar alla Resultat Från min erfarenhet är det inte enkelt att replikera 100 resultat mellan paket. Speciellt när man involverar fördelningen av resterna märkte jag detsamma när jag vid något tillfälle försökte korta rugarchpaketet. Ivan, jag är nybörjare till matematik Jag finansierade Jag diskuterade bara med min professor om användningen av ARMA-modellen i verklig handel förra veckan hittade jag din detaljmodell väldigt intressant Så jag försöker att studera det line-by-line Jag har försökt skriva ut standardfelet tillsammans med förutsägelsen och fann att storleken på standardfelet var långt större än vad jag tänkte förutse om det skulle innebära stor risk för individuellt beslut, vilket begränsar modellen till att fungera på ett stort antal beslut, och kanske inte så när man använder strategin för en kort period tid Hopp kan få din idé Tack. Det är ett problem och det har diskuterats i andra kommentarer redan Om man inte vill använda en sådan metod på grund av brist på statistiska meriter så är det ett alternativt tillvägagångssätt skulle vara att utveckla ett system som använder en metod när den fungerar. Hej ivannp, Stor blogg, tack Jag har använt din kod för lite forskning skulle du vara villig att lägga källkoden för att skapa indikatormatrisen Tack. mclapply tar modeller, en Lista över alla modeller och varje modell är också en lista, och vi har därför en lista över listor som vi vill beräkna som första argument, då kallas det garchAutoTryFit för varje enskild modell från den här listan, som passerar modellen som det första argumentet. När följande rad lägger till en ny modell i listan i garchAuto. models längdmodeller 1 listorder cp, q, r, s, dist dist. Exmodell är också en lista som innehåller den order som nås via order och distributionsåtkomst via distans . Nu tycker jag att det är lite av ett fult sätt att göra saker, men det blir jobbet. Okej det är meningsfullt för mig, men det som faktiskt bygger ll garchAutoTryFit och garchAuto låter dig optimera parametrarna för förutsägelsen du Gör med garchfit Jag vet att data eller xx i koden är returserien men jag kan inte se hur man utför funktionerna utan en initial ll Thanks. ll är konstruerad inuti garchAuto, med hjälp av och några andra parametrar som passerat till rutinen av användaren If är 0,0,1,1 och är 5,5,1,1, garchAuto konstruerar en ll som innehåller alla möjliga variationer inom dessa gränser, till exempel kommer den att innehålla 0,0,1,1, 0,1,1,1 osv. Som standard väljer rutinen den bästa modellen inom 0,0,1 , 1 och 5,5,1,1. Okej tack Jag har försökt att köra garchAuto med en retur-serie som xx-ingången, men bara få NULL. Mycket informativ blogg Jag planerar att använda en liknande strategi med hjälp av utan framgång hittills bara Börja men Vad var din approximativa CAGR med endast ARIMA-modeller utan Garch Hur bestämmer du vilken position du ska köpa, så snart prognosen på avkastningen är positiv och säljer om det är negativt, eller genomför du minimala trösklar för att undvika att sälja eller köpa Om skillnaden är för liten Om så är fallet, hur definierar du dessa tröskelvärden Kan du tacka några av anledningarna till varför du inte tänker på originalserien Är det ett kritiskt tillstånd IYO Kan du ge råd om hur jag kunde fortsätta med min för närvarande misslyckade strategy. ARIMA utan GARCH är inte så bra på S PY Varken på andra ETFs Även med GARCH behöver den ytterligare arbete för att komma fram till något handelskompatibelt. Jag antar att jag kan utföra affärerna i slutet, vilket kan uppnås i det verkliga livet. Det är lättast att handla framtidsöppningarna 24 7 Men man måste backtest det ordentligt. ARMA GARCH används på stationära tidsserier Avkastningen är stationär, slutkurserna är inte. Jag är en nybörjare som vill söka en examen i statistik till världen av finansiella marknader såg jag att du inte gjorde det t vill dela koden några år tillbaka, men om det finns något formulärskript jag kunde titta igenom och använda för att bättre lära mig R, då skulle jag vara mer än tacksam om du skulle kunna skicka det på min väg Tack igen för inlägget Var utmärkt. Lämna ett svar Avbryt reply. ARIMA GARCH Handelsstrategi på S P500 börsindex med hjälp av R. I den här artikeln vill jag visa dig hur du applicerar all kunskap som har erhållits i tidigare serier för analys av tidsserier till en handelsstrategi på S P500 amerikanska börsen index. We kommer s ee att genom att kombinera ARIMA - och GARCH-modellerna kan vi betydligt överträffa en Buy-and-Hold-strategi på lång sikt. Strategiöversikt. Tanken med strategin är relativt enkel, men om du vill experimentera med det, rekommenderar jag starkt att du läser föregående Inlägg på tidsserieanalys för att förstå vad du skulle modifiera. Strategin utförs på rullande basis. För varje dag, n, används de tidigare k dagarna av den olika logaritmiska avkastningen på ett börsindex som ett fönster För anpassning av en optimal ARIMA - och GARCH-modell. Den kombinerade modellen används för att göra en prognos för nästa dag tillbaka. Om förutsägelsen är negativ, förkortas beståndet vid föregående stängning, men om det är positivt, längtar det. Om förutsägelsen är samma riktning som föregående dag då ingenting ändras. För denna strategi har jag använt den maximalt tillgängliga data från Yahoo Finance för S P500 Jag har tagit k 500 men det här är en parameter som kan optimeras för att förbättra E prestanda eller reducera drawdown. The backtest utförs på ett rakt vektoriserat sätt med hjälp av R Det har inte implementerats i Python event-driven backtester som ännu. Därför kan prestanda som uppnåtts i ett verkligt handelssystem sannolikt vara något mindre än du kanske Uppnå här på grund av kommission och slippa. Strategi Genomförande. För att genomföra strategin kommer vi att använda en del av koden som vi tidigare skapat i tidsserieanalysartikeln och några nya bibliotek inklusive rugarch som har föreslagits för mig Av Ilya Kipnis över på QuantStrat Trader. Jag ska gå igenom syntaxen i ett steg för steg och sedan presentera den fullständiga implementeringen i slutet, samt en länk till min dataset för ARIMA GARCH-indikatorn jag har inkluderat den senare eftersom det har tagit mig ett par dagar på min dekstop-dator för att generera signalerna. Du borde kunna replikera mina resultat i helhet eftersom själva koden inte är för komplex, även om det tar Någon tid för att simulera om du utför det fullständigt. Den första uppgiften är att installera och importera de nödvändiga biblioteken i R. Om du redan har installerade biblioteken kan du helt enkelt importera dem. Med det gjort kommer du att tillämpa strategin på S P500 Vi kan använda quantmod för att få data som går tillbaka till 1950 för indexet Yahoo Finance använder symbolen GPSC. We kan sedan skapa den olika logaritmiska avkastningen av slutkursen på S P500 och ta bort det ursprungliga NA-värdet. Vi behöver Skapa en vektor, prognoser för att lagra våra prognosvärden på specifika datum Vi ställer längden för längden lika med längden på handelsdata vi har minus k, fönstrets längd. I det här skedet behöver vi slingra igenom varje dag i handelsdata Och passa en lämplig ARIMA - och GARCH-modell till rullfönstret med längd k Eftersom vi försöker 24 separata ARIMA-passar och passar en GARCH-modell, kan indikatorn ta en lång tid att generera. Vi använder index d som en looping variabel och loop från k till längden på handelsdata. Vi skapar sedan rullande fönster genom att ta tillbaka S P500 och välja värdena mellan 1 d och kd, där k 500 för denna strategi. Vi använder samma procedur som i ARIMA-artikeln för att söka Genom alla ARMA-modeller med p in och q in, med undantag för p, q 0.We wrap arimaFit-samtalet i ett R tryCatch undantagshanteringsblock för att säkerställa att om vi inte får en passform för ett visst värde p och q , vi ignorerar det och går vidare till nästa kombination av p och q. Notera att vi ställer in det integrerade värdet av d 0 det här är en annan d till vår indexeringsparameter och som sådan är vi verkligen anpassade till en ARMA-modell snarare än en ARIMA. Loopproceduren ger oss den bästa passande ARMA-modellen i form av Akaike Information Criterion, som vi sedan kan använda för att mata in till vår GARCH-modell. I nästa kodblock kommer vi att använda rugarchbiblioteket med GARCH 1,1-modellen Syntaxen för detta kräver att vi ställer in en ugarchspec-specifikation objekt som tar en modell för variansen och medelvärdet Variansen tar emot GARCH 1,1-modellen medan medelvärdet tar en ARMA p, q-modell, där p och q är valda ovan. Vi väljer också den sged-fördelningen för felen. När vi Har valt specifikationen vi utför själva montering av ARMA GARCH med kommandot ugarchfit, vilket tar specifikationsobjektet, K-returneringen av S P500 och en numerisk optimeringslösare. Vi har valt att använda hybrid som försöker olika lösare för att öka Sannolikheten för konvergens. Om GARCH-modellen inte konvergerar så ställer vi helt enkelt in dagen för att producera en lång prediktion, vilket tydligt är ett gissning. Men om modellen konvergerar så matar vi ut datum och morgondag s prediktionsriktning 1 eller -1 som en sträng vid vilken tid slingan stängs av. För att förbereda utdata för CSV-filen har jag skapat en sträng som innehåller data separerad av ett kommatecken med prognosriktningen för den följande dagen. Penultima Te-steg är att mata ut CSV-filen till disken. Detta gör det möjligt för oss att ta indikatorn och använda den i alternativ backtesting-programvara för vidare analys, om så önskas. Dock finns det ett litet problem med CSV-filen som den står just nu. Filen Innehåller en lista över datum och en förutsägelse för morgondagens riktning Om vi ​​skulle ladda in det här i backtestkoden nedan som det står skulle vi faktiskt introducera en framåtblickande bias eftersom prediktionsvärdet skulle representera data som inte var kända vid tidpunkten för Förutsägelsen. För att kunna redogöra för detta behöver vi helt enkelt flytta det förutspådda värdet en dag framåt. Jag har funnit det här att vara enklare med Python Eftersom jag inte vill antar att du har installerat några speciella bibliotek som pandaer, har jag hålls den till ren Python. Här är det korta skriptet som utför den här proceduren Försäkra dig om att den körs i samma katalog som filen. I den här punkten har vi nu den korrigerade indikeringsfilen lagrad i Eftersom det här tar en stor del av tid att beräkna har jag försett hela filen här för att ladda ner yourself. Strategy Results. Now att vi har genererat vår indikator CSV-fil måste vi jämföra dess prestanda till Buy Hold. We läste först i indikatorn från CSV-filen och Lagra den som spArimaGarch. We skapar sedan ett skärningspunkt för datum för ARIMA GARCH-prognoserna och den ursprungliga uppsättningen avkastning från S P500. Vi kan sedan beräkna avkastningen för ARIMA GARCH-strategin genom att multiplicera prognostecknet eller - med själva avkastningen . När vi har avkastningen från ARIMA GARCH-strategin kan vi skapa aktiekurvor för både ARIMA GARCH-modellen och Buy Hold Finally, vi kombinerar dem i en enda datastruktur. För det första kan vi använda kommandot xyplot för att plotta båda aktiekurvorna på Samma kurva. Aktiekurvan fram till den 6 oktober 2015 är enligt följande. Kvalitetskurvan för ARIMA GARCH-strategin mot Buy Hold för S P500 från 1952. Som du kan se, har ARIMA GARCH-strategin över 65 år haft en hög grad Rformed Buy Hold Men du kan också se att majoriteten av vinsten uppstod mellan 1970 och 1980 Observera att kurvens volatilitet är ganska minimal fram till början av 80-talet, vid vilken tidpunkt volatiliteten ökar betydligt och den genomsnittliga avkastningen är mindre imponerande. Det är klart att kapitalkurvan lovar stor prestanda under hela perioden. Men skulle den här strategin verkligen ha varit förhandlingsbar. Först och främst, låt oss överväga att ARMA-modellen bara publicerades 1951. Det var inte riktigt mycket utnyttjat förrän 1970-talet när Box Jenkins diskuterade det i sin bok. För övrigt upptäcktes ARCH-modellen inte offentligt fram till början av 80-talet av Engle och GARCH själv publicerades av Bollerslev 1986. För det tredje har denna backtest faktiskt genomförts på ett börsindex och not a physically tradeable instrument In order to gain access to an index such as this it would have been necessary to trade S P500 futures or a replica Exchange Traded Fund ETF such as SPDR. Henc e is it really that appropriate to apply such models to a historical series prior to their invention An alternative is to begin applying the models to more recent data In fact, we can consider the performance in the last ten years, from Jan 1st 2005 to today. Equity curve of ARIMA GARCH strategy vs Buy Hold for the S P500 from 2005 until today. As you can see the equity curve remains below a Buy Hold strategy for almost 3 years, but during the stock market crash of 2008 2009 it does exceedingly well This makes sense because there is likely to be a significant serial correlation in this period and it will be well-captured by the ARIMA and GARCH models Once the market recovered post-2009 and enters what looks to be more a stochastic trend, the model performance begins to suffer once again. Note that this strategy can be easily applied to different stock market indices, equities or other asset classes I strongly encourage you to try researching other instruments, as you may obtain substantia l improvements on the results presented here. Now that we ve finished discussing the ARIMA and GARCH family of models, I want to continue the time series analysis discussion by considering long-memory processes, state-space models and cointegrated time series. These subsequent areas of time series will introduce us to models that can improve our forecasts beyond those I ve presented here, which will significantly increase our trading profitability and or reduce risk. Here is the full listing for the indicator generation, backtesting and plotting. And the Python code to apply to before reimporting. Just Getting Started with Quantitative Trading.

No comments:

Post a Comment