Wednesday, October 19, 2016

Bewegende Gemiddelde In Python

Vooruitskatting en Python Deel 1 8211 Moving Gemiddeldes Ek wil skop af 'n reeks wat verskillende vooruitskatting metodologieë neem en demonstreer dit deur middel van Python. Om die 8216ball rolling8217 Ek wil begin met bewegende gemiddeldes en ideaal eindig die reeks op die voorspelling met ARIMA modelle (outoregressiewe geïntegreerde bewegende gemiddelde) kry. My doel is om hierdie inhoud 8216light8217 op teorie en wiskunde het en eerder te konsentreer op aansoek kode. Ek het hierdie laataand skryf, so voel asseblief vry om my ping as ek enige foute. Ek verwys dikwels na die voorspelde Y as Y hoed, as jy nie bewus is, in die vergelyking die hoed simbool is geleë oor die voorspelde Y. Vooruitskatting met Gemiddeld bewegende gemiddeldes Moving moet aa n wonderlike plek om elke handboek begin ek begin met die verskuiwing wees gemiddeldes om die grondslag te lê. Die formules is eenvoudig en pret. Vergelyking 1: Moving Gemiddeldes vergelyking Die bewegende gemiddeldes model bere die gemiddelde van elke waarneming in periodes k. In my kode en resultate sal ek met 'n 12 tydperk bewegende gemiddelde, dus K12. Y hoed (T1) is die voorspelling waarde vir volgende tydperk en Y (t) is die werklike waarde by periode t. 'N tydperk kan ure, dae, weke, maande, jaar, ens Sedert die model is dieselfde, ongeag, ek is nie van plan om 'n eenheid te spesifiseer. yvalues ​​is 'n subset van al die werklike Y waardes in die kode gebring. Stel my 8216k8217 (periodes) gelyk aan 12 as ek gaan 'n 12 tydperk bewegende gemiddelde te bereken. Die kode herhaal oor die waarnemings (N), word bereken dat die gemiddelde vir elke 12 tydperk reeks (K12) en ken die berekening van die yhat lys. In die geval dat jy opgemerk, yfull is my volledige lys van Y waardes, waar yvalues ​​is 'n subset wat is geneutraliseer deur k. meer inligting oor hierdie hieronder in die gedeelte 8216Offsetting Y subset List8217. Plot Werklike en Voorspelling Voorspelling 1. 12 tydperk bewegende gemiddelde Meet Voorspelling Foute Ek het my voorspelling, maar is dit 'n goeie Visueel die voorspelling volg die werklike waardes nogal goed, maar hoe kan ek die kwaliteit van hierdie voorspelling te meet en dan vergelyk dit teen voorspellings afgelei met behulp van verskillende metodes. Een manier om 'n voorspelling te meet is deur die meting van die foute (ook bekend as residue, Y werklike 8211 Y hoed) Ek verkies om die volgende metodes vir die meting voorspelling foute in hierdie bespreking te sluit. Beteken Squared Fout (MSE) wat die gemiddeldes van die kwadraat foute meet (verskil van Y en Y hoed). MSE is gerapporteer in dieselfde eenhede as die waardes wat geskat (Y), dus kan dit gesê word dat 'n voorspelling is af deur 821610.000 units8217. Hierdie fout kan gesien word as klein indien die werklike waardes wissel in die miljarde eenhede. Die fout kan gesien word as 'n groot as die werklike waardes net wissel in die 108217s duisende. 'N algemene probleem met die MSE is dat dit swaar gewigte groot uitskieters inflating die fout meting. Die wortel van gemiddelde Squared Fout neem die vierkantswortel van die MSE. RMSE verteenwoordig die monster standaardafwyking van die residue. Die gemiddelde absolute persentasiefout (Mape) is 'n alternatiewe metode wat verslae uit die fout as 'n persentasie. In plaas daarvan om te sê die voorspelling is af deur 8216x units8217, kan ons sê dat 'n voorspelling is af deur 4. Ek gebruik dikwels meer as een metode wanneer vergelyk voorspellings as elkeen het beperkings, wat een of ander tyd kan lei tot vals afmetings deur een of twee metodes. Vergelyking 2 amp 3: MSE en Mape vergelyking 3: RMSE Voorspelling 1: Fout Metings MSE: 630,649.39 RMSE: 794,13 kaart: 10,22 Verrekening Y subset Lys Dit is interessant dat die bogenoemde voorspelling (voorspelling 1) is nie 8216fit8217 die werklike waardes meer effektief 8211 dit is 'n eenvoudige data-reeks, ek sou verwag dat die residue om kleiner wees. Om die Y hoed waardes vir die tydperk 12 bewegende gemiddelde model bereken, ek gebruik 'n formule wat tyd (t) 12 periodes voor beweeg (sien vergelyking 1 hierbo). Dit was hoe ek oorspronklik geleer en het voorbeelde in handboeke op my kantoordeur rak. Hierdie kode skep yfull van die gelaaide data lêer dan skep 'n subset lys begin 12 periodes in. Why8230 omdat ons die eerste 12 tydperk sal gebruik om afskop ons bewegende gemiddelde skatting. Die voorspelling waardes egter nie 8216fit8217 die werklike waardes soveel as wat ek wil. Hulle is óf onder voorspel of meer voorspel. Nog 'n metode vir die bewegende gemiddelde vooruitskatting stel die aanvang van die voorspelling op die middelpunt van 8216k8217. Voorspelling 1: Data Gebruik die middelpunt van 8216k8217 Voorspelling 2: 12 tydperk bewegende gemiddelde vooruitskatting 2: Fout Metings MSE: 7,350.78 RMSE: 85,74 kaart: 0.86 Vergelyk die voorspelling fout metings van voorspel 1 met voorspel 2 gee 'n aanduiding dat die tweede metode beter pas ons data. However8230 Daar is 'n baie inhoud beskikbaar op gesentreerde Bewegende Gemiddeldes wat volle besonderhede van hoe om die middelpunt waardes bereken vir al / vreemde tydperke sal gee. Ek is nie daardie bron ek net wys hoe die vermindering van die lag van die gemiddeldes beter in lyn ons Y hoede met die werklike en verbeter die fout maatreëls. Die kode is byna identies, behalwe die subset lys (yvalues) geskep 6 periodes in en stop 6 periodes kort. Gemiddeld die data van die middelpunt af verminder die bedrag van bo / onder voorspel soos in voorspel 1. Voorspelling 2: Data wanneer beweeg gemiddeldes is minder geskik Moving gemiddelde vooruitskatting begin om werklik misluk wanneer die data reeks het 'n sikliese komponent of seisoenaliteit. Hieronder is die dieselfde 12 tydperk bewegende gemiddelde Python-kode teen 'n sikliese data reeks. Voorspelling 3: 12 tydperk bewegende gemiddeldes voorspel 3: Fout Metings MSE: 5,386,003,002.91 RMSE: 73,389.39 kaart: 48,79 Die plot en die berekende fout meet beide dui daarop dat bewegende gemiddeldes is nie 'n goeie passing vir hierdie reeks. Ek sal dit dieselfde reeks met ander voorspellingsmodelle te gebruik om tegnieke wat pick-up siklusse doen in die data. numpy. average Axis waarlangs om gemiddeld 'n toon. As een. gemiddelde gedoen oor die plat skikking. gewigte. arraylike, opsioneel 'n verskeidenheid van gewigte wat verband hou met die waardes in 'n. Elke waarde in 'n bydrae lewer tot die gemiddelde volgens sy verwante gewig. Die gewigte array kan óf 1-D (in welke geval moet sy lengte van die grootte van 'n langs die gegewe as wees) of van dieselfde vorm as 'n. As weightsNone. dan sal al die data in 'n word aanvaar dat 'n gewig gelyk aan een het. teruggekeer . Bool, opsionele Standaard is Vals. As dit waar is. die tuple (gemiddelde. sumofweights) teruggestuur, anders net die gemiddelde teruggestuur. As weightsNone. sumofweights is gelykstaande aan die aantal elemente waaroor die gemiddelde geneem. gemiddelde, sumofweights. arraytype of dubbel terug die gemiddelde langs die gespesifiseerde as. Wanneer teruggekeer waar is. terugkeer 'n tuple met die gemiddelde as die eerste element en die som van die gewigte as die tweede element. Die tipe terugkeer is Float as a van heelgetal tipe, anders is dit van dieselfde soort as 'n. sumofweights is van dieselfde soort as die gemiddelde. In my laaste sin Ek het probeer om aan te dui waarom dit help swaai punt fout. As twee waardes is min of meer dieselfde orde van grootte, dan voeg hulle minder presisie verloor as wanneer jy 'n baie groot aantal by 'n baie klein een. Die kode kombineer quotadjacentquot waardes op 'n wyse dat selfs intermediêre somme altyd redelik naby in grootte moet wees, om die drywende punt fout te minimaliseer. Niks is fool proof maar hierdie metode het 'n paar baie swak geïmplementeer projekte in produksie gered. â € Mayur Patel 15 Desember 14 by 17:22 Alleo: In plaas van doen 'n toevoeging per waarde, you39ll doen twee. Die bewys is dieselfde as die bietjie daarby probleem. Maar die punt van hierdie antwoord is nie noodwendig prestasie, maar presisie. Geheue gebruik vir gemiddeld 64-bit waardes sou nie meer as 64 elemente in die kas, so it39s vriendelike in geheue gebruik sowel. â € Mayur Patel 29 Desember 14 by 17:04 UPD: meer doeltreffende oplossings is deur Alleo en jasaarim voorgestel. Jy kan np. convolve gebruik vir die volgende: Die modus argument spesifiseer hoe om die rande te hanteer. Ek het die geld af hier, want ek dink dis hoe die meeste mense verwag hardloop gemiddelde om te werk, maar jy kan ander prioriteite het. Hier is 'n plot wat die verskil tussen die modes illustreer: Jy kan 'n lopende bereken bedoel met: Gelukkig Numpy sluit 'n oprollen funksie wat ons kan gebruik om dinge te bespoedig. Die lopende gemiddelde is gelykstaande aan convolving x met 'n vektor wat N lang, met alle lede gelyk aan 1 / N. Die Numpy implementering van oprollen sluit die begin verbygaande, sodat jy die eerste N-1 punte te verwyder: Op my rekenaar, die vinnige weergawe is 20-30 keer vinniger, afhangende van die lengte van die insette vektor en grootte van die gemiddelde venster . Let daarop dat oprollen insluit 'n dieselfde modus wat lyk asof dit die begin verbygaande kwessie moet aanspreek, maar dit split dit tussen die begin en einde. Dit verwyder die verbygaande van die einde, en die begin doesn39t een het. Wel, ek dink it39s 'n kwessie van prioriteite, ek don39t dieselfde aantal resultate moet op die koste om 'n helling na nul dat isn39t daar in die data. BTW, hier is 'n opdrag aan die verskil tussen die modes vertoon: modes (39full39, 39same39, 39valid39) plot (oprollen (kinders ((200,)), kinders ((50,)) 4750, modem)) vir m in modes as (-10, 251, -.1, 1.1) legende (modes, loc39lower center39) (met pyplot en Numpy ingevoer). â € lapis 24 Maart 14 by 13:56 I39m altyd vererg deur seinverwerking funksie wat uitset seine van verskillende vorm terug te keer as die insetseine wanneer beide insette en uitsette is van dieselfde aard (bv beide temporale seine). Dit breek die korrespondensie met verwante onafhanklike veranderlike (bv tyd, frekwensie) maak plot of vergelyking nie 'n direkte saak. In elk geval, as jy die gevoel te deel, kan jy die laaste reëls van die voorgestelde funksie as ynp. convolve (w / w. sum (), S, mode39same39) terugkeer ywindowlen-1 :-( windowlen-1) uitvoering maak Christelike verander O39Reilly 25 Augustus 15 by 19:56 lapis Ja, maar kan sê dat jy cumsum metode gebruik op die eerste blok en stoor jou rollende gemiddelde skikking vir die volgende blok. elke tik daarna moet jy net die nuutste bewegende gemiddelde waarde voeg tot jou rollende verskeidenheid in die stoor. Die gebruik van hierdie metode you39re nie herbereken dinge you39ve reeds bereken: Op die eerste regmerkie cumsum jy daarna jou net voeg die quotmean van die laaste tydperk elementsquot wat vinniger vir alle daaropvolgende bosluise is 2x. â € litepresence 10 Junie by 12: 29We voorheen bekend hoe om bewegende gemiddeldes met Python skep. Hierdie handleiding sal 'n voortsetting van hierdie onderwerp wees. 'N bewegende gemiddelde in die konteks van statistieke, ook bekend as 'n rollende / hardloop gemiddelde, is 'n tipe van eindige impulsrespons. Let8217s plot x teen die bewegende gemiddelde van y dat ons yma sal roep:: In ons vorige tutoriaal het ons die waardes van die skikkings x en y geplot Eerstens let8217s gelyk die lengte van beide skikkings: En om dit in konteks te wys: Die gevolglike grafiek: Om te help verstaan ​​dit, let8217s plot twee verskillende verhoudings: x vs y en x vs mag: die bewegende gemiddelde hier is die groen plot wat begin by 3: Deel hierdie: Soos hierdie: Verwante Post navigasie Laat 'n antwoord Kanselleer antwoord Baie nuttig Ek wil graag die laaste deel lees op groot datastelle Hoop dit sal soon8230 d bloggers kom soos volg: back testing n bewegende gemiddelde Crossover in Python met pandas Deur Michael Saal-Moore op 21 Januarie 2014 in die vorige artikel oor Navorsing back testing omgewings Python Met Pandas ons geskep 'n objek-georiënteerde navorsing-gebaseerde back testing omgewing en dit getoets op 'n ewekansige vooruitskatting strategie. In hierdie artikel sal ons gebruik van die masjinerie wat ons lei om navorsing te doen oor 'n werklike strategie, naamlik die bewegende gemiddelde Crossover op AAPL maak. Bewegende gemiddelde Crossover Strategie Die bewegende gemiddelde Crossover tegniek is 'n uiters bekende simplistiese momentum strategie. Daar word dikwels beskou as die Hello World voorbeeld vir kwantitatiewe handel. Die strategie as hier uiteengesit is slegs lang. Twee afsonderlike eenvoudige bewegende gemiddelde filters word geskep, met wisselende Terugblik tydperke, van 'n bepaalde tyd reeks. Seine na die aankoop van die bate vind plaas wanneer die korter Terugblik bewegende gemiddelde hoe langer bewegende gemiddelde oorskry Terugblik. As die langer gemiddelde daarna die korter gemiddelde oorskry, word die bate verkoop terug. Die strategie werk goed wanneer 'n tydreeks betree 'n tydperk van 'n sterk tendens en dan omkeer stadig die tendens. Vir hierdie voorbeeld het ek gekies Apple, Inc (AAPL) as die tyd reeks, met 'n kort Terugblik van 100 dae en 'n lang Terugblik van 400 dae. Dit is die inligting wat deur die Zipline algoritmiese handel biblioteek voorbeeld. So as ons wil ons eie backtester implementeer moet ons verseker dat dit die resultate wedstryde in Zipline, as 'n basiese wyse van bevestiging. Implementering Maak seker dat die vorige tutoriaal hier volg. wat beskryf hoe die aanvanklike doel hiërargie vir die backtester is gebou, anders sal die kode hieronder sal nie werk nie. Vir hierdie spesifieke implementering het ek die volgende biblioteke gebruik: Die implementering van macross. py vereis backtest. py van die vorige tutoriaal. Die eerste stap is om die nodige modules en voorwerpe in te voer: Soos in die vorige tutoriaal gaan ons die strategie abstrakte basis klas MovingAverageCrossStrategy produseer oorerf. wat al die besonderhede oor hoe om die seine te genereer bevat wanneer die bewegende gemiddeldes van AAPL kruis oor mekaar. Die voorwerp vereis 'n shortwindow en 'n longwindow waarop te werk. Die waardes is ingestel om die standaard van 100 dae en 400 dae onderskeidelik, wat dieselfde parameters wat in die belangrikste voorbeeld van Zipline is. Die bewegende gemiddeldes is geskep deur die gebruik van die pandas rollingmean funksie op die barsClose sluitingsprys van die AAPL voorraad. Sodra die individu bewegende gemiddeldes is gebou, is die sein reeks wat deur die oprigting van die kolom gelyk aan 1,0 wanneer die kort bewegende gemiddelde is groter as die lang bewegende gemiddelde, of 0.0 anders. Hieruit kan die posisies bestellings gegenereer kan word om handel seine verteenwoordig. Die MarketOnClosePortfolio is subclassed van Portefeulje. wat is gevind in backtest. py. Dit is byna identies aan die wat in die vorige tutoriaal beskryf implementering, met die uitsondering dat die ambagte nou uit op 'n close-to-Close basis gedra, eerder as om 'n Ope-tot-Ope basis. Vir meer inligting oor hoe die Portefeuljekomitee voorwerp gedefinieer, sien die vorige tutoriaal. Ive het die kode in vir volledigheid en om hierdie handleiding te hou self-contained: Noudat die MovingAverageCrossStrategy en MarketOnClosePortfolio klasse is gedefinieer, sal 'n hooffunksie word geroep om al die funksies saam te bind. Daarbenewens die prestasie van die strategie deur middel van 'n plot van die aandele kurwe sal ondersoek word. Die pandas DataReader voorwerp downloads OHLCV pryse van AAPL voorraad vir die tydperk 1 Januarie 1990 tot 1 Januarie 2002, op watter punt die seine DataFrame is geskep om die lang-net seine op te wek. Vervolgens die portefeulje is gegenereer met 'n 100,000 dollar aanvanklike kapitaalbasis en die opbrengs word bereken op die aandele kurwe. Die finale stap is om matplotlib gebruik om 'n twee-syfer plot van beide AAPL pryse, oorgetrek met die bewegende gemiddeldes plot en koop / verkoop seine, asook die aandele kurwe met dieselfde koop / verkoop seine. Die plot kode is geneem (en aangepas) van die Zipline implementering voorbeeld. Die grafiese uitset van die kode is soos volg. Ek het gebruik gemaak van die IPython Plak opdrag om hierdie direk in die IPython konsole sit terwyl hy in Ubuntu, sodat die grafiese uitset in die lig bly. Die pienk upticks verteenwoordig die aankoop van die voorraad, terwyl die swart downticks dit terug verteenwoordig verkoop: Soos gesien kan word van die strategie verloor geld oor die tydperk, met vyf heen-en terugreis ambagte. Dit is nie verbasend gegewe die gedrag van AAPL oor die tydperk, wat op 'n effense afwaartse neiging, gevolg deur 'n beduidende toename begin in 1998. Die Terugblik tydperk van die bewegende gemiddelde seine is redelik groot en die effek daarvan die wins van die finale handel , wat anders die strategie winsgewend moontlik gemaak. In die daaropvolgende artikels sal ons 'n meer gesofistikeerde middel van die ontleding van die prestasie, sowel as die beskrywing van hoe om die Terugblik tydperke van die individuele bewegende gemiddelde seine te optimaliseer skep. Michael Saal-Moore Mike is die stigter van QuantStart en is betrokke by die kwantitatiewe finansiële sektor vir die afgelope vyf jaar, in die eerste plek as 'n quant ontwikkelaar en later as 'n quant handelaar konsultasie vir verskansingsfondse.


No comments:

Post a Comment