Thursday 2 November 2017

Flytte Gjennomsnittet Python Pandaer


Backtesting en Moving Average Crossover i Python med pandas. I den forrige artikkelen om Research Backtesting Environments I Python With Pandas opprettet vi et objektorientert forskningsbasert backtesting miljø og testet det på en tilfeldig prognosestrategi. I denne artikkelen vil vi gjøre bruk av maskiner vi introduserte for å utføre forskning på en faktisk strategi, nemlig Moving Average Crossover på AAPL. Moving Average Crossover Strategy. The Moving Average Crossover-teknikken er en ekstremt kjent, forenklet momentumstrategi. Det betraktes ofte som Hello World-eksempelet for kvantitativ handel . Strategien som skissert her er langvarig. To separate enkle glidende gjennomsnittlige filtre er opprettet med varierende tilbakekoblingsperioder av en bestemt tidsserie. Signaler for å kjøpe aktivet oppstår når kortere tilbakegangsgjenomsnitt overstiger det lengre tilbakegangsgjenomsnittet. gjennomsnittet overgår deretter det kortere gjennomsnittet, eiendelen er solgt tilbake. Strategien fungerer vi ll når en tidsserie går inn i en periode med sterk trend og så sakte reverserer trenden. For dette eksempelet har jeg valgt Apple, Inc AAPL som tidsserien, med en kort tilbakekall på 100 dager og et langt tilbakeblikk på 400 dager. Dette er Eksempelet fra zipline algoritmiske handelsbiblioteket. Såfremt vi ønsker å implementere vår egen backtester, må vi sikre at den samsvarer med resultatene i zipline, som et grunnleggende middel for validering. Sørg for å følge den tidligere opplæringen her som beskriver hvordan den første Objekthierarkiet for backtesteren er konstruert, ellers vil koden nedenfor ikke fungere. For denne bestemte implementeringen har jeg brukt følgende biblioteker. Implementeringen av krever fra den forrige opplæringen Det første trinnet er å importere de nødvendige modulene og objektene. Som i forrige opplæring vi skal subclass strategien abstrakt basen klassen for å produsere MovingAverageCrossStrategy som inneholder alle detaljene om hvordan å generere signalene når flytting av erobringer av AAPL krysser over hverandre. Objektet krever en shortwindow og en longwindow å betjene. Verdiene er satt til standardverdier på henholdsvis 100 dager og 400 dager, som er de samme parametrene som brukes i hovedeksempelet på zipline. gjennomsnitt er opprettet ved å bruke pandas rollingmean funksjon på stolpene Lukk sluttkurs for AAPL-aksjen Når de individuelle bevegelige gjennomsnittene er konstruert, genereres signalet Serie ved å sette kolonnen lik 1 0 når det korte glidende gjennomsnittet er større enn lengre glidende gjennomsnitt eller 0 0 ellers Fra dette kan posisjonene ordrer genereres for å representere handelssignaler. MarketOnClosePortfolio er underklasse fra Portefølje som er funnet i Det er nesten identisk med implementeringen beskrevet i den tidligere opplæringen, med unntak av at handelen utføres nå på nært hold, i stedet for en åpen til åpen basis. For detaljer om hvordan porteføljeobjektet er definert, se forrige t Utorial Jeg har forlatt koden for fullstendig og for å holde denne opplæringen selvopptatt. Nå som MovingAverageCrossStrategy og MarketOnClosePortfolio-klassene er definert, vil en hovedfunksjon bli kalt for å knytte alle funksjonalitetene sammen. I tillegg vil strategiens utførelse undersøkes ved hjelp av en kurve av egenkapitalkurven. Pandas DataReader-objektet laster ned OHLCV-priser på AAPL-lager for perioden 1. januar 1990 til 1. januar 2002, hvor signalene DataFrame er opprettet for å generere de langvarige signalene. Deretter er porteføljen generert med en basiskapital på 100 000 USD og avkastningen er beregnet på egenkapitalkurven. Det endelige trinnet er å bruke matplotlib til å tegne en tofigurert plot av begge AAPL-prisene, overlaid med de bevegelige gjennomsnitt og kjøpe selgesignaler, så vel som egenkapitalkurven med samme kjøpssalgsignaler Plottingskoden er tatt og modifisert fra zipline-implementeringseksempelet. Den grafiske produksjonen av koden er som følger: Jeg er sur e bruk av IPython Paste-kommandoen for å sette dette direkte inn i IPython-konsollen mens du er i Ubuntu, slik at den grafiske produksjonen forblir i visning. Den rosa oppskriften representerer kjøp av aksjen, mens de svarte downticks representerer å selge den tilbake. AAPL Flytter gjennomsnittlig Crossover Performance fra 1990-01-01 til 2002-01-01. Som det kan sees, mister strategien penger i løpet av perioden, med fem rundturer. Dette er ikke overraskende gitt AAPLs oppførsel i perioden, som var på en svak nedadgående trend , etterfulgt av en betydelig oppgang i 1998 Utsiktsperioden for de bevegelige gjennomsnittssignalene er ganske stor og dette påvirket resultatet av den endelige handel, noe som ellers kan ha gjort strategien lønnsom. I etterfølgende artikler vil vi skape et mer sofistikert middel for analysere ytelse, samt beskrive hvordan man optimaliserer tilbakekallingsperioder av de enkelte bevegelige gjennomsnittlige signaler. Bare å komme i gang med kvantitativ handel. Utmattelse med eksponentielt veier hted Moving Averages. Et glidende gjennomsnitt tar en støyende tidsserie og erstatter hver verdi med gjennomsnittlig verdi av et nabolag om den oppgitte verdien. Dette nabolaget kan bestå av rent historiske data, eller det kan være sentrert om den oppgitte verdien. Videre er verdiene i Nabolaget kan vektes ved hjelp av forskjellige sett av vekter Her er et eksempel på et likevekt trepunkts glidende gjennomsnitt, ved hjelp av historiske data. Here representerer det glatte signalet, og representerer de støyende tidsseriene I motsetning til enkle glidende gjennomsnitt, blir en eksponentielt vektet glidende gjennomsnittlig EWMA justerer en verdi i henhold til en eksponentielt vektet sum av alle tidligere verdier. Dette er grunnleggende ideen. Dette er fint fordi du ikke trenger å bekymre deg for å ha et trepunktsvindu, mot et fempunktsvindu, eller bekymre deg for hensiktsmessigheten av vektingsplanen Med EWMA, husket tidligere forstyrrelser, og sakte glemt, med uttrykket i den siste ligningen, mens med et vindu eller nabolag med diskrete grenser, blir en forstyrrelse glemt så snart den går ut av vinduet. Gjennomføring av EWMA for å imøtekomme trender. Etter å ha lest om EWMAer i en dataanalysebok, hadde jeg lykkelig brukt dette verktøyet på hvert enkelt utjevningsapplikasjon som Jeg kom over Det var ikke før senere at jeg lærte at EWMA-funksjonen egentlig bare passer for stasjonære data, det vil si data uten trender eller sesongmessighet. Spesielt motstår EWMA-funksjonen trender bort fra dagens, at den allerede er sett. Så hvis du har en bråkete hattfunksjon som går fra 0 til 1 og deretter tilbake til 0, så vil EWMA-funksjonen returnere lave verdier på opp-baksiden og høye verdier på bakken. En måte å omgå dette er å glatte signalet i begge retninger, marsjerer fremover og deretter marsjerer bakover, og deretter gjennomsnittlig de to Her, vil vi bruke EWMA-funksjonen som leveres av pandas-modulen. Høydvinters andre ordre EWMA. Holt-Winters andre rekkefølge møttes hod forsøker å inkorporere den estimerte trenden i glattede data ved å bruke et begrep som holder styr på hellingen til det opprinnelige signalet. Det glatte signalet er skrevet til termen. Og her er noen Python-kode som implementerer Holt-Winters andreordsmetode på en annen støyende hatt funksjon, som før. Post navigasjon. Recent Postsputational tools. Analogously, DataFrame har en metode for å beregne parvis covariances blant seriene i DataFrame, også unntatt NA null values. Assuming de manglende data mangler tilfeldig dette resulterer i en estimat for kovariansmatrisen som er upartisk. For mange anvendelser kan dette estimatet imidlertid ikke være akseptabelt fordi den estimerte kovariansmatrisen ikke er garantert å være positiv semi-definitiv. Dette kan føre til estimerte korrelasjoner med absolutte verdier som er større enn en, og eller en ikke-invertibel kovariansmatrise Se Estimering av kovariansmatriser for flere detaljer. støtter også et valgfritt søkeord for minperioder som angir ønsket minimumsantal observasjoner for hvert kolonnepar for å få et gyldig resultat. Vektene som brukes i vinduet er spesifisert av wintype-søkeordet Listen over anerkjente typer er. kaiser trenger beta. gaussian trenger std. generalgaussian trenger kraft, width. slepian trenger width. Note at boxcar vinduet tilsvarer mean. For noen windowing funksjoner, må flere parametere spesifiseres. For med en wintype det er ingen normalisering gjort til vekter for vinduet Passing Tilpassede vekter på 1, 1, 1 gir et annet resultat enn passerende vekter på 2, 2, 2 for eksempel Når man passerer en wintype i stedet for å spesifisere vektene, er vektene allerede normalisert slik at den største vekten er 1. I kontrast , beregningens natur er slik at vektene blir normalisert i forhold til hverandre. Vektene på 1, 1, 1 og 2, 2, 2 gir samme resultat. Tid-bevisst Rolling. New i versjon 0 19 0.Ne w i versjon 0 19 0 er muligheten til å passere en forskyvning eller konvertibel til en metode og få den til å produsere variabel størrelse vinduer basert på passet tidsvindu. For hvert tidspunkt inkluderer dette alle tidligere verdier som forekommer innen den angitte tiden delta. Denne kan være spesielt nyttig for en ikke-vanlig tidsfrekvensindeks. Dette er en vanlig frekvensindeks Ved å bruke et heltallsparameter virker parameteren å rulle langs vinduets frekvens. Spesifisering av en forskyvning tillater en mer intuitiv spesifikasjon av rullfrekvensen. Bruke en ikke-vanlig, men likevel monotonisk indeks, ruller med et heltall vindu gir ikke noen spesiell beregning. Bruke tidspesifikasjonen genererer variabelvinduer for denne sparsomme data. Videre tillater vi nå en valgfri parameter for å spesifisere en kolonne i stedet for standard for indeksen i en DataFrame. Time-aware Rolling vs Resampling. Using med en tidsbasert indeks er ganske lik resampling. De opererer og utfører reduktiv operasjon på tidsindeksert pa ndas objekter. Når du bruker med en forskyvning Forskjellen er et tids-delta Ta et bakover-i-tid-ser vindu, og aggregat alle verdiene i vinduet, inkludert sluttpunktet, men ikke startpunktet Dette er det nye verdi på det tidspunktet i resultatet Dette er vinduer med variabel størrelse i tidsrom for hvert punkt av inngangen. Du får samme resultat som inngangen. Når du bruker med en forskyvning Konstruer en ny indeks som er frekvensen av forskyvningen For hver frekvensfelt, aggregatpoeng fra inngangen i et bakover-i-tid-ser vindu som faller i boksen Resultatet av denne aggregeringen er utgangen for det aktuelle frekvenspunktet. Vinduene er fast størrelse i frekvensområdet Ditt resultat vil ha form av en vanlig frekvens mellom min og maksimum av det opprinnelige inngangsobjektet. For å oppsummere rulling er en tidsbasert vindusoperasjon, mens en frekvensbasert vindusoperasjon. Centering Windows. Som standard er etikettene satt til høyre kant av vinduet, men a senter søkeord er tilgjengelig slik at etikettene kan settes i sentrum. Binary Window Functions. cov og corr kan beregne flyttbar vindu statistikk om to serier eller en kombinasjon av DataFrame Series eller DataFrame DataFrame Her er oppførselen i hver case. two Series beregner statistikk for pairing. DataFrame Series beregner statistikken for hver kolonne av DataFrame med den bestått serien, og returnerer dermed en DataFrame. DataFrame DataFrame som standard beregner statistikken for matching kolonne navn, returnerer en DataFrame Hvis søkeordet argumentet parvis True er passert deretter beregner statistikken for hvert par kolonner, og returnerer et panel hvis gjenstander er datoene i spørsmålet, se de neste seksjonene som ruller parvis kovarianer og korrelasjoner. I økonomisk dataanalyse og andre felt er det vanlig å beregne kovarians - og korrelasjonsmatriser for en tidssamling serie Ofte er man også interessert i flyttevindukovarians og korrelasjonsmatriser Dette kan gjøres av pa ssing det parviste søkeordargumentet, som i tilfelle av DataFrame-innganger vil gi et panel hvis elementer er de aktuelle datoene. Ved et enkelt DataFrame-argument kan det parvisvise argumentet utelates. Mislykkede verdier ignoreres og hver oppføring beregnes ved å bruke de parvis fullstendige observasjonene Vennligst se kovarianseksjonen for advarsler knyttet til denne metoden for beregning av kovarians - og korrelasjonsmatriser. Siden de ikke har en vinduparameter, har disse funksjonene de samme grensesnittene som deres motparter. Som ovenfor er parametrene de alle aksepterer, min. terskel for ikke-null datapunkter for å kreve standardverdier til minimum som er nødvendig for å beregne statistikk Nei NaNs vil bli utført når minperioder ikke-null datapunkter har blitt sett. sentralboolsk, om du vil sette etikettene til senterstandarden, er False. Utgangen av og metodene returnerer ikke en NaN hvis det er minst minperioder ikke-nullverdier i det nåværende vinduet Dette er forskjellig fra cumsum cumprod cumma x og cummin som returnerer NaN i utgangen hvor en NaN oppstår i inngangen. En utvidende vinduestatistikk vil være mer stabil og mindre responsiv enn dens rullevindue motpart siden den økende vindustørrelsen reduserer den relative effekten av et individuelt datapunkt. Som en Eksempel, her er den gjennomsnittlige produksjonen for den tidligere tidsserien datasettet. Eksponentielt vektet Windows. Et relatert sett med funksjoner er eksponentielt vektede versjoner av flere av ovennevnte statistikker. Et lignende grensesnitt til og er tilgjengelig gjennom metoden for å motta et EWM-objekt. Et nummer ekspansjonelt vektede metoder tilveiebringes.

No comments:

Post a Comment