Skip to main content

Kalman Filter Trading Strategier


18. august 2015 6. oktober 2015 Kalman filter og parhandel Tenk på dette scenariet. Du er en statistisk arbitragehandler på en stasjonskort eller HF. Som sådan holder du rutinemessig oversikt over ETF-eksponering som du må sikke. Den forrige natten instruerte du dine over natten handelsmenn å beregne sikringsforholdene for en matrise av ETF8217s. Neste morgen før markedet åpner, presenterer juniorhandlerne sine ivrige resultater for inspeksjonen. Når du ser hva du ser, laster du sikringsforholdene inn i handelsplattformen og venter på det åpne. Når markedet først åpnes for handel, balanserer du sikringene dine i henhold til de nye forholdene. Etterpå ser du i horror da hekkene dine ikke fungerer som forventet. Hva gikk galt Hver god handelsmann vet at de må tilpasse seg når forholdene i markedet endres, så hvorfor krever vi ellers fra våre handelsmodeller. De handlende i vårt eksempel baserte seg på statiske sikringsforhold for å drive sin handelslogikk. Som et resultat åpnet de seg opp til det som er kjent som parameterrisiko. Oppdatering av parametrene når ny informasjon blir tilgjengelig, er en måte å beskytte deg mot denne underforståtte handelsrisikoen. Langt den mest allestedsnærværende modellen for å oppnå dette i et handelsscenario er Kalman Filter. Dette er nyttig når du arbeider med en lineær modell, for eksempel parhandel, som i sin enkleste form reduserer til handel med rest av en lineær regresjon: Hvor er dagens pris på første aksje, er dagens pris på den andre aksjen , er vårt nåværende sikringsforhold og er nåværende spredningspris vi handler. Vi kunne også estimere sikringsforholdet ved hjelp av loggendringene i X og Y, i stedet for nivåene. Dette ville være mer sannsynlig å være tilfelle i et High Frequency Trading-scenario, hvor alt vi bryr oss om er prisendringer. Kalman-filteret gjør at vi kan variere sikringsforholdet over tid. For eksempel, anta at vi antar at sikringsforholdet følger en tilfeldig tur, dvs. Hvor er den nåværende tilstanden til sikringsforholdet, er den siste tilstanden og er tilfeldig hvit støy med gjennomsnitt på null og volatilitet. Kalman-filteret ble designet for å estimere 8220hidden state8221 av en lineær Gauss-modell som Pairs Trading. Filteret er basert på et system av ligninger: er den gjeldende skjulte tilstanden (f. eks. Sikringsforholdet), overgangsmatrisen (f. eks. Identitetsmatrisen) er den siste observasjonsvektoren (f. eks. Loggendringen av lager Y) er siste observasjonsmatrise (f. eks. loggendringen i lager X) er Gaussisk hvit støy med gjennomsnittlig null og avvik. Let8217s ser på et konkret eksempel på Kalman Filter i aksjon for å få bedre forståelse for de bevegelige delene. Spesielt ønsket vi å markere betydningen av ditt valg av og. Forholdet mellom disse to parametrene kalles signal-støyforholdet. Hvis det er lite forhold til, vil filteret legge mesteparten av vekten til neste estimat på tilstanden til det siste estimatet (dvs. filteret vil favorisere sin nåværende tilstand over ny informasjon). Hvis omvendt er sant, vil filteret tilpasse seg svært raskt til ny informasjon på bekostning av sin tidligere tilstand. Følgende diagram illustrerer effekten pent. Hver linje representerer modell8217s nåværende estimat av sikringsforholdet mellom ETF8217s SPY og EEM ved hjelp av forskjellige verdier for å holde konstant. Jo høyere signal / støyforhold, desto raskere passer modellen til ny informasjon: Python har en enkel og effektiv implementering av Kalman Filter kalt pykalman. Vi lastet ned gratis intraday lagerdata for SPY og EEM ved hjelp av getgoogledata-funksjonen vi tidligere delte. For å implementere dette for deg selv, kan du følge med nedenfor. Det første trinnet er å importere modulene som kreves: Deretter kan vi laste ned aksjekursene og tranformere dem til loggendringene: Nå lader8217s skille datasettet inn i prøver for å beregne filterets opprinnelige tilstand: Nå kan vi kjøre hvert filter ved hjelp av en annen signal-til-støy-forhold: Dette er en løst koblet etterfølger til vårt forrige innlegg. Konstruere en stat arb-parhandel For et godt skrevet eksempel på hvordan du bruker en spredningsmodell med et avskjær og et sikringsforhold, sjekk TheAlgoEngineer. Interessert i ressurser for Parhandel Ønsker du å lære hvordan du kan min sosiale datakilder som Google Trends, StockTwits, Twitter, og Estimér Sørg for å laste ned vår bok Intro til sosiale data for handelsfolk Følg bloggen via e-post Post navigasjon Siste innlegg Siste kommentarer KategorierState Space Models og Kalman filteret til dags i våre tidsserieanalyseposter har vi vurdert lineære tidsseriemodeller, inkludert ARMA. ARIMA samt GARCH-modellen for betinget heteroskedastisitet. I denne artikkelen skal vi vurdere det teoretiske grunnlaget for statlige rommodeller. Den primære fordelen er at parametrene deres kan tilpasses over tid. Statlige rommodeller er svært generelle, og det er mulig å sette modellene vi har vurdert til dato i en tilstandsformulering. For å holde analysen grei, er det imidlertid ofte bedre å bruke den enklere representasjonen. Den generelle premissen til en statsrommodell er at vi har et sett med stater som utvikler seg i tid (for eksempel sikringsforholdet mellom to samordnede aksjer), men våre observasjoner av disse tilstandene inneholder statistisk støy (som for eksempel markedsmikrostrukturstøy) , og derfor kan vi aldri observere de sanne statene direkte. Målet med den statslige rommodellen er å utlede informasjon om statene, gitt observasjonene, ettersom ny informasjon kommer. En kjent algoritme for å utføre denne prosedyren er Kalman-filteret. som vi også vil diskutere i denne artikkelen. Kalman-filteret er allestedsnærværende i tekniske kontrollproblemer, blant annet veiledningsstyring, romfartøyanalyse og produksjon, men den brukes også mye i kvantitativ finansiering. For eksempel vil et Kalman filter brukes til å estimere statens verdier, som deretter brukes til å kontrollere systemet under studien. Dette introduserer en tilbakemelding loop, ofte i sanntid. For en ekstremt interessant anvendelse av Kalman Filtrering, kan man vurdere det nylig vellykkede forsøket på det private romfirmaet Space Exploration Technologies. å returnere og lande første fase av Falcon 9-raketten sin tilbake på sitt opprinnelige lanseringssted. Første trinns booster var gjenstand for et ekstremt nøyaktig dynamisk kontrollproblem, som involverer asymmetrisk tidsvarierende masse (brenselspalting) ved hypersonisk gjennom til subsoniske hastigheter: Kanskje den vanligste bruken av et Kalman-filter i kvantitativ handel er å oppdatere sikringsforhold mellom eiendeler i en statistisk arbitrage par handel. men algoritmen er mye mer generell enn dette, og vi vil se på andre bruksområder. Generelt er det tre typer innledning som vi er interessert i når vi vurderer tilstandsrommodeller: Prediksjon - Forutsi etterfølgende verdier av staten Filtrering - Estimering av nåværende verdier av tilstanden fra tidligere og nåværende observasjoner Utjevning - Beregning av statens siste verdier gitt observasjonene Filtrering og utjevning er lik, men ikke det samme. Kanskje den beste måten å tenke på forskjellen på er at vi med utjevning virkelig ønsker å forstå hva som har skjedd med stater i det siste gitt vår nåværende kunnskap, mens vi ved filtrering virkelig vil vite hva som skjer med staten akkurat nå. I denne artikkelen skal vi diskutere teorien om den statlige rommodellen og hvordan vi kan bruke Kalman-filteret til å gjennomføre de forskjellige typer inngrep som er beskrevet ovenfor. I etterfølgende artikler vil vi bruke Kalman-filteret til handelssituasjoner, for eksempel samordnede par, samt prognose for aktivpris. Vi vil benytte oss av en bayesisk tilnærming til problemet, da dette er et naturlig statistisk rammeverk for at vi lett kan oppdatere vår tro i lys av ny informasjon, som nettopp er den ønskede oppførselen til Kalman-filteret. Jeg vil advare deg om at statlige rommodeller og Kalman-filtre lider av en overflod av matematisk notasjon, selv om de konseptuelle ideene bak dem er relativt enkle. Jeg vil forsøke å forklare all denne notasjonen i dybden, da det kan være forvirrende for de nye til engineering control problemer eller state-space modeller generelt. Linear State Space Model Denne delen følger nøye notatet som brukes i både Cowpertwait et al 1 og Pole et al 2. Jeg bestemte meg for at det ikke var spesielt nyttig å finne ut min egen notasjon for Kalman-filteret, da jeg vil at du skal kunne forholde det til andre forskningsartikler eller tekster. La oss begynne med å diskutere alle elementene i den lineære tilstandsmodellmodellen. Siden systemets tilstander er tidsavhengige, må vi abonnere dem med t. Vi vil bruke thetat til å representere en kolonnevektor av statene. I en lineær tilstandsrommodell sier vi at disse tilstandene er en lineær kombinasjon av tidligere tilstand ved tid t-1, samt systemstøy (tilfeldig variasjon). For å forenkle analysen skal vi foreslå at denne støyen er hentet fra en multivariabel normalfordeling, men selvfølgelig kan andre distribusjoner brukes. Den lineære avhengigheten av tetat på den forrige tilstanden theta er gitt av matrisen Gt, som også kan være tidsvarierende (derav abonnementet t). Den multivariate tidsavhengige støyen er gitt av wt. Forholdet er oppsummert nedenfor i det som ofte kalles tilstandsligningen: Begynn med Gt theta wt-slutten Dette er imidlertid bare halvparten av historien. Vi må også diskutere observasjonene. det er det vi faktisk ser. siden delene er skjult for oss av systemstøy. Vi kan betegne (tidsavhengige) observasjoner av yt. Observasjonene er en lineær kombinasjon av nåværende tilstand og noen ekstra tilfeldig variasjon kjent som målestøy. også hentet fra en multivariate normalfordeling. Hvis vi betegner den lineære avhengighetsmatrisen av tetat på yt av Ft (også tidsavhengig), og målestøyen ved vt, har vi observasjonslikningen: start yt F t thetat vt ende Hvor F er transponeringen av F. For å kunne spesifiser helt hvilken modell vi trenger for å gi den første tilstanden theta0, samt varians-kovariansmatriser for systemstøy og målebuller. Disse begrepene er distribuert som: start theta0 sim mathcal (m0, C0) vt sim mathcal (0, Vt) wt sim mathcal (0, Wt) ende Klart det er mye notasjon for å spesifisere modellen. For fullstendighet oppsummerer jeg alle betingelsene her for å hjelpe deg med å ta tak i modellen: thetat - Modellens tilstand på tidspunktet t yt - Observasjonen av modellen ved tid t Gt - Statens overgangsmatrise mellom nåværende og tidligere stater ved tidspunkt t og t-1 henholdsvis Ft - Observasjonsmatrisen mellom nåværende observasjon og nåværende tilstand ved tid t wt - Systemstøyen hentet fra en multivariabel normalfordeling vt - Målestøyen trukket fra en multivariabel normalfordeling m0 - The middelverdien av den multivariate normalfordelingen av den opprinnelige tilstanden, theta0 C0 - Varians-kovariansmatrisen av den multivariate normalfordelingen av den opprinnelige tilstanden, theta0 Wt - Variasjonskovariansmatrisen for den multivariate normalfordeling som systemstøyen er trukket fra Vt - Variasjonskovariansmatrisen for den multivariate normalfordelingen fra hvilken målestøyen er tegnet Nå som vi har spesifisert den lineære tilstandsmodellmodellen, trenger vi en algoritme for å faktisk løse den. Det er her Kalman-filteret kommer inn. Vi kan bruke Bayes Rule og conjugate priors for å hjelpe oss med å utlede algoritmen. Kalman-filteret En bayesisk tilnærming Hvis vi husker fra artikkelen om bayesisk statistikk. Bayes Rule er gitt av: Hvor H refererer til vår hypotese eller parametere og D refererer til våre data. bevis eller observasjoner. Vi ønsker å bruke regelen til ideen om å oppdatere sannsynligheten for å se en stat gitt alle tidligere data vi har og vår nåværende observasjon. Igjen må vi introdusere mer notering. Hvis vi er på t, kan vi representere alle dataene som er kjent om systemet ved mengden Dt. Imidlertid er våre nåværende observasjoner gitt av yt. Dermed kan vi si at Dt (D, yt). Det vil si at vår nåværende kunnskap er en blanding av vår tidligere kunnskap og vår nyeste observasjon. Anvendelse av Bayes-regel for denne situasjonen gir følgende: Hva betyr dette Det står at den bakre eller oppdaterte sannsynligheten for å oppnå en statetetat, gitt vår nåværende observasjonsflate og tidligere data D, er lik sannsynligheten for å se en observasjonsflate, gitt Den nåværende tilstanden som multipliseres med tidligere eller tidligere tro på nåværende tilstand, gitt bare de forrige dataene D, normalisert av sannsynligheten for å se observasjonsnettet uansett. Selv om notasjonen kan være litt ordentlig, er det en veldig naturlig erklæring. Det står at vi kan oppdatere vårt syn på staten, det er rasjonelt med tanke på at vi har ny informasjon i form av dagens observasjon, yt. En av de ekstremt nyttige aspektene ved Bayesian inferansen er at hvis vår forutsetning og sannsynlighet begge er normalt fordelt, kan vi bruke konseptet av konjugerte priorere til å si at vår bakre (dvs. oppdatert visning av tetat) også vil bli distribuert normalt. Vi benyttet det samme konseptet, om enn med forskjellige distribusjonsformer, i diskusjonen om inngangen til binomialproprotjoner. Så hvordan hjelper dette oss med å produsere et Kalman-filter Vel, la oss spesifisere vilkårene som vi bruker, fra Bayes Rule ovenfor. For det første spesifiserer vi fordelingsformen for det foregående: begynn det D sim-matematisk (ved, Rt) ende Det er tidligere visning av theta ved tid t, gitt vår kunnskap på tidspunktet t-1 distribueres som en multivariabel normalfordeling, med gjennomsnitt på og varians-kovarians Rt. De to sistnevnte parametrene vil bli definert nedenfor. Nå kan vi vurdere sannsynligheten: start yt thetat sim mathcal (F t thetat, Vt) ende Det er sannsynligheten for dagens observasjon y ved tid t fordelt som en multivariabel normalfordeling, med gjennomsnittlig F t-tet og varians-kovarians Vt. Weve har allerede skissert disse begrepene i listen ovenfor. Endelig har vi den bakre delen av det: Begynn den Dt sim matematisk (mt, Ct) slutten Det er vår bakre syn på dagens tilstand theta ved tid t, gitt vår nåværende kunnskap på tidspunktet t, fordeles som en multivariabel normalfordeling med gjennomsnittlig mt og varians-kovarians Ct. Kalman-filteret er det som lenker alle disse betingelsene sammen for t1, ldots. Vi kommer ikke til å oppnå hvor disse verdiene faktisk kommer fra, men vi vil bare si dem. Heldigvis kan vi bruke biblioteksimplementeringer i R for å utføre den tunge løftingen for oss: Begynn på Gt m Rt Gt CG t Wt et yt - ft mt på At et ft F t Qt F t Rt Ft Vt På Rt Ft Q t Ct Rt - At Qt A t Endelig det er mye notasjon Som jeg sa ovenfor, trenger vi ikke å bekymre oss for Kalman-filterets overdrevenhet, da vi bare kan bruke biblioteker i R for å beregne algoritmen for oss. Så hvordan passer alt sammen Vel, ft er den forutbestemte verdien av observasjonen ved tid t, hvor vi foretar denne prediksjonen på tidspunktet t-1. Siden et yt - ft kan vi lett se at et er feilen som er knyttet til prognosen (forskjellen mellom f og y). Viktig er at den bakre midlet er en veiing av tidligere gjennomsnitt og prognosefeilen. siden mt på At et Gt m At et, hvor Gt og At er våre vektingsmatriser. Nå som vi har en algoritmisk prosedyre for å oppdatere våre synspunkter på observasjoner og stater, kan vi bruke den til å foreta spådommer, samt glatte dataene. Forutsigelse Den bayesiske tilnærmingen til Kalman-filteret fører naturlig til en mekanisme for prediksjon. Siden vi har vårt bakre estimat for statens tetat, kan vi forutsi de neste dagene verdier ved å vurdere gjennomsnittsverdien av observasjonen. La oss ta den forventede verdien av observasjonen i morgen. gitt vår kunnskap om dataene i dag: Hvor kommer dette fra? La oss prøve å følge analysen: Siden sannsynligheten for dagens observasjon yt, gitt dagens tilstand, blir det normalt distribuert med gjennomsnittlig F t-tet og varians-kovarians Vt (se ovenfor), har vi at forventningen om morgendagens observasjon y, gitt våre data i dag, Dt, er nettopp forventningen om den multivariate normal for sannsynligheten, nemlig EF thetat v Dt. Når vi gjør denne tilkoblingen, reduseres det ganske enkelt til å anvende regler om forventningsoperatøren til de gjenværende matriser og vektorer, noe som til slutt fører oss til f. Det er imidlertid ikke tilstrekkelig å bare beregne gjennomsnittet. vi må også kjenne variansen til morgendagens observasjon gitt dagens data, ellers kan vi ikke virkelig karakterisere fordelingen som skal tegne morgendagens prediksjon. Nå som vi har forventning og variasjon av morgendagens observasjon, gitt dagens data, er vi i stand til å gi den generelle prognosen for k fremover, ved å fullt ut prege fordelingen som disse spådommene er tegnet på: Merk at jeg har brukt en merkelig notasjon her - hva betyr det å ha et abonnement på egentlig, det tillater oss å skrive en praktisk stenografi for følgende: Som jeg har nevnt gjentatte ganger i denne artikkelen, bør vi ikke bekymre oss for mye med Kalman-filterets syn og dets notasjon, heller bør vi tenke på den generelle prosedyren og dens bayesiske grunnlag. Dermed har vi nå muligheten til å forutsi nye verdier av serien. Dette er et alternativ til prognosene produsert ved å kombinere ARIMA og GARCH. I etterfølgende artikler vil vi faktisk bære dette ut for noen virkelige økonomiske data og bruke den til en prediktiv handelsmodell. Vi vil også kunne bruke filteraspektet til å gi oss kontinuerlig oppdaterte visninger på et lineært sikringsforhold mellom to samordnede par eiendeler, slik som det finnes i en stasisk arbitrage-strategi. Referanser Cowpertwait, P. S.P. og Metcalfe, A. V. (2009). Innledende tidsserie med R. Pole, A. West, M. og Harrison, J. (1994). Applied Bayesian Prognoser. Bare Komme i gang med Quantitative TradingKalman Filterbaserte Par Trading Strategy I QSTrader Tidligere på QuantStart har vi vurdert de matematiske grunnene til State Space Models og Kalman Filters. samt anvendelsen av pykalman-biblioteket til et par ETFer for å dynamisk justere et sikringsforhold som grunnlag for en gjennomsnittlig tilbakevendende handelsstrategi. I denne artikkelen vil vi diskutere en handelsstrategi opprinnelig på grunn av Ernest Chan (2012) 1 og testet av Aidan OMahony over på Quantopian 2. Vi vil benytte seg av Python-baserte open-source QSTrader backtesting rammeverk for å implementere strategien. QSTrader vil utføre den tunge løftingen av stillingssporing, porteføljebehandling og datainntak, mens vi kun konsentrerer oss om koden som genererer handelssignalene. Handelsstrategien Parhandelsstrategien gjelder for et par Exchange Traded Funds (ETF) som begge sporer resultatene av varierende varighet amerikanske statsobligasjoner. De er: Målet er å bygge en middels reverting strategi fra dette paret ETFs. Den syntetiske spredningen mellom TLT og IEI er tidsserien som vi faktisk er interessert i å lengre eller forkorte. Kalman-filteret brukes til å dynamisk spore sikringsforholdet mellom de to for å holde spredningen stasjonær (og dermed gjennomsiktig). For å opprette handelsregler er det nødvendig å bestemme når spredningen har flyttet for langt fra forventet verdi. Hvordan avgjør vi hva for langt er Vi kunne benytte et sett av faste absolutte verdier, men disse må være empirisk bestemt. Dette ville introdusere en annen fri parameter i systemet som ville kreve optimalisering (og ytterligere fare for overfitting). En parameterløs tilnærming til å skape disse verdiene er å vurdere et flertall av standardavviket til spredningen og bruke disse som grensene. For enkelhet kan vi sette koeffisienten til multipelen til å være lik en. Derfor kan vi gå lengre spredningen dersom prognosefilen faller under spredningens negative standardavvik. Tilsvarende kan vi redusere spredningen dersom prognosefilen overstiger den positive standardavviket til spredningen. Utgangsbestemmelsene er rett og slett motsatt av inngangsreglene. Den dynamiske sikringsforholdet er representert av en komponent av den skjulte tilstandsvektoren ved tid t, thetat, som vi vil betegne som theta0t. Dette er beta-skråningsverdien som er kjent fra lineær regresjon. Langt spredningen betyr her å kjøpe (lengter) N-enheter av TLT og selge (shorting) lfloor, hvor lfloor er gulvet som representerer høyeste heltall mindre enn x. Sistnevnte er nødvendig da vi må gjennomføre et stort antall enheter av ETFene. Kortslutning av spredningen er motsatt av dette. N styrer den totale størrelsen på stillingen. et representerer prognosen feil eller residual feil av prediksjonen ved tid t, mens Qt representerer variansen av denne prediksjonen ved tid t. For fullstendighet er reglene angitt her: et lt - sqrt - Lang spredningen: Gå lang N-aksjer av TLT og gå kort lfloor-enheter i IEI et ge - sqrt - Avslutt lang: Lukk alle lange stillinger av TLT og IEI et gt sqrt - Kort spredningen: Gå kort N-aksjer av TLT og gå lang lfloor-enheter av IEI et le sqrt - Avslutt kort: Lukk alle korte stillinger av TLT og IEI Kalman-filterets rolle er å hjelpe oss med å beregne tetat, samt et og Qt. thetat representerer vektoren av avskjærings - og hellingsverdiene i den lineære regresjon mellom TLT og IEI ved tid t. Det anslås av Kalman-filteret. Prognosen feilresidual et yt - hat t er forskjellen mellom den forventede verdien av TLT i dag og Kalman filtre estimatet av TLT i dag. Qt er variansen av prognosene og dermed sqrt er standardavviket av prediksjonen. Implementeringen av strategien innebærer følgende trinn: Motta daglige OHLCV-barer for både TLT og IEI Bruk det rekursive Kalman-filteret til å estimere prisen på TLT i dag basert på gjeldende observasjoner fra IEI. Ta forskjellen mellom Kalman-estimatet av TLT og faktisk verdi, ofte kalt prognosefeilen eller gjenværende feilen. som er et mål på hvor mye spredningen av TLT og IEI beveger seg bort fra forventet verdi. Lang spredningen når bevegelsen er negativt langt fra forventet verdi og tilsvarende kort spredningen når bevegelsen er positivt langt fra forventet verdi. og korte posisjoner når serien vender tilbake til forventet verdi For å utføre denne strategien er det nødvendig å ha OHLCV-prisdata for perioden som omfattes av denne backtest. Spesielt er det nødvendig å laste ned følgende: TLT - For perioden 3. august 2009 til 1. august 2016 (lenke her) IEI For perioden 3. august 2009 til 1. august 2016 (lenke her). Disse dataene må plasseres i katalogen som er angitt av QSTrader-innstillingsfilen hvis du ønsker å kopiere resultatene. Python QSTrader Implementering Siden QSTrader håndterer stillingssporing, porteføljestyring, datainntak og ordrehåndtering, er den eneste koden vi trenger å skrive innebåret selve strategibjektet. Strategien kommuniserer med PortfolioHandler via hendelseskøen, og bruker SignalEvent-objekter til å gjøre det. I tillegg må vi importere grunnleggende abstrakte strategiklasse, AbstractStrategy. Merk at i den nåværende alfa-versjonen av QSTrader må vi også importere PriceParser-klassen. Dette brukes til å multiplisere alle priser på inngang av et stort flertall (108) og utføre heltall aritmetikk når sporingstillingene. Dette unngår flytende punktrundeproblemer som kan akkumuleres over den lange perioden av en backtest. Vi må dele alle prisene av PriceParser. PRICEMULTIPLIER for å få de riktige verdiene: Det neste trinnet er å lage KalmanPairsTradingStrategy-klassen. Arbeidet med denne klassen er å bestemme når du skal lage SignalEvent-objekter basert på mottatte BarEvent s fra de daglige OHLCV-barene i TLT og IEI fra Yahoo Finance. Det er mange forskjellige måter å organisere denne klassen på. Jeg har valgt å kode inn alle parametrene i klassen for å få klarhet i forklaringen. Ive bestemte spesielt verdien av delta10 og vt10. De representerer systemstøy og målestøyvarianter i Kalman Filter-modellen. Dette kan også implementeres som et søkeordargument i init-konstruktøren til klassen. En slik tilnærming vil tillate enkel parameteroptimalisering. Den første oppgaven er å sette tid og investerte medlemmer til å være lik None. som de vil bli oppdatert ettersom markedsdata er akseptert og handelssignaler genereres. latestprices er en to-serie av dagens priser på TLT og IEI, som brukes for enkelhets skyld gjennom klassen. Det neste settet av parametere gjelder alle Kalman-filteret og er forklart i dybden i de to foregående artiklene her og her. Det endelige settet med parametere inkluderer dager. pleide å spore hvor mange dager som har gått så vel som antall og curhedgeqty. pleide å spore de absolutte mengder ETFer for å kjøpe for både den lange og den korte siden. Jeg har satt dette til å være 2000 enheter på en egenkapital på 100.000 USD. Den neste metoden setcorrecttimeandprice er en hjelpemetode som brukes for å sikre at Kalman-filteret har all riktig prisinformasjon tilgjengelig på riktig punkt. Dette er nødvendig fordi i et hendelse-drevet backtest system som QSTrader markedsinformasjon ankommer sekvensielt. Vi kan være i en situasjon på dag K hvor vi har mottatt en pris for IEI, men ikke TFT. Derfor må vi vente til både TFT og IEI markedshendelser kommer fra backtest-løkken, gjennom hendelseskøen. I live trading er dette ikke et problem siden de kommer nesten umiddelbart sammenliknet med handelsperioden i noen dager. I en eventdrevet backtest må vi imidlertid vente på at begge prisene skal ankomme før vi beregner den nye Kalman-filteroppdateringen. Koden kontrollerer i hovedsak om den påfølgende hendelsen er for gjeldende dag. Hvis det er, blir den riktige prisen lagt til i den nyeste prislisten av TLT og IEI. Hvis det er en ny dag, tilbakestilles de siste prisene og de riktige prisene blir igjen lagt til. Denne typen husholdningsmetode vil trolig bli absorbert i QSTrader-kodebase i fremtiden, noe som reduserer nødvendigheten av å skrive boilerplate-kode, men for nå må den utgjøre en del av strategien selv. Kjernen i strategien utføres i beregningsmetoden. For det første fastsetter vi de riktige tidspunktene og prisene (som beskrevet ovenfor). Deretter sjekker vi at vi har begge priser for TLT og IEI, hvor vi kan vurdere nye handelssignaler. y er satt lik den siste prisen for IEI, mens F er observasjonsmatrisen som inneholder den siste prisen for TLT, samt en enhet plassholder for å representere avskjæringen i den lineære regresjonen. Kalman-filteret blir senere oppdatert med disse siste prisene. Endelig beregner vi prognosefeilen et og standardavviket av prognosene, sqrt. La oss løpe gjennom denne koden trinn for steg, da det ser litt komplisert ut. Den første oppgaven er å danne skalarverdien y og observasjonsmatrisen F. som inneholder prisene på henholdsvis IEI og TLT. Vi beregner varians-kovariansmatrisen R eller sett den til nullmatrisen hvis den ennå ikke er initialisert. Deretter beregner vi den nye prediksjonen av observasjons yhat, samt prognosefeilen et. Vi beregner deretter variansen av observasjonsforutsigelsene Qt så vel som standardavviket sqrtQt. Vi bruker oppdateringsreglene som er hentet her for å oppnå den bakre fordelingen av statene theta. som inneholder sikringsforhold mellom de to prisene: Til slutt genererer vi handelssignaler basert på verdiene for et og sqrt. For å gjøre dette må vi sjekke hva den investerte statusen er - enten lang, kort eller Ingen. Legg merke til hvordan vi trenger å justere den gjeldende hedge kvantiteten når vi går lang eller kort da hellingen theta0t er konstant justering i tide: Dette er all koden som er nødvendig for Strategi-objektet. Vi må også lage en backtest-fil for å inkapslere all vår handelslogikk og klassevalg. Den spesifikke versjonen er veldig lik de som brukes i eksemplarkatalogen, og erstatter egenkapitalen på 500 000 USD med 100 000 USD. Det endrer også FixedPositionSizer til NaivePositionSizer. Sistnevnte er vant til å akseptere forslagene til absolutte mengder ETF-enheter for handel som bestemt i KalmanPairsTradingStrategy-klassen. I et produksjonsmiljø ville det være nødvendig å justere dette avhengig av porteføljens risikostyringsmål. Her er den fulle koden for kalmanqstraderbacktest. py: Så lenge QSTrader er riktig installert og dataene er lastet ned fra Yahoo Finance, kan koden kjøres via følgende kommando i terminalen: Takket være mange frivillige utviklers innsats, spesielt ryankennedyio og femtotrader. koden er godt optimalisert for OHLCV bar data og utfører backtesting raskt. Strategi resultater En av de nyeste funksjonene som skal legges til QSTrader er den av tearsheet utviklet primært av nwillemse. Denne funksjonen er fortsatt i et tidlig utviklingsstadium, men vil bli demonstrert her. Et tearsheet brukes primært innenfor institusjonelle innstillinger som en personsøker beskrivelse av en handelsstrategi. Klassen TearsheetStatistics i QSTrader-kodebase repliserer mange av statistikkene som finnes i en typisk strategibestemmelsesrapport. De to øverste grafene representerer henholdsvis egenkapitalkurven og nedtjeningsgraden. Under dette er månedlige og årlige ytelsespaneler. Endelig presenteres egenkapitalkurven, handelsnivå og tidsbasert statistikk: Klikk på bildet for en større visning. Egenkapitalkurven begynner å være relativt flat for strategiens første år, men raskt eskalerer i løpet av 2011. I løpet av 2012 blir strategien betydelig mer volatil igjen under vann til 2015 og oppnår en maksimal daglig nedtaksandel på 15,79. Ytelsen øker gradvis fra den maksimale nedgangen i slutten av 2013 til 2016. Strategien har en CAGR på 8,73 med en Sharpe-andel på 0,75. Det har også en lang maksimal uttaksvarighet på 777 dager - over to år. Merk at denne strategien utføres brutto av transaksjonskostnader, slik at den sanne ytelsen sannsynligvis vil bli verre. Neste trinn Det er mye forskning som er nødvendig for å gjøre dette til en lønnsom strategi som vi vil distribuere i en levende innstilling. Potensielle forskningsveier inkluderer: Parameteroptimalisering - Variasjon av parametrene til Kalman-filteret via kryssvalideringsnettet eller noen form for maskinlæringoptimalisering. Dette introduserer imidlertid den tydelige muligheten for overfitting til historiske data. Asset Selection - Valg av flere eller alternative par av ETFs vil bidra til å legge til diversifisering i porteføljen, men øker strategiens kompleksitet, samt antall transaksjoner (og dermed transaksjonskostnader). In future articles we will consider how to carry out these procedures for various trading strategies. References 1 Chan, E. P. (2013) Algorithmic Trading: Winning Strategies and their Rationale . Wiley 2 OMahony, A. (2014) Ernie Chans EWAEWC pair trade with Kalman filter . quantopianpostsernie-chans-ewa-slash-ewc-pair-trade-with-kalman-filter Just Getting Started with Quantitative TradingStatistical Arbitrage Using the Kalman Filter One of the challenges with the cointegration approach to statistical arbitrage which I discussed in my previous post. is that cointegration relationships are seldom static: they change quite frequently and often break down completely. Back in 2009 I began experimenting with a more dynamic approach to pairs trading, based on the Kalman Filter. In its simplest form, we model the relationship between a pair of securities in the following way: beta(t) beta(t-1) w beta(t), the unobserved state variable, that follows a random walk Y(t) beta(t)X(t) v The observed processes of stock prices Y(t) and X(t) N(0,Q) meaning w is gaussian noise with zero mean and variance Q N(0,R) meaning v is gaussian noise with variance R So this is just like the usual pairs relationship Y beta X v, where the typical approach is to estimate beta using least squares regression, or some kind of rolling regression (to try to take account of the fact that beta may change over time). In this traditional framework, beta is static, or slowly changing. In the Kalman framework, beta is itself a random process that evolves continuously over time, as a random walk. Because it is random and contaminated by noise we cannot observe beta directly, but must infer its (changing) value from the observable stock prices X and Y. (Note: in what follows I shall use X and Y to refer to stock prices. But you could also use log prices, or returns). Unknown to me at that time, several other researchers were thinking along the same lines and later published their research. One such example is Statistical Arbitrage and High-Frequency Data with an Application to Eurostoxx 50 Equities . Rudy, Dunis, Giorgioni and Laws, 2010. Another closely related study is Performance Analysis of Pairs Trading Strategy Utilizing High Frequency Data with an Application to KOSPI 100 Equities . Kim, 2011. Both research studies follow a very similar path, rejecting beta estimation using rolling regression or exponential smoothing in favor of the Kalman approach and applying a Ornstein-Uhlenbeck model to estimate the half-life of mean reversion of the pairs portfolios. The studies report very high out-of-sample information ratios that in some cases exceed 3. I have already made the point that such unusually high performance is typically the result of ignoring the fact that the net PnL per share may lie within the region of the average bid-offer spread, making implementation highly problematic. In this post I want to dwell on another critical issue that is particular to the Kalman approach: the signal:noise ratio, QR, which expresses the ratio of the variance of the beta process to that of the price process. (Curiously, both papers make the same mistake of labelling Q and R as standard deviations. In fact, they are variances). Beta, being a random process, obviously contains some noise: but the hope is that it is less noisy than the price process. The idea is that the relationship between two stocks is more stable 8211 less volatile 8211 than the stock processes themselves. On its face, that assumption appears reasonable, from an empirical standpoint. The question is: how stable is the beta process, relative to the price process If the variance in the beta process is low relative to the price process, we can determine beta quite accurately over time and so obtain accurate estimates of the true price Y(t), based on X(t). Then, if we observe a big enough departure in the quoted price Y(t) from the true price at time t, we have a potential trade. In other words, we are interested in: alpha(t) Y(t) 8211 Y(t) Y(t) 8211 beta(t) X(t) where Y(t) and X(t) are the observed stock prices and beta(t) is the estimated value of beta at time t. As usual, we would standardize the alpha using an estimate of the alpha standard deviation, which is sqrt(R). (Alternatively, you can estimate the standard deviation of the alpha directly, using a lookback period based on the alpha half-life). If the standardized alpha is large enough, the model suggests that the price Y(t) is quoted significantly in excess of the true value. Hence we would short stock Y and buy stock X. (In this context, where X and Y represent raw prices, you would hold an equal and opposite number of shares in Y and X. If X and Y represented returns, you would hold equal and opposite market value in each stock). The success of such a strategy depends critically on the quality of our estimates of alpha, which in turn rest on the accuracy of our estimates of beta. This depends on the noisiness of the beta process, i. e. its variance, Q. If the beta process is very noisy, i. e. if Q is large, our estimates of alpha are going to be too noisy to be useful as the basis for a reversion strategy. So, the key question I want to address in this post is: in order for the Kalman approach to be effective in modeling a pairs relationship, what would be an acceptable range for the beta process variance Q. (It is often said that what matters in the Kalman framework is not the variance Q, per se, but rather the signal:noise ratio QR. It turns out that this is not strictly true, as we shall see). To get a handle on the problem, I have taken the following approach: (i) Simulate a stock process X(t) as a geometric brownian motion process with specified drift and volatility (I used 0, 5 and 10 for the annual drift, and 10, 30 and 60 for the corresponding annual volatility). (ii) simulate a beta(t) process as a random walk with variance Q in the range from 1E-10 to 1E-1. (iii) Generate the true price process Y(t) beta(t) X(t) (iv) Simulate an observed price process Yobs(t), by adding random noise with variance R to Y(t), with R in the range 1E-6 to 1.0 (v) Calculate the true, known alpha(t) Y(t) 8211 Yobs(t) (vi) Fit the Kalman Filter model to the simulated processes and estimate beta(t) and Yest(t). Hence produce estimates kfalpha(t) Yobs(t) 8211 Yest(t) and compare these with the known, true alpha(t). The charts in Fig. 1 below illustrate the procedure for a stock process X(t) with annual drift of 10, annual volatility 40, beta process variance Q of 8.65E-9 and price process variance R of 5.62E-2 (QR ratio of 1.54E-7). Fig. 1 True and Estimated Beta and Alpha Using the Kalman Filter As you can see, the Kalman Filter does a very good job of updating its beta estimate to track the underlying, true beta (which, in this experiment, is known). As the noise ratio QR is small, the Kalman Filter estimates of the process alpha, kfalpha(t), correspond closely to the true alpha(t), which again are known to us in this experimental setting. You can examine the relationship between the true alpha(t) and the Kalman Filter estimates kfalpha(t) is the chart in the upmost left quadrant of the figure. The correlation between the two is around 89. With a level of accuracy this good for our alpha estimates, the pair of simulated stocks would make an ideal candidate for a pairs trading strategy. Of course, the outcome is highly dependent on the values we assume for Q and R (and also to some degree on the assumptions made about the drift and volatility of the price process X(t)). The next stage of the analysis is therefore to generate a large number of simulated price and beta observations and examine the impact of different levels of Q and R, the variances of the beta and price process. The results are summarized in the table in Fig 2 below. Fig 2. Correlation between true alpha(t) and kfalpha(t) for values of Q and R As anticipated, the correlation between the true alpha(t) and the estimates produced by the Kalman Filter is very high when the signal:noise ratio is small, i. e. of the order of 1E-6, or less. Average correlations begin to tail off very quickly when QR exceeds this level, falling to as low as 30 when the noise ratio exceeds 1E-3. With a QR ratio of 1E-2 or higher, the alpha estimates become too noisy to be useful. I find it rather fortuitous, even implausible, that in their study Rudy, et al, feel able to assume a noise ratio of 3E-7 for all of the stock pairs in their study, which just happens to be in the sweet spot for alpha estimation. From my own research, a much larger value in the region of 1E-3 to 1E-5 is more typical. Furthermore, the noise ratio varies significantly from pair to pair, and over time. Indeed, I would go so far as to recommend applying a noise ratio filter to the strategy, meaning that trading signals are ignored when the noise ratio exceeds some specified level. The take-away is this: the Kalman Filter approach can be applied very successfully in developing statistical arbitrage strategies, but only for processes where the noise ratio is not too large. One suggestion is to use a filter rule to supress trade signals generated at times when the noise ratio is too large, andor to increase allocations to pairs in which the noise ratio is relatively low.

Comments

Popular posts from this blog

Montreal Børs Alternativer Handel

Av alle de kanadiske selskapene hvis aksjer handler på en børs, la jeg merke til at bare en håndfull av dem tilbyr opsjoner (samtaler, setter). Hva er årsaken til dette Ikke å tilby opsjoner på sine aksjer tegne mer oppmerksomhet til aksjen selv Et selskap bør like det og dermed bør tilby alternativer trading. Så hvorfor tilbyr mange kanadiske selskaper ikke opsjonshandel jeg så på TSX (Toronto Stock Exchange). Ett selskap (RY, Royal Bank of Canada) har opsjoner på NYSE, men ikke på TSX. Så kanskje det har noe å gjøre med TSX-utvekslingen selv, spurte Feb 3 14 kl 21:35. For det første inneholder spørsmålet ditt et par falske lokaler: Alternativer i USA handler ikke på NYSE, som er en børs. Du må ha sett på en notering fra en opsjonsutveksling. Det er en rekke opsjonsutvekslinger i USA, og mens to av disse har NYSE i navnet, refererer det til NYSE i seg selv fortsatt til børsen. Bedrifter bestemmer seg vanligvis ikke selv om opsjoner vil handle for sine aksjer. Utvekslingen og andre mar...