Thursday, October 13, 2016

Bewegende Gemiddelde Pandas Dataframe

Pandas Kolom Bedryf (basiese wiskunde bedrywighede en bewegende gemiddeldes) In hierdie Pandas met Python handleiding video met voorbeeld kode, dek ons ​​'n paar van die vinnige en basiese operasies wat ons kan doen op ons data. Sê jy 'n datastel wat jy wil om 'n bewegende gemiddelde voeg by, of miskien het jy wil 'n paar wiskunde berekeninge gebaseer op 'n paar stukkies van data in ander kolomme doen, en voeg by die gevolg van 'n nuwe kolom. Kom ons kyk hoe ons dit kan doen: Al die bogenoemde moet verstaan ​​word, aangesien sy reeds gedek tot op hierdie punt. Nou, kan 'n nuwe kolom, noem dit H-L, waar die data in die kolom is die gevolg van die hoë prys minus die lae prys. Hier, net soos jy sou doen met 'n woordeboek, ons definieer 'n nuwe voorwerp in ons Pandas data, noem dit H-L. Van daar, sê ons die waarde van hierdie H-L voorwerp is (df. High - df. Low). Dit is nog nie laat optrek, maar dit is eintlik baie interessant dat ons in staat is om dit te doen, maar dit kan ook verwarrend wees. Ons kan ook sê dfH-L dfHigh - dfLow, maar omdat Pandas is so swaar objekgerigte, was in staat om ook verwys dit bloot soos 'n voorwerp Dit is aan jou hoe jy wil om dit te doen. Ek verkies om dit te hanteer soos 'n voorwerp, want dis wat dit is. Na weve hierdie hardloop, kan ons sien deur die druk van die hoof (), wat weve het 'n mooi nuwe kolom bevat die nuwe data Dis netjies, maar wat van verwysing voor data in ander kolomme Kan ons dit doen Ek wil 'n bewegende gemiddelde Seker te doen ons kan. Bewegende gemiddeldes is eintlik gebou in Pandas, genoem rollingmean. Bo, weve gedefinieer nog 'n kolom, baie soos ons kan 'n woordeboek, en het gesê dat die kolom gelyk aan df. rollingmean is () van die beslote prys. Ons tweede parameter hier is die tyd vir hierdie bewegende gemiddelde. Dan het ons net druk 'n sny van die data van die 200 element om die 210. Ons kan nie regtig df. head doen () hier. Ons kon nie, maar die data vir die 100mA wouldnt bereken totdat ons het 100 stukke van data te kan bereken. Nog 'n interessante ingeboude funksie met Pandas is ewenaar (): Met die funksie verskil (), was in staat om die verskil, of verandering te bereken vanaf die vorige waarde, vir 'n kolom. So, daar is 'n paar basiese operasies en 'n begin inleiding tot sommige datamanipulasie en ontleding met Pandas. Ek dink jy waarskynlik sien nou hoe indrukwekkend hierdie module is. Analysis van bewegende gemiddelde Crossover Strategie backtest Returns Die gebruik van Pandas So het die daaglikse opbrengs verspreiding is ver van normaal en uitstallings ooit so effens positief skeef en 'n hoë kurtose (NB skeef van normale verspreiding is 0 en kurtose van normale verspreiding is 3). I8217m gaan om voort te gaan in hierdie stadium 'n bietjie dieper grawe en produseer 'n paar sleutel prestasie-aanwysers (KPI) wat jy gewoonlik sou vind saam met die ontleding van 'n handel strategie opbrengste. Hierdie aren8217t bedoel om volledig te wees nie, maar I8217ll probeer om te tref op die meeste van die groot gebiede. Ek is van plan om die volgende te produseer: 1) geannualiseerde opbrengs 2) Laaste 12 maande terug 3) Volatiliteit 4) Sharpe Ratio 5) Maksimum Onttrekking 6) Calmar verhouding (geannualiseerde opbrengs / Maksimum Onttrekking) 7) Volatiliteit / Maksimum Onttrekking 8) Beste Maand Performance 9) slegste maand Performance 10) van winsgewende Maande amp Nie-winsgewende Maande 11) nommer van winsgewende Maande / Aantal Nie winsgewende maande 12) Gemiddeld maandelikse wins 13) gemiddelde maandelikse verlies 14) Gemiddeld maandelikse wins / gemiddelde maandelikse verlies voor ek gaan Ek gaan na 'n ander vars DataFrame wat ons strategie terugkeer data sal hou op 'n maandelikse basis in plaas van 'n daaglikse basis 8211 dit sal sekere berekeninge makliker later maak vinnig te bou en ons in staat stel om 'n maandelikse opbrengs tafel dit kan geproduseer word deur 8220re - produseer sampling8221 die oorspronklike DataFrame kolom van die daaglikse strategie opbrengste en die opbou van van daar af. Gemiddelde maandelikse wins 3,56 Gemiddelde maandelikse verlies -3,33 gemiddelde maandelikse wins / gemiddelde maandelikse verlies 1,0683 En finally8230just om af te rond en gebruik 'n bietjie meer Pandas DataFrame funksionaliteit ek gaan 'n tafel van maandelikse opgawes te skep. Die eerste stap is om 'n spilpunt tafel te skep en resample dit te skep wat bekend staan ​​as 'n 8220pandas. tseries. resample. DatetimeIndexResampler8221 voorwerp. Sodat ons dit maklik kan manipuleer n bietjie mor, gaan ek hierdie voorwerp terug te omskep in 'n 8220DataFrame8221 met behulp van die 8220.aggregate () 8221 funksie. Ons kan nou die laaste afrondings werk op deur die omskakeling van die indeks dateer uit net die jaar eerder as die volle datum wys, en dan ook die plek van die kolom maand kop (tans in numeriese formaat) met die behoorlike 8220MMM8221 formaat. In die eerste plek moet ons vinnig daal een van die tafel kolomindeks vlakke wat tans die woord 8220Strategy8221 8211 dit sal ons verlaat met 'n tafel met net 'n enkele vlak kolomindeks wat ooreenstem met die heelgetal maand vertoë. Visueel die tafel sal verander van: Nou het ons net na die datum indeks verander om te wys in 'n jaarlikse formaat (YYYY) en die res van die kolomopskrifte maandelikse formaat wys (MMM). Ons is nou links met 'n maandelikse opbrengs tafel wat so lyk: Brilliant Wel, ek dink that8217s genoeg vir nou as hierdie pos is die begin van 'n bietjie lank om te kry. I8217ll 'n think oor die volgende paar dae oor 'n moontlike onderwerp vir my volgende post en kry om te werk aan dit. Dankie vir volgende saam Primêre SidebarBacktesting 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 verskansing fundsputational gereedskap analoog, DataFrame het 'n metode cov te bereken paarsgewyse kovariansies onder die reeks in die DataFrame, ook uitgesluit NA / nul waardes. Die aanvaarding van die vermiste data ontbreek na willekeur dit lei tot 'n skatting vir die kovariansiematriks wat onbevooroordeelde. Maar vir baie toepassings hierdie beraming kan nie aanvaar word nie, want die geskatte kovariansiematriks nie gewaarborg positiewe semi-definitiewe te wees. Dit kan lei tot beraamde korrelasies met absolute waardes wat groter is as een is, en / of 'n nie-omkeerbare kovariansiematriks. Sien Beraming van kovariansiematrikse vir meer besonderhede. DataFrame. cov ondersteun ook 'n opsionele minperiods navraag dat die vereiste minimum aantal waarnemings vir elke paar kolom spesifiseer ten einde 'n geldige gevolg hê. Die gewigte wat in die venster gespesifiseer deur die wintype navraag. Die lys van erkende vorme is: wagon triang Blackman Hamming Bartlett parzen bohman blackmanharris Nuttall barthann Kaiser (moet beta) Gaussiese (moet st) generalgaussian (moet krag, breedte) slepian (behoeftes breedte). Let daarop dat die wagon venster is gelykstaande aan dat (). Vir een of ander windows funksies, moet addisionele parameters gespesifiseer: Vir. sum () met 'n wintype. Daar is geen normalisering gedoen om die gewigte vir die venster. Verbygaande persoonlike gewigte van 1, 1, 1 sal 'n ander resultaat oplewer as verbygaande gewigte van 2, 2, 2. byvoorbeeld. Gee 'n wintype in plaas van uitdruklik spesifiseer die gewigte, die gewigte is reeds genormaliseer sodat die grootste gewig 1. In teenstelling hiermee het die aard van die berekening. mean () is sodanig dat die gewigte is genormaliseer met betrekking tot mekaar. Gewigte van 1, 1, 1 en 2, 2, 2 oplewer dieselfde resultaat. Tyd-bewus Rolling Nuut in weergawe 0.19.0. Nuut in weergawe 0.19.0 is die vermoë om 'n sprong (of omskepbaar) om 'n metode. rolling () en het dit produseer veranderlike grootte vensters gebaseer op die geslaag tyd venster slaag. Vir elke keer punt, dit sluit alle voorafgaande waardes wat binne die aangeduide tyd delta. Dit kan veral nuttig vir 'n nie-gereelde tyd frekwensie indeks wees. Dit is 'n gereelde frekwensie-indeks. Met behulp van 'n parameter heelgetal venster werk te rol langs die venster frekwensie. Vermelding van 'n geneutraliseer kan 'n meer intuïtiewe spesifikasie van die rollende frekwensie. Die gebruik van 'n nie-gereelde, maar nog steeds monotoniese indeks, die rol met 'n heelgetal venster nie dra enige spesiale berekening. Die gebruik van die tyd-spesifikasie genereer veranderlike vensters vir hierdie yl data. Verder het ons nou toelaat dat 'n opsionele op parameter om 'n kolom (eerder as die standaard van die indeks) in 'n DataFrame spesifiseer. Tyd-bewus Rolling teen hersteekproefnemingsmetodes Gebruik. rolling () met 'n tyd-gebaseerde indeks is baie soortgelyk aan hermonstering. Hulle het albei werk en uit te voer reduktiewe bedrywighede op tyd geïndekseer pandas voorwerpe. By die gebruik van. rolling () met 'n verreken. Die verreken is 'n tyd-delta. Neem 'n agter-in-time soek venster, en gemiddelde gee van die waardes in die venster (insluitend die eindpunt, maar nie die begin-punt). Dit is die nuwe waarde op daardie stadium in die resultaat. Dit is veranderlike grootte vensters in die tyd-ruimte vir elke punt van die insette. Jy sal 'n dieselfde grootte gevolg as die insette te kry. By die gebruik van. resample () met 'n verreken. Stel 'n nuwe indeks wat die frekwensie van die verreken. Vir elke frekwensie bin, totaal punte van die insette binne 'n agtertoe-in-time soek venster wat in daardie bin val. Die gevolg van hierdie samevoeging is die uitset vir daardie frekwensie punt. Die vensters is vasgestel grootte grootte in die frekwensie ruimte. Die resultaat sal die vorm van 'n gereelde frekwensie tussen die min en die maksimum van die oorspronklike insette voorwerp het. Op te som. rollende () is 'n tyd-gebaseerde venster operasie, terwyl. resample () is 'n frekwensie-gebaseerde venster operasie. Sentreer Windows by verstek die etikette is ingestel op die regter rand van die venster, maar 'n sentrum navraag beskikbaar sodat die etikette kan ingestel word by die sentrum. Binêre Venster Funksies cov () en CORR () kan bereken beweeg statistieke venster oor twee reekse of 'n kombinasie van DataFrame / Series of DataFrame / DataFrame. Hier is die gedrag in elke geval: twee reekse. bereken die statistiek vir die paring. DataFrame / Series. bereken die statistieke vir elke kolom van die DataFrame met die geslaag Series, dus 'n DataFrame terugkeer. DataFrame / DataFrame. by verstek bereken die statistiek vir wat ooreenstem met die kolom name, terugkeer 'n DataFrame. As die navraag argument pairwiseTrue oorgedra bere dan die stukkie statistiek vir elke paar kolomme, terugkeer 'n paneel wie se items is die betrokke datums (sien die volgende afdeling). Berekening van rollende paarsgewyse kovariansies en korrelasies In finansiële data-analise en ander velde it8217s gemeen bereken kovariansie en korrelasie matrikse vir 'n versameling van tydreekse. Dikwels een is ook geïnteresseerd in bewegende-venster kovariansie en korrelasie matrikse. Dit kan gedoen word deur die verbygaan van die paarsgewyse navraag argument, wat in die geval van DataFrame insette 'n paneel wie se items is die betrokke datums sal oplewer. In die geval van 'n enkele DataFrame argument kan die paarsgewyse argument selfs weggelaat word: ontbrekende waardes geïgnoreer en elke inskrywing word bereken met behulp van die paarsgewyse volledige waarnemings. Sien asseblief die kovariansie afdeling vir voorbehoude wat verband hou met hierdie metode van berekening van kovariansie en korrelasie matrikse. Afgesien van nie met 'n parameter venster, hierdie funksies het dieselfde koppelvlakke as hul. rolling eweknieë. Soos hierbo, die parameters almal aanvaar is: minperiods. drumpel van nie-nul datapunte te vereis. Standaard minimum wat nodig is om statistiek te bereken. Geen Nans sal uitset keer wees minperiods nie-nul datapunte is gesien. sentrum. boolean, of om die etikette in die middel (verstek is Vals) Die opbrengs van die. rolling stel en. expanding metodes 'n NaN nie terugkeer indien daar ten minste minperiods nie-nul waardes in die huidige venster. Dit verskil van cumsum. cumprod. cummax. en koljander. wat terugkeer NaN in die uitset waar 'n NaN teëgekom in die insette. 'N groeiende venster statistiek sal meer stabiel (en minder responsief) as sy rollende venster eweknie wees as die toenemende venster grootte van die relatiewe impak van 'n individu gegee punt af. As 'n voorbeeld, hier is die gemiddelde () uitset van die vorige tydreekse dataset: eksponensieel Geweegde Windows A verwante stel funksies eksponensieel geweeg weergawes van 'n paar van die bogenoemde statistiek. 'N Soortgelyke koppelvlak om. rolling en. expanding is toeganklik deur middel van die. ewm metode om 'n EWM voorwerp ontvang. 'N Aantal van die uitbreiding van EW (eksponensieel geweeg) metodes word: Ek het 'n tydreeks wat aandele prys data. Ek wil graag die geldvloei Index (MFI) te bereken vir elke ry. Gegewe dat die MFI, maak gebruik van die vorige ongeveer. 14 rye om die huidige MFI, wat die beste benadering tot dit te doen Die onderstaande sou wees bereken word bereken dat die huidige MFI (www. investopedia / terme / m / mfi. asp) vir 'n gegewe DataFrame, maar ek wil graag om dit te implementeer vir elke ry in die data raam Ek het daarin geslaag om hierdie werk met behulp van die funksie toe te pas, maar dit funksie kan net vir 1 argument, terwyl ek nodig sou wees om meer as 1 argument om die bogenoemde te bereken slaag. gevra 22 Augustus by 19:11


No comments:

Post a Comment