Friday, 10 November 2017

Pandas Bevegelig Gjennomsnitt Eksempel


Jeg er ny på Pandas. Jeg har en mengde avstemningsdata jeg vil beregne et rullende gjennomsnitt for å få et estimat for hver dag basert på et tre-dagers vindu. Som jeg forstår fra dette spørsmålet. de rullende funksjonene beregner vinduet basert på et spesifisert antall verdier, og ikke et spesifikt datetimeområde. Er det en annen funksjon som implementerer denne funksjonaliteten Eller stikker jeg fast med å skrive min egen Eksempelinngangsdata: Output vil bare ha én rad for hver dato. EDIT x2: fast typo Dette eksemplet ser ut til å kalle etter en vektet gjennomsnitt som foreslått i andyhaydens kommentar. For eksempel er det to meningsmålinger på 1025 og en hver på 1026 og 1027. Hvis du bare resample og deretter ta den gjennomsnittlige, gir dette effektivt dobbelt så mye vekting i meningsmålene 1026 og 1027 sammenlignet med de på 1025. For å gi lik vekt på hver meningsmåling i stedet for lik vekt hver dag. du kan gjøre noe som følger. Det gir deg rå ingredienser for å gjøre en meningsmåling basert i stedet for en dagbasert gjennomsnitt. Som tidligere er avstemningene i gjennomsnitt 1025, men vekten for 1025 lagres også og er dobbeltvekt på 1026 eller 1027 for å gjenspeile at to avstemninger ble tatt på 1025. Merk at rullende gjennomsnitt for 1027 nå er 0,51500 (poll - vektet) i stedet for 52.1667 (dagvektet). Vær også oppmerksom på at det har vært endringer i APIene for resample og rolling som av versjon 0.18.0.Moving gjennomsnittlig og eksponentiell utjevningsmodeller Som et første skritt i å bevege seg utover gjennomsnittlige modeller, tilfeldige gangmodeller og lineære trendmodeller, nonseasonal mønstre og trender kan ekstrapoleres ved hjelp av en flytende gjennomsnitt eller utjevningsmodell. Den grunnleggende forutsetningen bak gjennomsnittlige og utjevningsmodeller er at tidsserien er lokalt stasjonær med et sakte varierende middel. Derfor tar vi et flytende (lokalt) gjennomsnitt for å anslå dagens verdi av gjennomsnittet, og deretter bruke det som prognosen for nær fremtid. Dette kan betraktes som et kompromiss mellom den gjennomsnittlige modellen og den tilfeldige-walk-uten-drift-modellen. Den samme strategien kan brukes til å estimere og ekstrapolere en lokal trend. Et glidende gjennomsnitt kalles ofte en quotsmoothedquot-versjon av den opprinnelige serien, fordi kortsiktig gjennomsnittsverdi medfører utjevning av støtene i den opprinnelige serien. Ved å justere graden av utjevning (bredden på det bevegelige gjennomsnittet), kan vi håpe å finne en slags optimal balanse mellom ytelsen til de gjennomsnittlige og tilfeldige turmodellene. Den enkleste typen gjennomsnittlig modell er. Enkel (likevektet) Flytende gjennomsnitt: Værvarselet for verdien av Y på tidspunktet t1 som er laget på tidspunktet t, er det enkle gjennomsnittet av de nyeste m-observasjonene: (Her og andre steder vil jeg bruke symbolet 8220Y-hat8221 til å stå for en prognose av tidsserien Y som ble gjort så tidlig som mulig ved en gitt modell.) Dette gjennomsnittet er sentrert ved period-t (m1) 2, noe som innebærer at estimatet av det lokale middel vil ha en tendens til å ligge bak den sanne verdien av det lokale gjennomsnittet med ca. (m1) 2 perioder. Således sier vi at gjennomsnittsalderen for dataene i det enkle glidende gjennomsnittet er (m1) 2 i forhold til perioden for prognosen beregnes. Dette er hvor lang tid det vil være å prognostisere prognoser bak vendepunkter i dataene . For eksempel, hvis du er gjennomsnittlig de siste 5 verdiene, vil prognosene være ca 3 perioder sent i å svare på vendepunkter. Merk at hvis m1, den enkle glidende gjennomsnittlige (SMA) modellen er lik den tilfeldige turmodellen (uten vekst). Hvis m er veldig stor (sammenlignbar med lengden på estimeringsperioden), svarer SMA-modellen til den gjennomsnittlige modellen. Som med hvilken som helst parameter i en prognosemodell, er det vanlig å justere verdien av k for å oppnå den beste kvote kvoten til dataene, dvs. de minste prognosefeilene i gjennomsnitt. Her er et eksempel på en serie som ser ut til å vise tilfeldige svingninger rundt et sakte varierende middel. Først kan vi prøve å passe den med en tilfeldig walk-modell, noe som tilsvarer et enkelt bevegelige gjennomsnitt på 1 sikt: Den tilfeldige turmodellen reagerer veldig raskt på endringer i serien, men i så måte velger den mye av kvotenivået i data (tilfeldige svingninger) samt quotsignalquot (det lokale gjennomsnittet). Hvis vi i stedet prøver et enkelt glidende gjennomsnitt på 5 termer, får vi et smidigere sett med prognoser: Det 5-tiden enkle glidende gjennomsnittet gir betydelig mindre feil enn den tilfeldige turmodellen i dette tilfellet. Gjennomsnittsalderen for dataene i denne prognosen er 3 ((51) 2), slik at den har en tendens til å ligge bak vendepunktene med tre perioder. (For eksempel ser det ut til at en nedtur har skjedd i perioden 21, men prognosene vender seg ikke til flere perioder senere.) Legg merke til at de langsiktige prognosene fra SMA-modellen er en horisontal rettlinje, akkurat som i tilfeldig gang modell. Således antar SMA-modellen at det ikke er noen trend i dataene. Mens prognosene fra den tilfeldige turmodellen ganske enkelt er lik den siste observerte verdien, er prognosene fra SMA-modellen lik et veid gjennomsnitt av de siste verdiene. De konfidensgrenser som beregnes av Statgraphics for de langsiktige prognosene for det enkle glidende gjennomsnittet, blir ikke større da prognoseperioden øker. Dette er åpenbart ikke riktig. Dessverre er det ingen underliggende statistisk teori som forteller oss hvordan konfidensintervallene skal utvide seg for denne modellen. Det er imidlertid ikke så vanskelig å beregne empiriske estimater av konfidensgrensene for lengre horisontprognoser. For eksempel kan du sette opp et regneark der SMA-modellen skulle brukes til å prognose 2 trinn foran, 3 trinn fremover, etc. i den historiske dataprøven. Du kan deretter beregne utvalgsstandardavvikene til feilene i hver prognosehorisont, og deretter konstruere konfidensintervaller for langsiktige prognoser ved å legge til og trekke ut multipler av riktig standardavvik. Hvis vi prøver et 9-sikt enkelt glidende gjennomsnitt, får vi enda jevnere prognoser og mer av en bremseeffekt: Gjennomsnittsalderen er nå 5 perioder (91) 2). Hvis vi tar et 19-årig glidende gjennomsnitt, øker gjennomsnittsalderen til 10: Legg merke til at prognosene nå faller bakom vendepunkter med ca 10 perioder. Hvilken mengde utjevning er best for denne serien Her er et bord som sammenligner feilstatistikken sin, også et gjennomsnitt på tre sikt: Modell C, 5-års glidende gjennomsnitt, gir den laveste verdien av RMSE med en liten margin over 3 term og 9-sikt gjennomsnitt, og deres andre statistikker er nesten identiske. Så, blant modeller med svært like feilstatistikk, kan vi velge om vi foretrekker litt mer respons eller litt mer glatt i prognosene. (Tilbake til toppen av siden.) Browns Simple Exponential Smoothing (eksponentielt vektet glidende gjennomsnitt) Den enkle glidende gjennomsnittsmodellen beskrevet ovenfor har den uønskede egenskapen som den behandler de siste k-observasjonene, like og fullstendig ignorerer alle foregående observasjoner. Intuitivt bør tidligere data diskonteres på en mer gradvis måte - for eksempel bør den siste observasjonen få litt mer vekt enn 2. siste, og den 2. siste skal få litt mer vekt enn den 3. siste, og så videre. Den enkle eksponensielle utjevning (SES) - modellen oppnår dette. La 945 betegne en quotsmoothing constantquot (et tall mellom 0 og 1). En måte å skrive modellen på er å definere en serie L som representerer dagens nivå (dvs. lokal middelverdi) av serien som estimert fra data til nå. Verdien av L ved tid t beregnes rekursivt fra sin egen tidligere verdi slik: Således er den nåværende glattede verdien en interpolering mellom den forrige glattede verdien og den nåværende observasjonen, hvor 945 styrer nærheten til den interpolerte verdien til den nyeste observasjon. Forventningen for neste periode er bare den nåværende glatte verdien: Tilsvarende kan vi uttrykke neste prognose direkte i forhold til tidligere prognoser og tidligere observasjoner, i en hvilken som helst av de tilsvarende versjoner. I den første versjonen er prognosen en interpolasjon mellom forrige prognose og tidligere observasjon: I den andre versjonen blir neste prognose oppnådd ved å justere forrige prognose i retning av den forrige feilen med en brøkdel av 945. Er feilen gjort ved tid t. I den tredje versjonen er prognosen et eksponentielt vektet (dvs. nedsatt) glidende gjennomsnitt med rabattfaktor 1-945: Interpolasjonsversjonen av prognoseformelen er den enkleste å bruke hvis du implementerer modellen på et regneark: det passer inn i en enkeltcelle og inneholder cellehenvisninger som peker på forrige prognose, forrige observasjon og cellen der verdien av 945 er lagret. Merk at hvis 945 1 er SES-modellen tilsvarer en tilfeldig turmodell (uten vekst). Hvis 945 0 er SES-modellen ekvivalent med den gjennomsnittlige modellen, forutsatt at den første glattede verdien er satt lik gjennomsnittet. (Gå tilbake til toppen av siden.) Gjennomsnittsalderen for dataene i prognosen for enkel eksponensiell utjevning er 1 945 i forhold til perioden for prognosen beregnes. (Dette skal ikke være åpenbart, men det kan enkelt vises ved å vurdere en uendelig serie.) Derfor har den enkle, glidende gjennomsnittlige prognosen en tendens til å ligge bak vendepunktene med rundt 1 945 perioder. For eksempel, når 945 0,5 lag er 2 perioder når 945 0.2 lag er 5 perioder når 945 0,1 lag er 10 perioder, og så videre. For en gitt gjennomsnittlig alder (det vil si mengden lag), er prognosen for enkel eksponensiell utjevning (SES) noe bedre enn SMA-prognosen (Simple Moving Average) fordi den legger relativt mer vekt på den siste observasjonen - dvs. det er litt mer quotresponsivequot for endringer som oppstod i den siste tiden. For eksempel har en SMA-modell med 9 vilkår og en SES-modell med 945 0,2 begge en gjennomsnittlig alder på 5 for dataene i prognosene, men SES-modellen legger mer vekt på de siste 3 verdiene enn SMA-modellen og ved Samtidig er det ikke 8220forget8221 om verdier som er mer enn 9 år gamle, som vist i dette diagrammet. En annen viktig fordel ved SES-modellen over SMA-modellen er at SES-modellen bruker en utjevningsparameter som er kontinuerlig variabel, slik at den lett kan optimaliseres ved å bruke en quotsolverquot-algoritme for å minimere den gjennomsnittlige kvadratfeilen. Den optimale verdien av 945 i SES-modellen for denne serien viser seg å være 0,2961, som vist her: Gjennomsnittsalderen for dataene i denne prognosen er 10,2961 3,4 perioder, noe som ligner på et 6-sikt enkelt glidende gjennomsnitt. De langsiktige prognosene fra SES-modellen er en horisontal rett linje. som i SMA-modellen og den tilfeldige turmodellen uten vekst. Vær imidlertid oppmerksom på at konfidensintervallene som beregnes av Statgraphics, divergerer nå på en rimelig måte, og at de er vesentlig smalere enn konfidensintervallene for den tilfeldige turmodellen. SES-modellen antar at serien er noe mer forutsigbar enn den tilfeldige turmodellen. En SES-modell er faktisk et spesielt tilfelle av en ARIMA-modell. slik at den statistiske teorien om ARIMA-modeller gir et solid grunnlag for beregning av konfidensintervall for SES-modellen. Spesielt er en SES-modell en ARIMA-modell med en ikke-sesongforskjell, en MA (1) og ikke en konstant periode. ellers kjent som en quotARIMA (0,1,1) modell uten constantquot. MA (1) - koeffisienten i ARIMA-modellen tilsvarer mengden 1-945 i SES-modellen. For eksempel, hvis du passer på en ARIMA (0,1,1) modell uten konstant til serien analysert her, viser den estimerte MA (1) - koeffisienten seg å være 0,7029, som er nesten nøyaktig en minus 0,2961. Det er mulig å legge til antagelsen om en konstant lineær trend uten null som en SES-modell. For å gjøre dette oppgir du bare en ARIMA-modell med en ikke-sesongforskjell og en MA (1) - sikt med en konstant, dvs. en ARIMA-modell (0,1,1) med konstant. De langsiktige prognosene vil da ha en trend som er lik den gjennomsnittlige trenden observert over hele estimeringsperioden. Du kan ikke gjøre dette i forbindelse med sesongjustering, fordi sesongjusteringsalternativene er deaktivert når modelltypen er satt til ARIMA. Du kan imidlertid legge til en konstant langsiktig eksponensiell trend for en enkel eksponensiell utjevningsmodell (med eller uten sesongjustering) ved å bruke inflasjonsjusteringsalternativet i prognoseprosedyren. Den aktuelle kvoteringskvoten (prosentvekst) per periode kan estimeres som hellingskoeffisienten i en lineær trendmodell som er montert på dataene i forbindelse med en naturlig logaritme transformasjon, eller det kan være basert på annen uavhengig informasjon om langsiktige vekstutsikter . (Tilbake til toppen av siden.) Browns Lineær (dvs. dobbel) Eksponensiell utjevning SMA-modellene og SES-modellene antar at det ikke er noen trend av noe slag i dataene (som vanligvis er OK eller i det minste ikke altfor dårlig for 1- trinnvise prognoser når dataene er relativt støyende), og de kan modifiseres for å inkorporere en konstant lineær trend som vist ovenfor. Hva med kortsiktige trender Hvis en serie viser en varierende vekstnivå eller et syklisk mønster som skiller seg tydelig ut mot støyen, og hvis det er behov for å prognose mer enn 1 periode framover, kan estimering av en lokal trend også være et problem. Den enkle eksponensielle utjevningsmodellen kan generaliseres for å oppnå en lineær eksponensiell utjevning (LES) modell som beregner lokale estimater av både nivå og trend. Den enkleste tidsvarierende trendmodellen er Browns lineær eksponensiell utjevningsmodell, som bruker to forskjellige glatte serier som er sentrert på forskjellige tidspunkter. Forutsigelsesformelen er basert på en ekstrapolering av en linje gjennom de to sentrene. (En mer sofistikert versjon av denne modellen, Holt8217s, blir diskutert nedenfor.) Den algebraiske form av Brown8217s lineær eksponensiell utjevningsmodell, som den enkle eksponensielle utjevningsmodellen, kan uttrykkes i en rekke forskjellige, men liknende former. Denne standardmodellen er vanligvis uttrykt som følger: La S betegne den enkeltglattede serien som er oppnådd ved å anvende enkel eksponensiell utjevning til serie Y. Dvs. verdien av S ved period t er gitt av: (Husk at, under enkle eksponensiell utjevning, dette ville være prognosen for Y ved periode t1.) Lad deretter Squot betegne den dobbeltslettede serien oppnådd ved å anvende enkel eksponensiell utjevning (ved hjelp av samme 945) til serie S: Endelig prognosen for Y tk. for noe kgt1, er gitt av: Dette gir e 1 0 (det vil si lure litt, og la den første prognosen være den samme første observasjonen) og e 2 Y 2 8211 Y 1. hvoretter prognosene genereres ved å bruke ligningen ovenfor. Dette gir de samme monterte verdiene som formelen basert på S og S dersom sistnevnte ble startet med S 1 S 1 Y 1. Denne versjonen av modellen brukes på neste side som illustrerer en kombinasjon av eksponensiell utjevning med sesongjustering. Holt8217s Lineær eksponensiell utjevning Brown8217s LES-modell beregner lokale estimater av nivå og trend ved å utjevne de siste dataene, men det faktum at det gjør det med en enkelt utjevningsparameter, stiller en begrensning på datamønstrene som den kan passe: nivået og trenden er ikke tillatt å variere til uavhengige priser. Holt8217s LES-modellen løser dette problemet ved å inkludere to utjevningskonstanter, en for nivået og en for trenden. Til enhver tid t, som i Brown8217s modell, er det et estimat L t på lokalt nivå og et estimat T t av den lokale trenden. Her beregnes de rekursivt fra verdien av Y observert ved tid t og de forrige estimatene av nivået og trenden ved to likninger som gjelder eksponensiell utjevning til dem separat. Hvis estimert nivå og trend ved tid t-1 er L t82091 og T t-1. henholdsvis, da var prognosen for Y tshy som ville vært gjort på tidspunktet t-1, lik L t-1 T t-1. Når den faktiske verdien er observert, beregnes det oppdaterte estimatet av nivået rekursivt ved å interpolere mellom Y tshy og dens prognose, L t-1 T t 1, med vekt på 945 og 1- 945. Forandringen i estimert nivå, nemlig L t 8209 L t82091. kan tolkes som en støyende måling av trenden på tidspunktet t. Det oppdaterte estimatet av trenden beregnes deretter rekursivt ved å interpolere mellom L t 8209 L t82091 og det forrige estimatet av trenden, T t-1. ved bruk av vekter av 946 og 1-946: Fortolkningen av trend-utjevningskonstanten 946 er analog med den for nivåutjevningskonstanten 945. Modeller med små verdier på 946 antar at trenden bare endrer seg veldig sakte over tid, mens modeller med større 946 antar at det endrer seg raskere. En modell med en stor 946 mener at den fjerne fremtiden er veldig usikker, fordi feil i trendberegning blir ganske viktig når det regnes med mer enn en periode framover. (Tilbake til toppen av siden.) Utjevningskonstantene 945 og 946 kan estimeres på vanlig måte ved å minimere gjennomsnittlig kvadratfeil i de 1-trinns prognosene. Når dette gjøres i Statgraphics, viser estimatene seg å være 945 0.3048 og 946 0.008. Den svært små verdien av 946 betyr at modellen tar svært liten endring i trenden fra en periode til den neste, så i utgangspunktet prøver denne modellen å estimere en langsiktig trend. I analogi med begrepet gjennomsnittlig alder av dataene som brukes til å estimere det lokale nivået i serien, er gjennomsnittsalderen for dataene som brukes til estimering av lokal trenden, proporsjonal med 1 946, men ikke akkurat lik den . I dette tilfellet viser det seg å være 10 006 125. Dette er et svært nøyaktig tall, forutsatt at nøyaktigheten av estimatet av 946 er virkelig 3 desimaler, men det er av samme generelle størrelsesorden som prøvestørrelsen på 100, så denne modellen er i gjennomsnitt over ganske mye historie i estimering av trenden. Prognoseplanet nedenfor viser at LES-modellen anslår en litt større lokal trend i slutten av serien enn den konstante trenden som er estimert i SEStrend-modellen. Også den estimerte verdien på 945 er nesten identisk med den som oppnås ved å montere SES-modellen med eller uten trend, så dette er nesten den samme modellen. Nå ser disse ut som rimelige prognoser for en modell som skal estimere en lokal trend. Hvis du 8220eyeball8221 ser dette, ser det ut som om den lokale trenden har vendt nedover på slutten av serien. Hva har skjedd Parametrene til denne modellen har blitt estimert ved å minimere den kvadriske feilen på 1-trinns prognoser, ikke langsiktige prognoser, i hvilket tilfelle trenden gjør ikke en stor forskjell. Hvis alt du ser på er 1-trinns feil, ser du ikke det større bildet av trender over (si) 10 eller 20 perioder. For å få denne modellen mer i tråd med øyehals ekstrapoleringen av dataene, kan vi manuelt justere trendutjevningskonstanten slik at den bruker en kortere basislinje for trendestimering. Hvis vi for eksempel velger å sette 946 0,1, er gjennomsnittsalderen for dataene som brukes til å estimere den lokale trenden 10 perioder, noe som betyr at vi gjennomsnittsverdi trenden over de siste 20 perioder eller så. Here8217s hva prognosen tomten ser ut hvis vi setter 946 0,1 mens du holder 945 0.3. Dette ser intuitivt fornuftig ut på denne serien, selv om det er sannsynlig farlig å ekstrapolere denne trenden mer enn 10 perioder i fremtiden. Hva med feilstatistikken Her er en modell sammenligning for de to modellene vist ovenfor, samt tre SES-modeller. Den optimale verdien av 945. For SES-modellen er ca. 0,3, men tilsvarende resultater (med henholdsvis litt mer responstid) oppnås med 0,5 og 0,2. (A) Holts lineær eksp. utjevning med alfa 0,3048 og beta 0,008 (B) Holts lineær eksp. utjevning med alfa 0,3 og beta 0,1 (C) Enkel eksponensiell utjevning med alfa 0,5 (D) Enkel eksponensiell utjevning med alfa 0,3 (E) Enkel eksponensiell utjevning med alfa 0,2 Deres statistikk er nesten identisk, slik at vi virkelig kan velge på grunnlag av 1-trinns prognosefeil i dataprøven. Vi må falle tilbake på andre hensyn. Hvis vi sterkt tror at det er fornuftig å basere dagens trendoverslag på hva som har skjedd i løpet av de siste 20 perioder eller så, kan vi gjøre en sak for LES-modellen med 945 0,3 og 946 0,1. Hvis vi ønsker å være agnostiker om det er en lokal trend, kan en av SES-modellene være enklere å forklare, og vil også gi mer mid-of-the-road prognoser for de neste 5 eller 10 periodene. (Tilbake til toppen av siden.) Hvilken type trend-ekstrapolering er best: Horisontal eller lineær Empirisk bevis tyder på at hvis dataene allerede er justert (om nødvendig) for inflasjon, kan det være uhensiktsmessig å ekstrapolere kortsiktig lineær trender veldig langt inn i fremtiden. Trender som tyder på i dag, kan løsne seg i fremtiden på grunn av ulike årsaker som forverring av produkt, økt konkurranse og konjunkturnedganger eller oppgang i en bransje. Av denne grunn utfører enkle eksponensielle utjevning ofte bedre ut av prøven enn det ellers kunne forventes, til tross for sin kvadratiske kvadratiske horisontal trend-ekstrapolering. Dampede trendmodifikasjoner av den lineære eksponensielle utjevningsmodellen brukes også i praksis til å introdusere en konservatismeddel i sine trendprognoser. Den demonstrede LES-modellen kan implementeres som et spesielt tilfelle av en ARIMA-modell, spesielt en ARIMA-modell (1,1,2). Det er mulig å beregne konfidensintervall rundt langsiktige prognoser produsert av eksponentielle utjevningsmodeller, ved å betrakte dem som spesielle tilfeller av ARIMA-modeller. (Pass på: ikke alle programmer beregner konfidensintervaller for disse modellene riktig.) Bredden på konfidensintervaller avhenger av (i) RMS-feilen i modellen, (ii) type utjevning (enkel eller lineær) (iii) verdien (e) av utjevningskonstanten (e) og (iv) antall perioder fremover du forutsetter. Generelt sprer intervallene raskere da 945 blir større i SES-modellen, og de sprer seg mye raskere når lineær snarere enn enkel utjevning brukes. Dette emnet blir diskutert videre i ARIMA-modellene i notatene. (Tilbake til toppen av siden.) Backtesting a 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 maskineri vi introduserte for å utføre forskning på en faktisk strategi, nemlig Moving Average Crossover på AAPL. Flytte Gjennomsnittlig Crossover Strategy Den Moving Average Crossover teknikken er en ekstremt kjent, forenklet momentum strategi. Det regnes ofte som Hello World-eksempelet for kvantitativ handel. Strategien som skissert her er langvarig. To separate enkle bevegelige gjennomsnittsfiltre opprettes, med varierende tilbakekallingsperioder, av en bestemt tidsserie. Signaler for å kjøpe eiendelen oppstår når det kortere tilbakegangsgjenomsnittet overstiger det lengre tilbakegående glidende gjennomsnittet. Hvis det lengre gjennomsnittet senere overgår kortere gjennomsnitt, blir aktiva solgt tilbake. Strategien fungerer bra 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 oversikt over 100 dager og en lang tilbakekalling på 400 dager. Dette er eksemplet fra zipline algoritmiske handelsbiblioteket. Således, hvis vi ønsker å implementere vår egen backtester, må vi sikre at den samsvarer med resultatene i zipline, som et grunnleggende middel for validering. Gjennomføring Sørg for å følge den tidligere opplæringen her. som beskriver hvordan det opprinnelige objekthierarkiet for backtesteren er konstruert, ellers vil koden under ikke fungere. For denne bestemte implementeringen har jeg brukt følgende biblioteker: Implementeringen av macross. py krever backtest. py fra den forrige opplæringen. Det første trinnet er å importere de nødvendige modulene og objektene: Som i den tidligere opplæringen skal vi subclass strategisk abstrakt baseklasse for å produsere MovingAverageCrossStrategy. som inneholder alle detaljer om hvordan man genererer signaler når de bevegelige gjennomsnittene av AAPL krysser over hverandre. Objektet krever en shortwindow og en longwindow å operere. Verdiene er satt til standardverdier på henholdsvis 100 dager og 400 dager, som er de samme parametrene som brukes i hovedeksempelet på zipline. De bevegelige gjennomsnittene opprettes ved å bruke pandas rollingmean-funksjonen på stolpene. Sluttprisen på AAPL-aksjen er avsluttet. Når de individuelle bevegelige gjennomsnittene er blitt konstruert, genereres signalet Serie ved å sette kolonnen lik 1,0 når det korte glidende gjennomsnittet er større enn det lange glidende gjennomsnittet, eller 0,0 ellers. Herfra kan stillingsordrene genereres for å representere handelssignaler. MarketOnClosePortfolio er subclassed fra Portfolio. som finnes i backtest. py. Det er nesten identisk med implementeringen beskrevet i den tidligere opplæringen, med unntak av at handlingene nå utføres på nært hold, i stedet for en åpen til åpen basis. For detaljer om hvordan porteføljeobjektet er definert, se den forrige opplæringen. Ive forlot koden for fullstendig og å holde denne opplæringen selvstendig: Nå som MovingAverageCrossStrategy og MarketOnClosePortfolio-klassene er definert, vil en hovedfunksjon bli kalt for å knytte alle funksjonalitetene sammen. I tillegg vil utførelsen av strategien bli undersøkt via 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 langvarige signaler. Deretter genereres porteføljen med en startkapital på 100 000 USD og avkastningen beregnes på egenkapitalkurven. Det endelige trinnet er å bruke matplotlib til å tegne en tofigurert plot av begge AAPL-prisene, overlaid med de bevegelige gjennomsnittene og buysell-signaler, samt egenkapitalkurven med de samme buysell-signalene. Plottingskoden er tatt (og endret) fra zipline implementeringseksemplet. Kodenes grafiske utgang er som følger. Jeg benyttet seg av IPython Paste-kommandoen for å sette dette direkte inn i IPython-konsollen mens du var i Ubuntu, slik at den grafiske utgangen forblir i visning. Den rosa oppturen representerer kjøp av aksjen, mens de svarte downticks representerer å selge den tilbake: Som det kan sees, mister strategien penger over perioden, med fem rundturer. Dette er ikke overraskende gitt AAPLs oppførsel i perioden, noe som var på en liten nedadgående trend, etterfulgt av en signifikant oppgang i 1998. Reflekteringsperioden for de bevegelige gjennomsnittssignalene er ganske stor og dette påvirket resultatet av den endelige handel , som ellers kan ha gjort strategien lønnsom. I etterfølgende artikler vil vi skape et mer sofistikert middel til å analysere ytelse, samt å beskrive hvordan man optimaliserer tilbakekallingsperioder for de enkelte bevegelige gjennomsnittssignaler. Bare Komme i gang med kvantitativ handel

No comments:

Post a Comment