ARIMA + GARCH Trading Strategie op die SP500 Stock Market Index Gebruik R Deur Michael Saal-Moore op 7 Oktober 2015 In hierdie artikel wil ek om jou te wys hoe om al toepassing van die kennis wat in die vorige tydreeksanalise poste 'n handel strategie op die SP500 Amerikaanse aandelemark-indeks. Ons sal sien dat deur die kombinasie van die ARIMA en GARCH modelle kan ons aansienlik oortref n "Koop-en-hou" benadering oor die lang termyn. strategie Oorsig Die idee van die strategie is relatief eenvoudig, maar as jy wil om te eksperimenteer met dit Ek hoogs stel voor die lees van die vorige poste op tydreeksanalise ten einde te verstaan wat jy sou verander! Die strategie is uitgevoer op 'n "rollende" basis: Vir elke dag, $ N $, word die vorige $ k $ dae van die differenced logaritmiese opbrengste van 'n aandelemark-indeks gebruik word as 'n venster vir pas 'n optimale ARIMA en GARCH model. Die gekombineerde model word gebruik om 'n voorspelling te maak vir die volgende dag terugkeer. As die voorspelling is negatief die voorraad kortsluiting by die vorige noue, terwyl as dit positief dit verlang. As die voorspelling is dieselfde rigting as die vorige dag dan is daar niks verander. Om hierdie strategie het ek gebruik om die maksimum beskikbare data van Yahoo Finansies vir die SP500. Ek het $ k = 500 $ geneem, maar dit is 'n parameter wat gebruik kan word new ten einde prestasie te verbeter of onttrekking verminder. Die backtest word in 'n eenvoudige gevectoriseerd mode gedra met behulp van R. Dit het nie in die Python-gebeurtenis gedrewe backtester geïmplementeer as van nog. Vandaar die prestasie behaal in 'n ware handel stelsel sal waarskynlik effens minder as wat jy hier kan bereik, as gevolg van kommissie en glip. strategie-implementering Om die strategie gaan ons 'n paar van die kode wat ons voorheen geskep in die tydreeksanalise artikel reeks asook 'n paar nuwe biblioteke insluitend rugarch gebruik te implementeer. , wat aan my voorgestel deur Ilya Kipnis oor te QuantStrat Trader. Ek gaan deur die sintaksis in 'n stap-vir-stap mode en dan bied die volle implementering aan die einde, sowel as 'n skakel na my dataset vir die ARIMA + GARCH aanwyser. Ek het die laaste ingesluit omdat dit vir my 'n paar dae geneem het op my desktop rekenaar na die seine genereer! Jy moet in staat wees om my resultate te herhaal in geheel as die kode self is nie te ingewikkeld, maar dit beteken 'n geruime tyd om na te boots as jy dit uit te voer in volle te neem. Die eerste taak is om te installeer en voer die nodige biblioteke in R: As jy reeds die biblioteke geïnstalleer kan jy eenvoudig die invoer van hulle: Met dit klaar is gaan die strategie van toepassing is op die SP500. Ons kan gebruik quantmod om data terug na 1950 gaan vir die indeks te verkry. Yahoo Finansies gebruik die simbool "^ GPSC". Ons kan dan skep die differenced logaritmiese opbrengste van die "Slotkoers" van die SP500 en stroop uit die aanvanklike NA waarde: Ons moet 'n vektor te skep, voorspellings ons vooruitskouing waardes te stoor op spesifieke datums. Ons stel die lengte foreLength gelyk aan die lengte van die handel data te wees het ons minus $ k $, die venster lengte: Op hierdie stadium moet ons lus deur elke dag in die handel data en pas 'n toepaslike ARIMA en GARCH model om die rol venster met lengte $ k $. Gegewe dat ons probeer 24 afsonderlike ARIMA rukke en pas 'n GARCH model, vir elke dag, die aanwyser kan 'n lang tyd om te genereer neem. Ons gebruik die indeks d as 'n herhaling veranderlike en lus van $ k $ om die lengte van die handel data: Ons skep dan die rol venster deur die SP500 opbrengste en die kies van die waardes tussen $ 1 + D $ en $ k + D $, waar $ k = 500 $ vir hierdie strategie: Ons gebruik dieselfde prosedure as in die ARIMA artikel te soek deur al ARMA modelle met $ p \ in \ $ en $ Q \ in \ $, met die uitsondering van $ p, q = 0 $. Ons draai die arimaFit oproep in 'n R tryCatch hantering van uitsonderings blok om te verseker dat as ons nie 'n geskikte vir 'n bepaalde waarde van $ p $ en $ Q $ doen kry, ons ignoreer dit en beweeg aan na die volgende kombinasie van $ p $ en $ Q $. Let daarop dat ons 'die "geïntegreerde" waarde van $ d = 0 $ (dit is 'n ander $ d $ na ons kruip parameter!) En as sodanig is ons regtig pas 'n ARMA model. eerder as 'n ARIMA. Die herhaling prosedure sal ons die "beste" pas ARMA model, in terme van die Akaike Inligting Criterion, wat ons dan kan gebruik om in te voer om ons GARCH model: In die volgende kode blok gaan ons die rugarch biblioteek gebruik, met die GARCH (1,1) model. Die sintaksis vir hierdie vereis dat ons die opstel van 'n ugarchspec spesifikasie voorwerp wat 'n model neem vir die variansie en die gemiddelde. Die variansie ontvang die GARCH (1,1) model, terwyl die gemiddelde duur 'n ARMA (p, q) model, waar $ p $ en $ Q $ hierbo gekies. Ons kies ook die SGED verspreiding vir die foute. Sodra ons die spesifikasie gekies ons uit te voer die werklike pas van ARMA + GARCH met behulp van die ugarchfit opdrag, wat die spesifikasie voorwerp, die $ k $ opbrengste van die SP500 en 'n numeriese optimalisering oplosser neem. Ons het gekies om baster gebruik. wat probeer verskillende solvers ten einde die waarskynlikheid van konvergensie verhoog: As die GARCH model nie konvergeer dan ons eenvoudig gestel die dag na 'n "lang" voorspelling, wat duidelik 'n raaiskoot te produseer. Maar, as die model nie konvergeer dan ons uitset die datum en voorspelling rigting môre (1 of -1) as 'n string op watter punt die lus is afgesluit. Met die oog op die uitset vir die CSV berei het ek 'n string wat die data geskei deur 'n komma met die voorspelling rigting vir die daaropvolgende dag bevat geskep: Die voorlaaste stap is om uitset die CSV op skyf. Dit stel ons in staat om die aanwyser te neem en gebruik dit in alternatiewe back testing sagteware vir verdere ontleding, as dit so verkies: Daar is egter 'n klein probleem met die CSV soos dit nou staan. Die lêer bevat 'n lys van datums en 'n voorspelling vir rigting van môre. As ons hierdie laai in die backtest kode hieronder soos dit nou is, sou ons eintlik die bekendstelling van 'n blik lig vooroordeel omdat die voorspellingswaarde data nie bekend ten tye van die voorspelling sal verteenwoordig. Ten einde tot verantwoording vir hierdie moet ons net tot die voorspelde waarde eendag vorentoe te beweeg. Ek het hierdie gevind meer eenvoudig met Python te wees. Sedert ek wil nie aanvaar dat jy 'n spesiale biblioteke (soos pandas) het geïnstalleer, het ek dit gehou om suiwer Python. Hier is die kort script wat hierdie proses voer. Maak seker om dit uit te voer in dieselfde gids as die forecasts. csv lêer: Op hierdie punt het ons nou die gekorrigeer aanwyser lêer gestoor in forecasts_new. csv. Aangesien dit neem 'n aansienlike bedrag van die tyd te bereken, het ek die volle lêer verskaf hier vir jou om jouself af te laai: strategie Resultate Noudat ons ons aanwyser CSV gegenereer moet ons sy prestasie vergelyk met "Koop Hou". Ons lees in die eerste plek in die aanwyser van die CSV en stoor dit as spArimaGarch: Ons skep dan 'n kruising van die datums vir die ARIMA + GARCH voorspellings en die oorspronklike stel opgawes van die SP500. Ons kan dan bereken die opbrengste vir die ARIMA + GARCH strategie deur te vermenigvuldig die vooruitsig teken (+ of -) met die terugkeer self: Sodra ons die opbrengs van die ARIMA + GARCH strategie wat ons kan aandele kurwes vir beide die ARIMA + GARCH model te skep en "Koop Hou". Ten slotte, kombineer ons dit in 'n enkele datastruktuur: Ten slotte, kan ons die xyplot opdrag gebruik om aandele kurwes op dieselfde plot Plot: Die aandele kurwe tot 6 Oktober 2015 is soos volg: Equity kurwe van ARIMA + GARCH strategie vs "Koop Hou" vir die SP500 vanaf 1952 Soos jy kan sien, oor 'n tydperk van 65 jaar, die ARIMA + GARCH strategie aansienlik beter gevaar as "Koop Hou". Jy kan egter ook sien dat die meerderheid van die wins plaasgevind tussen 1970 en 1980. Let daarop dat die wisselvalligheid van die kurwe is baie minimaal tot in die vroeë 80's, waar aansienlik wys die wisselvalligheid stygings en die gemiddelde opbrengs is minder indrukwekkend. Dit is duidelik dat die aandele kurwe beloof groot prestasie oor die hele tydperk. Tog sou hierdie strategie regtig verhandelbaar nie? In die eerste plek, laat ons kyk na die feit dat die ARMA model net is gepubliseer in 1951. Dit is nie regtig wyd aangewend tot die 1970's toe Box Jenkins bespreek dit in hul boek. In die tweede plek is die boog model nie (in die openbaar!) Ontdek tot in die vroeë 80's, deur Engle, en GARCH self is in 1986 gepubliseer deur Bollerslev. Derdens, hierdie "backtest" het eintlik al uit op 'n aandelemark-indeks en nie 'n fisies verhandelbare instrument gedra. Ten einde toegang tot 'n indeks te verkry soos hierdie sou dit nodig gewees het om SP500 termynkontrak of 'n replika Beursverhandelde fonds (ETF) soos SPDR handel. Vandaar is dit regtig wat geskik is vir sulke modelle is van toepassing op 'n historiese reeks voor hul uitvinding? 'N Alternatief is om te begin die toepassing van die modelle meer onlangse data. In feite, kan ons die prestasie oorweeg in die laaste tien jaar, vanaf 1 Januarie 2005 tot vandag: Equity kurwe van ARIMA + GARCH strategie vs "Koop Hou" vir die SP500 vanaf 2005 tot vandag Soos jy kan sien die aandele kurwe bly onder 'n Koop Hou strategie vir byna 3 jaar, maar tydens die ineenstorting van die aandelemark van 2008/2009 is dit nie buitengewoon goed. Dit maak sin, want daar is waarskynlik 'n beduidende korrelasie in hierdie tydperk wees en dit sal goed gevang deur die ARIMA en GARCH modelle. Sodra die mark herstel ná 2009 en gaan wat lyk meer 'n stogastiese tendens wees, die model prestasie begin weer ly. Let daarop dat hierdie strategie maklik toegepas kan word om verskillende aandelemark indekse, aandele of ander bateklasse. Ek raai jy om te probeer navors ander instrumente, soos jy aansienlike verbeterings op die hier aangebied resultate kan behaal. Volgende stappe Noudat ons klaar bespreek die ARIMA en GARCH familie van modelle, ek wil die tydreeksanalise bespreking deur die oorweging van 'n lang-geheue prosesse, state-ruimte modelle en gecoïntegreerd tydreekse voortgaan. Hierdie daaropvolgende dele van tydreekse sal ons bekend te stel aan modelle wat ons voorspellings verder as dié wat ek hier aangebied, wat aansienlik sal verhoog ons handel winsgewendheid en / of te verminder die risiko kan verbeter. Hier is die volledige lys vir die aanwyser geslag, back testing en plot:
No comments:
Post a Comment