Saturday, 11 November 2017

Backtesting Trading Strategier Med R


Jeg er veldig ny til R og prøver å backtest en strategi Ive programmert allerede i WealthLab. Flere ting jeg ikke forstår (og det virker ikke åpenbart :) Jeg får ikke de nære prisene pent inn i en vektor. eller en slags vektor, men det begynner med struktur og jeg forstår egentlig ikke hva denne funksjonen gjør. Det er derfor min serie, 1 anrop sannsynligvis virker ikke. n-lilly (serie) virker heller ikke, men jeg trenger det for Loop Så jeg antar at hvis jeg får disse 2 spørsmålene besvart, må strategien min fungere. Jeg er veldig takknemlig for hvilken som helst hjelp. R virker ganske komplisert selv med programmeringserfaring i andre språk ja. Jeg har kopiert noen kodelinjer fra denne opplæringen og forstår egentlig ikke denne linjen. Jeg mener serie, 1 Jeg trodde ville bruke funksjonen f på kvotemerk 1 i serien. Men siden denne serien er noe kompley med struktur etc. fungerer det ikke. I39m snakker om denne opplæringen: r-bloggersbacktesting-a-trading-strategi ndash MichiZH Jun 6 13 at 14:22Backtesting: Tolking Past Backtesting er en sentral komponent i effektiv trading-systemutvikling. Det oppnås ved å rekonstruere, med historiske data, handler som ville ha skjedd tidligere, ved bruk av regler som er definert av en gitt strategi. Resultatet gir statistikk som kan brukes til å måle strategiens effektivitet. Ved hjelp av disse dataene kan handelsmenn optimalisere og forbedre sine strategier, finne tekniske eller teoretiske feil, og få tillit til strategien deres før de påføres de virkelige markedene. Den underliggende teorien er at enhver strategi som fungerte bra i det siste, vil trolig fungere godt i fremtiden, og omvendt vil enhver strategi som har gått dårlig i fortiden, sannsynligvis utføre dårlig i fremtiden. Denne artikkelen tar en titt på hvilke applikasjoner som brukes til backtest, hva slags data er oppnådd, og hvordan man bruker den Data og verktøyene Backtesting kan gi rikelig med verdifull statistisk tilbakemelding om et gitt system. Noen universelle backtesting-statistikker inkluderer: Netto fortjeneste eller tap - Netto prosentvis gevinst eller tap. Tidsramme - Tidligere datoer der testingen skjedde. Universe - Aksjer som ble inkludert i backtestet. Volatilitetsmålinger - Maks prosent prosent opp og ned. Gjennomsnitt - Prosent gjennomsnittlig gevinst og gjennomsnittlig tap, gjennomsnittlige barer holdt. Eksponering - Andel av investert kapital (eller eksponert for markedet). Nivåer - Gevinst-til-tap-forhold. Årlig avkastning - Prosentavkastning over et år. Risikojustert avkastning - Prosentavkastning som en funksjon av risiko. Typisk vil backtesting programvare ha to skjermer som er viktige. Den første tillater handelsmannen å tilpasse innstillingene for backtesting. Disse tilpasningene inkluderer alt fra tidsperiode til provisjonskostnader. Her er et eksempel på en slik skjerm i AmiBroker: Den andre skjermen er den faktiske backtesting-resultatrapporten. Her finner du all statistikk som er nevnt ovenfor. Igjen, her er et eksempel på dette skjermbildet i AmiBroker: Generelt inneholder de fleste handelsprogramvarene lignende elementer. Enkelte avanserte programvare inkluderer også tilleggsfunksjonalitet til å utføre automatisk posisjonering, optimalisering og andre mer avanserte funksjoner. De 10 budene Det er mange faktorer som handlerne tar hensyn til når de vurderer handelsstrategier. Her er en liste over de 10 viktigste tingene å huske mens backtesting: Ta hensyn til de brede markedstrendene i tidsrammen der en bestemt strategi ble testet. For eksempel, hvis en strategi bare ble testet tilbake fra 1999-2000, kan det ikke gå bra på et bjørnmarked. Det er ofte en god ide å backtest over en lang tidsramme som omfatter flere forskjellige typer markedsforhold. Ta hensyn til universet der tilbakestesting skjedde. For eksempel, hvis et bredt markedssystem er testet med et univers bestående av tech-aksjer, kan det mislykkes å gjøre det bra i ulike sektorer. Som en generell regel, hvis en strategi er rettet mot en bestemt genre av lager, begrense universet til den genren, men i alle andre tilfeller opprettholde et stort univers for testformål. Volatilitetsforanstaltninger er ekstremt viktige å vurdere i utviklingen av et handelssystem. Dette gjelder spesielt for levererte kontoer, som er utsatt for marginanrop dersom egenkapitalen faller under et bestemt punkt. Traders bør søke å holde volatiliteten lav for å redusere risikoen og muliggjøre lettere overgang inn og ut av et gitt lager. Det gjennomsnittlige antall barer som holdes er også veldig viktig å se når man utvikler et handelssystem. Selv om de fleste backtesting programvare inkluderer provisjonskostnader i de endelige beregningene, betyr det ikke at du bør overse denne statistikken. Hvis det er mulig, kan det hende at gjennomsnittlig antall barer som holdes, reduserer provisjonskostnadene, og forbedrer din generelle avkastning. Eksponering er et dobbeltkantet sverd. Økt eksponering kan føre til høyere fortjeneste eller høyere tap, mens redusert eksponering betyr lavere fortjeneste eller lavere tap. Imidlertid er det generelt en god ide å holde eksponering under 70 for å redusere risiko og muliggjøre lettere overgang inn og ut av et gitt lager. Den gjennomsnittlige gevinstløpsstatistikken, kombinert med vinner-til-tap-forholdet, kan være nyttig for å bestemme optimal plassering og pengestyring ved hjelp av teknikker som Kelly-kriteriet. (Se Money Management ved hjelp av Kelly-kriteriet.) Traders kan ta større stillinger og redusere provisjonskostnader ved å øke sine gjennomsnittlige gevinster og øke deres vinner-til-tap-forhold. Årlig avkastning er viktig fordi den brukes som et verktøy for å benchmark en systemavkastning mot andre investeringssteder. Det er viktig ikke bare å se på den samlede årlige avkastningen, men også å ta hensyn til økt eller redusert risiko. Dette kan gjøres ved å se på den risikojusterte avkastningen, som står for ulike risikofaktorer. Før et handelssystem er vedtatt, må det overgå alle andre investeringssteder med like eller mindre risiko. Backtesting tilpasning er ekstremt viktig. Mange backtesting-applikasjoner har innspill for provisjonsbeløp, runde (eller brøkdelte) masse størrelser, tikkestørrelser, marginkrav, renter, slippage-forutsetninger, stillingsreguleringsregler, same-bar-utgangsreguleringer, (bak) stoppinnstillinger og mye mer. For å få de mest nøyaktige backtesting resultatene, er jeg viktig å justere disse innstillingene for å etterligne megleren som vil bli brukt når systemet går live. Backtesting kan noen ganger føre til noe kjent som overoptimalisering. Dette er en tilstand hvor resultatene avstemmes så høyt til fortiden at de ikke lenger er like nøyaktige i fremtiden. Det er generelt en god ide å implementere regler som gjelder for alle aksjer, eller et utvalg av målrettede aksjer, og er ikke optimalisert i den grad reglene ikke lenger er forståelige av skaperen. Backtesting er ikke alltid den mest nøyaktige måten å måle effektiviteten til et gitt handelssystem. Noen ganger har strategier som har gått bra i det siste, ikke lykkes i det nåværende. Tidligere resultater er ikke en indikasjon på fremtidige resultater. Pass på å papirhandel et system som har blitt suksessfullt testet før du går, for å være sikker på at strategien fortsatt gjelder i praksis. Konklusjon Backtesting er et av de viktigste aspektene ved å utvikle et handelssystem. Hvis det opprettes og tolkes ordentlig, kan det hjelpe handelsmenn å optimalisere og forbedre strategiene, finne tekniske eller teoretiske feil, samt få tillit til strategien deres før de påføres det til de virkelige verdensmarkeder. Ressurser Tradecision (tradecision) - High-end Trading System Development AmiBroker (amibroker) - Budsjett Trading System Development. En økonomisk teori om total utgifter i økonomien og dens effekter på produksjon og inflasjon. Keynesian økonomi ble utviklet. En beholdning av en eiendel i en portefølje. En porteføljeinvestering er laget med forventning om å tjene en avkastning på den. Dette. Et forhold utviklet av Jack Treynor som måler avkastning opptjent over det som kunne vært opptjent på en risikofri. Tilbakekjøp av utestående aksjer (tilbakekjøp) av et selskap for å redusere antall aksjer på markedet. Selskaper. En skattemessig tilbakebetaling er refusjon på skatter betales til en person eller husstand når den faktiske skatteforpliktelsen er mindre enn beløpet. Den monetære verdien av alle ferdige varer og tjenester som produseres innen et land grenser i en bestemt tidsperiode. Undersøkelse av en enkel aksjemarkedsstrategi Merk: Dette innlegget er IKKE økonomisk rådgivning Dette er bare en morsom måte å utforske noen av evnene R har for importere og manipulere data. Jeg har nylig lest et innlegg på ETF-profeten som utforsket en interessant aksjemarkedsstrategi i Excel. Strategien er enkel: Finn høydepunktet på aksjen de siste 200 dagene, og telle antall dager som har gått siden det høye. Hvis det har vært mer enn 100 dager, eier aksjen. Hvis det har vært mer enn 100 dager, don8217t eier det. Denne strategien er veldig enkel, men det gir noen imponerende resultater. (Merk imidlertid at dette eksemplet bruker data som ikke er justert fra splittelser eller utbytte, og kan inneholde andre feil. Videre ignorerer vi tradingkostnader og utførelsesforsinkelser, som begge påvirker strategiytelsen.) Implementering av denne strategien i R er enkel, og gir mange fordeler i forhold til Excel, hvorav det viktigste er at å trekke aksjemarkedsdata inn i R er enkelt, og vi kan teste denne strategien på et bredt spekter av indekser med relativt liten innsats. Først og fremst laster vi ned data for GSPC ved hjelp av quantmod. (GSPC står for SampP 500-indeksen). Deretter konstruerer vi en funksjon for å beregne antall dager siden n-dagen høy i en tidsserie, og en funksjon for å implementere vår handelsstrategi. Sistnevnte funksjon tar 2 parametere: N-dagen høyt du ønsker å bruke, og antall dager over det høye vil du holde aksjen. Eksemplet er 200 og 100, men du kan enkelt bytte dette til 500-dagers høyt og se hva som skjer hvis du holder aksjene 300 dager forbi det før du springer ut. Siden denne funksjonen er parameterisert, kan vi enkelt teste mange andre versjoner av vår strategi. Vi kaster begynnelsen av strategien vår med nuller, slik at den vil være like lang som våre inngangsdata. (Hvis du ønsker en mer detaljert forklaring av dagene, Høyeste funksjon, se diskusjonen om kryssvalidert). Vi multipliserer vår posisjon (0,1) vektor med avkastningen fra indeksen for å få returneringen av strategy8217. Nå bygger vi en funksjon for å returnere litt statistikk om en handelsstrategi, og sammenligne vår strategi med referansen. Noe tilfeldig, bestemte I8217ve å se på kumulativ avkastning, gjennomsnittlig årlig avkastning, skarphet, vinnende, gjennomsnittlig årlig volatilitet, maksimal drawdown og maksimal lengdefordeling. Andre statistikker vil være enkle å implementere. Som du kan se, sammenligner denne strategien gunstig med standard 8220buy-and-hold8221-tilnærmingen. Endelig tester vi vår strategi på 3 andre indekser: FTSE som representerer Irland og Storbritannia, Dow Jones Industrial Index. som går tilbake til 1896, og N225. som representerer Japan. I8217ve har funksjonalisert hele prosessen, slik at du kan teste hver ny strategi med en linje med kode: Aldri savner en oppdatering Abonner på R-bloggere for å motta e-post med de nyeste R-postene. (Du vil ikke se denne meldingen igjen.) 30. november 2016, 12:34 For noen måneder siden forklarer en leser meg denne nye måten å koble til R og Excel. Jeg vet ikke hvor lenge dette har eksistert, men jeg kom aldri over det, og I8217ve har aldri sett noen blogginnlegg eller artikkel om det. Så jeg bestemte meg for å skrive et innlegg som verktøyet er virkelig verdt det og før noen spør, I8217m ikke relatert til selskapet på noen måte. BERT står for Basic Excel R Toolkit. It8217s er gratis (lisensiert under GPL v2), og den er utviklet av Structured Data LLC. På tidspunktet for skriving er den nåværende versjonen av BERT 1,07. Mer informasjon finner du her. Fra et mer teknisk perspektiv er BERT designet for å støtte kjører R-funksjoner fra Excel-regnearkceller. I Excel-termer, it8217s for å skrive brukerdefinerte funksjoner (UDFer) i R. I dette innlegget vil I8217m ikke vise deg hvordan R og Excel samhandler via BERT. Det er veldig gode opplæringsprogrammer her. her og her. I stedet vil jeg vise deg hvordan jeg brukte BERT til å bygge en 8220control tower8221 for min handel. Mine handelssignaler genereres ved hjelp av en lang liste med R-filer, men jeg trenger fleksibiliteten til Excel for å vise resultater raskt og effektivt. Som vist ovenfor kan BERT gjøre dette for meg, men jeg vil også skreddersy applikasjonen til mine behov. Ved å kombinere kraften i XML, VBA, R og BERT, kan jeg lage et godt og likevel kraftig program i form av en Excel-fil med minimum VBA-kode. Til slutt har jeg en enkelt Excel-fil som samler alle nødvendige oppgaver for å håndtere porteføljen min: databaseoppdatering, signalgenerering, innlevering av ordre etc8230 Min tilnærming kan brytes ned i de tre trinnene nedenfor: Bruk XML til å bygge brukerdefinerte menyer og knapper i en Excel fil. Ovennevnte menyer og knapper er i hovedsak anrop til VBA-funksjoner. Disse VBA-funksjonene er vikle rundt R-funksjoner definert ved hjelp av BERT. Med denne tilnærmingen kan jeg holde et klart skille mellom kjernen i koden min i R, SQL og Python, og alt brukt til å vise og formatere resultater som holdes i Excel, VBA amp XML. I de neste avsnittene presenterer jeg forutsetningen for å utvikle en slik tilnærming og en trinnvis veiledning som forklarer hvordan BERT kunne brukes til å bare overføre data fra R til Excel med minimal VBA-kode. 1 8211 Last ned og installer BERT fra denne linken. Når installasjonen er fullført, skal du ha en ny tilleggsmeny i Excel med knappene som vist nedenfor. Dette er hvordan BERT materialiseres i Excel. 2 8211 Last ned og installer Custom UI editor. Den Custom UI Editor lar deg lage brukerdefinerte menyer og knapper i Excel-bånd. En trinnvis prosedyre er tilgjengelig her. Steg for trinn guide 1 8211 R Kode: Den nedenfor R-funksjonen er et veldig enkelt stykke kode for illustrasjonsformål. Det beregner og returnerer residualene fra en lineær regresjon. Dette er hva vi vil hente i Excel. Lagre dette i en fil som heter myRCode. R (hvilket som helst annet navn er greit) i en katalog av ditt valg. 2 8211 funksjoner. R i BERT. Fra Excel velger du Add-Ins - gt Home Directory og åpner filen som heter funksjoner. R. I denne filen lim inn følgende kode. Pass på at du setter inn den riktige banen. Dette er bare innhenting i BERT R-filen du opprettet ovenfor. Lagre og lukk deretter filfunksjonene. R. Skulle du ønsker å gjøre noen endringer i R-filen som ble opprettet i trinn 1, må du laste den inn igjen ved hjelp av BERT-knappen 8220Reload Startup File8221 fra tilleggsmenyen i Excel 3 8211 I Excel: Opprett og lagre en fil som heter myFile. xslm (noe annet navn er greit). Dette er en makroaktivert fil som du lagrer i katalogen etter eget valg. Når filen er lagret, lukk den. 4 8211 Åpne filen opprettet ovenfor i Custom UI editor: Når filen er åpen, lim inn underkoden. Du bør ha noe slikt i XML-editoren: Denne delen av XML-koden oppretter i hovedsak en ekstra meny (RTrader), en ny gruppe (Min gruppe) og en brukerdefinert knapp (Ny knapp) i Excel-båndet. Når du er ferdig, åpner du myFile. xslm i Excel og lukker Custom UI Editor. Du bør se noe sånt. 5 8211 Åpne VBA-editor. I myFile. xlsm legg inn en ny modul. Lim inn koden nedenfor i den nylig opprettede modulen. Dette sletter tidligere resultater i regnearket før du klarte nye. 6 8211 Klikk Ny knapp. Gå nå tilbake til regnearket, og klikk på 8220New Button8221-knappen i RTrader-menyen. Du bør se noe som nedenfor vises. Guiden ovenfor er en veldig grunnleggende versjon av hva som kan oppnås ved hjelp av BERT, men det viser deg hvordan du kombinerer kraften til flere spesifikke verktøy for å bygge ditt eget tilpassede program. Fra mitt perspektiv er interessen for en slik tilnærming evnen til å lim sammen R og Excel selvsagt, men også å inkludere via XML (og batch) koden fra Python, SQL og mer. Dette er akkurat det jeg trengte. Endelig vil jeg være nysgjerrig på å vite om noen har noen erfaring med BERT 19. august 2016, kl 9:26. Når man tester handelsstrategier, er en felles tilnærming å dele det opprinnelige datasettet inn i prøvedata: den delen av dataene som er beregnet for å kalibrere modellen og ut av prøvedata: den delen av dataene som brukes til å validere kalibreringen og sikre at ytelsen skapt i prøven, blir reflektert i den virkelige verden. Som en tommelfingerregel kan rundt 70 av de opprinnelige dataene brukes til kalibrering (dvs. i prøven) og 30 for validering (dvs. ute av prøven). Deretter bidrar en sammenligning av inn og ut av prøvedata til å bestemme om modellen er robust nok. Dette innlegget tar sikte på å gå et skritt videre og gir en statistisk metode for å avgjøre om utdataene stemmer overens med det som ble opprettet i prøven. I diagrammet nedenfor representerer det blå området ut av prøveytelsen for en av mine strategier. En enkel visuell inspeksjon avslører en god passform mellom inn og ut av prøveytelsen, men hvilken grad av tillit har jeg i dette På dette stadiet ikke mye, og dette er problemet. Det som virkelig trengs, er et mål på likhet mellom inn og ut av prøvesettene. I statistiske termer kan dette oversettes som sannsynligheten for at inn - og utprøveprøveverdiene kommer fra samme fordeling. Det er en ikke-parametrisk statistisk test som gjør akkurat dette: Kruskall-Wallis-testen. En god definisjon av denne testen kunne bli funnet på R-Tutor 8220A-samlingen av dataprøver er uavhengige hvis de kommer fra ikke-relaterte populasjoner, og prøvene påvirker ikke hverandre. Bruke Kruskal-Wallis-testen. vi kan bestemme om befolkningsfordelingene er identiske uten at de antar at de skal følge den normale fordeling.8221 Den ekstra fordelen av denne testen antar ikke en normal fordeling. Det finnes andre tester av samme natur som kan passe inn i rammen. Mann-Whitney-Wilcoxon-testen eller Kolmogorov-Smirnov-testene passer perfekt til rammen beskriver her, men dette er utenfor rammen av denne artikkelen for å diskutere fordeler og ulemper ved hver av disse testene. En god beskrivelse sammen med R eksempler finnes her. Here8217s koden som brukes til å generere diagrammet ovenfor og analysen: I eksemplet ovenfor er det i prøveperioden lengre enn ut av prøveperioden, derfor har jeg tilfeldig opprettet 1000 delmengder av prøvedataene, hver av dem har samme lengde som ut av prøvedata. Deretter testet jeg hver i prøvesubset mot ut av prøvedata og jeg registrerte p-verdiene. Denne prosessen skaper ikke en eneste p-verdi for Kruskall-Wallis-testen, men en distribusjon som gjør analysen mer robust. I dette eksemplet er middelverdien av p-verdiene langt over null (0,478) som indikerer at nullhypotesen skal aksepteres: det er sterke bevis på at inn - og utgående av prøvedata kommer fra samme fordeling. Som vanlig er det som er presentert i dette innlegget et leketøyeksempel som bare riper opp overflaten av problemet og bør skreddersys for individuelle behov. Men jeg synes det foreslår et interessant og rasjonelt statistisk rammeverk for å evaluere ut av utvalgsresultater. Dette innlegget er inspirert av følgende to papirer: Vigier Alexandre, Chmil Swann (2007), Effekt av ulike optimaliseringsfunksjoner på utsatt ytelse av genetisk utviklede handelsstrategier, Forecasting Financial Markets Conference Vigier Alexandre, Chmil Swann (2010), An optimaliseringsprosess for å forbedre innsamlingen av konsistensen, et aksjemarkedssak, JP Morgan Cazenove Equity Quantitative Conference, London oktober 2010 13. desember 2015 klokken 14:03 Å gjøre kvantitativ forskning innebærer mye datakrytende og man trenger rene og pålitelige data til oppnå dette. Det som virkelig trengs er ren data som er lett tilgjengelig (selv uten en internettforbindelse). Den mest effektive måten å gjøre dette på for meg, har vært å opprettholde et sett med csv-filer. Selvfølgelig kan denne prosessen håndteres på mange måter, men jeg fant svært effektiv og enkel overtid for å opprettholde en katalog der jeg lagrer og oppdaterer csv-filer. Jeg har en CSV-fil per instrument, og hver fil er oppkalt etter instrumentet den inneholder. Grunnen til at jeg gjør det er todelt: For det første vil jeg ikke laste ned (pris) data fra Yahoo, Google etc8230 hver gang jeg vil teste en ny ide, men enda viktigere når jeg har identifisert og løst et problem, vil jeg ikke Gjør det igjen neste gang jeg trenger det samme instrumentet. Enkel, men svært effektiv hittil. Prosessen er oppsummert i tabellen nedenfor. I alt som følger, antar jeg at data kommer fra Yahoo. Koden må endres for data fra Google, Quandl etc8230 I tillegg presenterer jeg prosessen med å oppdatere daglige prisdata. Oppsettet vil variere for høyere frekvensdata og annen datasett (dvs. forskjellig fra priser). 1 8211 Innledende data nedlasting (listOfInstruments. R amp historicalData. R) FillistenOfInstruments. R er en fil som bare inneholder listen over alle instrumenter. Hvis et instrument isn8217t er en del av listen min (det vil si ingen CSV-fil i data-mappen min), eller hvis du gjør det for første gang, må du laste ned det første historiske datasettet. Eksempelet nedenfor laster ned et sett med ETFs daglige priser fra Yahoo Finance tilbake til januar 2000 og lagrer dataene i en csv-fil. 2 8211 Oppdater eksisterende data (updateData. R) Koden nedenfor starter fra eksisterende filer i den dedikerte mappen og oppdaterer dem alle etter hverandre. Jeg kjører vanligvis denne prosessen hver dag unntatt når I8217m er på ferie. For å legge til et nytt instrument, kjør du bare trinn 1 over for dette instrumentet alene. 3 8211 Opprett en batchfil (updateDailyPrices. bat) En annen viktig del av jobben er å lage en batchfil som automatiserer oppdateringsprosessen over (I8217m en Windows-bruker). Dette unngår å åpne RRStudio og kjøre koden derfra. Koden nedenfor er plassert på en. bat-fil (banen må endres med oppsettet reader8217s). Merk at jeg har lagt til en utdatafil (updateLog. txt) for å spore kjøringen. Prosessen over er ekstremt enkel fordi den bare beskriver hvordan du oppdaterer daglige prisdata. I8217ve har brukt dette på en stund, og det har jobbet veldig jevnt for meg så langt. For mer avanserte data og eller høyere frekvenser kan ting bli vanskeligere. Som vanlig mottok noen kommentarer 23. mars 2015, 20:55 Når det gjelder å forvalte en portefølje av aksjer i forhold til en referanse, er problemet svært forskjellig fra å definere en absolutt avkastningsstrategi. I den førstnevnte må man holde flere aksjer enn i den senere hvor det ikke kan holdes noe lager hvis det ikke er god nok mulighet. Årsaken til dette er sporingsfeilen. Dette er definert som standardavviket i porteføljens avkastning minus referanseavkastningen. Jo mindre aksjer holdes vs. et referanse desto høyere sporing feil (for eksempel høyere risiko). Analysen som følger er i stor grad inspirert av boken 8220Active Portfolio Management8221 av Grinold amp Kahn. Dette er Bibelen for alle som er interessert i å drive en portefølje mot et referanseindeks. Jeg oppfordrer sterkt alle med interesse for emnet å lese boka fra begynnelse til slutt. It8217 er veldig godt skrevet og legger grunnlaget for systematisk aktiv porteføljestyring (jeg har ingen tilknytning til redaktøren eller forfatterne). 1 8211 Faktoranalyse Her prøver vi å rangere så nøyaktig som mulig aksjene i investeringsuniverset på en forward return basis. Mange mennesker kom opp med mange verktøy og utallige variant av disse verktøyene er utviklet for å oppnå dette. I dette innlegget fokuserer jeg på to enkle og mye brukte beregninger: Informasjonskoeffisient (IC) og Quantiles Return (QR). 1.1 8211 Informasjonskoeffisient Horisonten for videresendingen må defineres av analytikeren, og it8217s er en funksjon av strategi8217s omsetning og alfaforfallet (dette har vært gjenstand for omfattende undersøkelser). Åpenbart må IC-er være så høye som mulig i absolutte tal. For den ivrige leseren, i boken av Grinold amp Kahn er det gitt en formel som forbinder Informasjonsforhold (IR) og IC: med bredde er antall uavhengige spill (handler). Denne formelen er kjent som den grunnleggende loven for aktiv ledelse. Problemet er at det ofte ikke er så enkelt å definere bredde som det lyder. 1.2 8211 Quantiles Return For å få et mer nøyaktig estimat av faktorforutsigelsestrømmen it8217s er nødvendig for å gå et skritt videre og gruppere aksjer ved kvantifaktor av faktorverdier, analyser deretter gjennomsnittlig videresendingsavkastning (eller hvilken som helst annen sentral tendensmetrisk) for hver av disse quantiles. Bruken av dette verktøyet er grei. En faktor kan ha en god IC, men dens prediktive kraft kan begrenses til et lite antall aksjer. Dette er ikke bra da en porteføljeforvalter må plukke aksjer i hele universet for å møte sin sporingsfeilbegrensning. God kvantilgjenoppretting er preget av et monotont forhold mellom de enkelte kvantiler og fremoveravkastning. Alle aksjene i SampP500-indeksen (på tidspunktet for skriving). Det er åpenbart at det er en overlevelsesskipsforstyrrelse: listen over aksjer i indeksen har endret seg betydelig mellom start og slutt på prøveperioden, men it8217s er godt nok bare til illustrasjonsformål. Koden nedenfor laster ned individuelle aksjekurser i SampP500 mellom januar 2005 og i dag (det tar en stund) og gjør de raske prisene tilbake i løpet av de siste 12 månedene og den siste måneden. Den førstnevnte er vår faktor, sistnevnte vil bli brukt som fremoverrettsmål. Nedenfor er koden for å beregne informasjonskoeffisient og kvantilførsel. Merk at jeg brukte quintiles i dette eksemplet, men noen annen gruppemetode (terciles, deciles etc8230) kan brukes. det avhenger egentlig av utvalgsstørrelsen, hva du vil fange og hvorvidt du vil ha en bred oversikt eller fokus på distribusjonshaler. For å estimere avkastning innenfor hver kvintil, har median blitt brukt som sentral tendens estimator. Dette tiltaket er mye mindre følsomt for utjevnere enn aritmetisk middel. Og til slutt koden for å produsere Quantiles Return diagrammet. 3 8211 Slik utnytter du informasjonen ovenfor I diagrammet over Q1 er det laveste siste 12 måneder tilbake og Q5 høyest. Det er en nesten monotonisk økning i kvantilavkastningen mellom Q1 og Q5, noe som klart indikerer at aksjer som faller inn i Q5, overgår de som faller inn i Q1 med ca. 1 per måned. Dette er veldig viktig og kraftig for en så enkel faktor (ikke egentlig en overraskelse though8230). Derfor er det større sjanser til å slå indeksen ved å overvurdere aksjene som faller inn i Q5 og undervekting de som faller inn i Q1 i forhold til referansen. En IC på 0,0206 kan ikke bety mye i seg selv, men it8217 er vesentlig forskjellig fra 0 og indikerer en god prediktiv kraft i de siste 12 månedene tilbake generelt. Formelle signifikanstest kan vurderes, men dette er utenfor rammen av denne artikkelen. 4 8211 Praktiske begrensninger Ovennevnte rammeverk er utmerket for evaluering av investeringer faktor8217s kvalitet, men det er en rekke praktiske begrensninger som må tas opp for real-life implementering: Rebalancing. I beskrivelsen ovenfor antok it8217s at porteføljen ved utgangen av hver måned er fullstendig balansert. Dette betyr at alle aksjer som faller i 1. kvartal er undervektige og alle aksjer som faller i 5. kvartal er overvektige i forhold til referanseporteføljen. Dette er ikke alltid mulig av praktiske årsaker: Noen aksjer kan utelukkes fra investeringsuniverset, det er begrensninger på industri - eller sektorvekt, det er begrensninger på omsetningen etc8230 Transaksjonskostnader. Dette er ikke tatt i betraktning i analysen ovenfor, og dette er en alvorlig bremse til virkeliggjøring. Omsetningsoverveksten blir vanligvis implementert i virkeligheten i form av straff på faktorkvalitet. Overføringskoeffisient. Dette er en utvidelse av den grunnleggende loven for aktiv ledelse, og det slapper av antakelsen om Grinold8217s modell at ledere ikke står overfor noen begrensninger som hindrer dem i å oversette sine investeringsinnsikter direkte i porteføljesats. Og til slutt, I8217m overrasket over hva som kan oppnås på mindre enn 80 kodelinjer med R8230. Som vanlig mottok noen kommentarer 14. mars 2014 kl. 13:07 Spørsmålet man alltid burde spørre seg selv når man bruker tekniske indikatorer, er det som ville være et mål kriterier for å velge indikatorparametere (f. eks. hvorfor du bruker en 14-dagers RSI i stedet for 15 eller 20 dager). Genetiske algoritmer (GA) er godt egnet verktøy for å svare på det spørsmålet. I dette innlegget viser I8217ll deg hvordan du setter opp problemet i R. Før jeg fortsetter den vanlige påminnelsen: Det jeg presenterer i dette innlegget, er bare et leketøyeksempel og ikke en invitasjon til å investere. Det er ikke en ferdig strategi heller enn en forskningside som må undersøkes videre, utvikles og skreddersys for individuelle behov. Hva er genetiske algoritmer Den beste beskrivelsen av GA jeg kom over kommer fra Cybernatic Trading en bok av Murray A. Ruggiero. 8220Genetic Algorithms ble oppfunnet av John Holland i midten av 1970 for å løse vanskelige optimaliseringsproblemer. Denne metoden bruker naturlig utvalg, overlevelse av fittest8221. Den generelle prosessen følger trinnene nedenfor: Kodifisere problemet i kromosomer Ved hjelp av kodingen, utvikle en treningsfunksjon til bruk ved å evaluere hver kromosom8217s verdi ved å løse et gitt problem. Initialisere en kromosoms befolkning. Evaluer hvert kromosom i befolkningen. Opprett nye kromosomer ved å parre to kromosomer. Dette gjøres ved å mutere og rekombinere to foreldre til å danne to barn (foreldrene er valgt tilfeldig, men partisk av deres kondisjon) Evaluere det nye kromosomet Slett et medlem av befolkningen som er mindre egnet enn det nye kromosomet og sett inn det nye kromosomet i befolkningen . Hvis stoppkriteriene er nådd (maksimalt antall generasjoner, er treningscriteriene bra nok8230), og returner deretter det beste kromosomet alternativt gå til trinn 4 Fra et handelsperspektiv er GA veldig nyttig fordi de er gode til å håndtere svært ulineære problemer. Men de har noen ubehagelige funksjoner som er verdt å nevne: Overpassing: Dette er hovedproblemet og it8217s ned til analytikeren for å sette opp problemet på en måte som minimerer denne risikoen. Datatid. Hvis problemet isn8217t er riktig definert, kan det være ekstremt lang tid å nå en anstendig løsning og kompleksiteten øker eksponentielt med antall variabler. Derfor er det nødvendig å nøye velge parametrene. Det er flere R-pakker som omhandler GA, jeg valgte å bruke den vanligste: Rgenoud Daglig sluttkurs for de fleste likvide ETFer fra Yahoo Finance går tilbake til januar 2000. I prøveperioden går fra januar 2000 til desember 2010. Ut av prøveperioden starter i januar 2011. Logikken er som følger: Treningsfunksjonen er optimalisert i løpet av prøveperioden for å oppnå et sett med optimale parametere for de valgte tekniske indikatorene. Resultatene av disse indikatorene blir deretter vurdert uten prøveperiode. Men før det gjøres må de tekniske indikatorene velges. Aksjemarkedet har to hovedtrekk som er kjent for alle som har noen handelserfaring. Langsiktig momentum og kortvarig reversering. Disse funksjonene kan oversettes med tanke på tekniske indikatorer ved å flytte gjennomsnitt over og RSI. Dette representerer et sett med 4 parametere: Look-back perioder for lengre og kortsiktige glidende gjennomsnitt, tilbaketrukket periode for RSI og RSI terskel. Parametrene er kromosomene. Det andre nøkkelelementet er treningsfunksjonen. Vi vil kanskje bruke noe som: Maksimal avkastning eller Sharpe-forhold eller minimums gjennomsnittlig Drawdown. I det følgende valgte jeg å maksimere Sharpe-forholdet. R-implementeringen er et sett med 3 funksjoner: fitnessfunksjon. definerer treningsfunksjonen (for eksempel maksimal Sharpe-forhold) som skal brukes i GA-motoren tradingStatistics. Sammendrag av handelsstatistikk for inn og ut av prøveperioder til sammenligningsformål. GA-motoren fra rgenoud-pakken Genoud-funksjonen er ganske kompleks, men I8217m skal ikke forklare hva hver parameter betyr som jeg vil beholde dette innlegget kort (og dokumentasjonen er veldig bra). I tabellen nedenfor presenterer jeg for hvert instrument de optimale parametrene (RSI-tilbaketrukket periode, RSI-terskel, Kortsiktig Moving Average og Long Term Moving Average) sammen med inn og ut av samhandelsstatistikken. Før jeg kommenterer resultatene ovenfor, vil jeg forklare noen viktige punkter. For å matche logikken som er definert ovenfor begrensede jeg parametrene for å sikre at tilbaketrukket perioden for det langsiktige glidende gjennomsnittet alltid er lengre enn det kortere glidende gjennomsnittet. Jeg har også begrenset optimisten til å velge kun løsningene med mer enn 50 bransjer i prøveperioden (for eksempel statistisk signifikans). Samlet er resultatet av utvalgene langt fra imponerende. Avkastningen er lav, selv om antall handler er små for å gjøre resultatet veldig viktig. Men there8217s er et betydelig effektivitetsutbytte mellom inn og ut av prøveperioden for Japan (EWJ), noe som sannsynligvis betyr overmontering. Dette innlegget er ment å gi leseren verktøyene til riktig bruk av GA i et kvantitativt handelsramme. Igjen, It8217 er bare et eksempel som må forbedres ytterligere. Noen mulige forbedringer for å utforske ville være: treningsfunksjon. Maksimering av Sharpe-forholdet er veldig forenklet. En 8220smarter8221-funksjon ville absolutt forbedre utvalget av utvalgsstatistikk. Vi prøver å fange et veldig greit mønster. En mer grundig mønsterforskning er definitivt nødvendig. optimalisering. Det er mange måter å forbedre måten optimaliseringen utføres på. Dette vil forbedre både beregningshastigheten og rasjonaliteten av resultatene. Koden som brukes i dette innlegget er tilgjengelig på et Gist-depot. Som vanlig kommer kommentarer velkommen 28. februar 2014, 15:52 Det er en enorm litteratur litteratur, både akademisk og empirisk om markedsforutsetninger. Mesteparten av tiden blander det to markedsfunksjoner: Magnitude og Direction. I denne artikkelen vil jeg bare fokusere på å identifisere markedsretningen bare. Målet jeg satte meg selv er å identifisere markedsforhold når oddsen er vesentlig forspent mot et opp eller ned-marked. Dette innlegget gir et eksempel på hvordan CART (klassifisering og regresjonstrær) kan brukes i denne konteksten. Før jeg fortsetter den vanlige påminnelsen: Det jeg presenterer i dette innlegget er bare et leketøy eksempel og ikke en invitasjon til å investere. Det er ikke en ferdig strategi heller enn en forskningside som må undersøkes videre, utvikles og skreddersys for individuelle behov. 1 8211 Hva er CART og hvorfor bruke det Fra statistikk er CART et sett med teknikker for klassifisering og prediksjon. Teknikken er rettet mot å produsere regler som forutsier verdien av en utfall (mål) - variabel fra kjente verdier av forklarende (forklarende) variabler. Det er mange forskjellige implementeringer, men de deler alle en generell karakteristikk, og det er det jeg er interessert i. Fra Wikipedia, Algoritmer for konstruksjon av beslutningstrender, fungerer vanligvis topp ned, ved å velge en variabel i hvert trinn som best deler opp settet av elementer. Ulike algoritmer bruker forskjellige beregninger for å måle 8220best8221. Disse måler generelt homogeniteten til målvariabelen innenfor delmengder. Disse beregningene blir brukt på hver kandidatsubset, og de resulterende verdier kombineres (for eksempel i gjennomsnitt) for å gi et mål på kvaliteten på splittelsen. CART metodikk utviser noen egenskaper som er svært velegnet for markedsanalyse: Ikke parametrisk. CART kan håndtere alle typer statistiske utdelinger, ikke lineære. CART kan håndtere et stort spekter av avhengighet mellom variabler (for eksempel ikke begrenset til lineære relasjoner) Robust til utelukker Det finnes forskjellige R-pakker som omhandler Rekursiv partisjonering, jeg bruker her rpart for trær estimering og rpart. plot for trær tegning. 2 8211 Data amp Experiment Design Daglige OHLC-priser for de fleste likvide ETFer fra januar 2000 til desember 2013 hentet fra Google Finance. I prøveperioden går fra januar 2000 til desember 2010, resten av datasettet er ute av prøveperioden. Før du kjører noen type analyse må datasettet være forberedt på oppgaven. Målvariabelen er ETFs ukentlige returreferanse definert som to tilstander av verdensresultatet (OPP eller NED). Hvis ukentlig fremover returnerer gt 0, så markerer markedet i UP-stand NED, ellers. De forklarende variablene er et sett med tekniske indikatorer fra det første daglige OHLC datasettet. Hver indikator representerer en veldokumentert markedsadferd. For å redusere støyen i dataene og for å prøve å identifisere robuste forhold, regnes hver uavhengig variabel for å ha et binært utfall. Volatilitet (VAR1). Høy volatilitet er vanligvis assosiert med et down-marked og lav volatilitet med et opp marked. Volatilitet er definert som 20 dagers rå ATR (Average True Range) spredt til det bevegelige gjennomsnittet (MA). Hvis rå ATR gt MA så VAR1 1, ellers VAR1 -1. Kortsiktig momentum (VAR2). Aksjemarkedet viser kortvarig momentumadferanse fanget her med 5 dagers enkle glidende gjennomsnitt (SMA). Hvis pris gt SMA deretter VAR2 1 annet VAR2 -1 Langsiktig momentum (VAR3). Aksjemarkedet viser langsiktig momentumadferd som er fanget her med et 50 dagers enkelt glidende gjennomsnitt (LMA). Hvis Pris gt LMA deretter VAR3 1 annet VAR3 -1 Kortvarig reversering (VAR4). Dette er fanget av CRTDR som står for nært forhold til daglig rekkevidde og beregnes som følger:. Hvis CRTDR gt 0.5, så VAR4 1 annet VAR4 -1 Autokorrelasjonsregime (VAR5). Aksjemarkedet har en tendens til å gå gjennom perioder med negative og positive autokorrelasjonsregimer. Hvis returnerer autokorrelasjon de siste 5 dagene gt 0 så VAR5 1 annet VAR5 -1 Jeg legger under et tre eksempel med noen forklaringer I treet over er banen til nåde 4: VAR3 gt0 (Langtids Momentum gt 0) og VAR4 gt 0 (CRTDR gt 0). Det røde rektangelet indikerer at dette er et NED-blad (for eksempel terminal node) med en sannsynlighet på 58 (1 8211 0,42). I markedsbetingelser betyr dette at hvis Long Term Momentum er opp og CRTDR er gt 0,5, så er sannsynligheten for en positiv avkastning neste uke 42 basert på dataene i prøveeksempler. 18 indikerer andelen av datasettet som faller inn i den terminalnoden (for eksempel blad). Det er mange måter å bruke ovenstående tilnærming til, jeg valgte å estimere og kombinere alle mulige trær. Fra samplingsdataene samler jeg alle blader fra alle mulige trær, og jeg samler dem inn i en matrise. Dette er 8220rules matrix8221 som gir sannsynligheten for neste uke å være OPP eller NED. Jeg bruker reglene i ovenstående matrise til ut av prøvedata (Jan 2011 8211 Dec 2013) og jeg sammenligner resultatene med det virkelige resultatet. Problemet med denne tilnærmingen er at et enkelt punkt (uke) kan falle inn i flere regler og til og med tilhører UP og DOWN-regler samtidig. Derfor søker jeg en stemmeordning. For en gitt uke oppsummerer jeg alle reglene som gjelder for den uken, og gir en 1 for en UP-regel og -1 for en DOWN-regel. If the sum is greater than 0 the week is classified as UP, if the sum is negative it8217s a DOWN week and if the sum is equal to 0 there will be no position taken that week (return 0) The above methodology is applied to a set of very liquid ETFs. I plot below the out of sample equity curves along with the buy and hold strategy over the same period. Initial results seem encouraging even if the quality of the outcome varies greatly by instrument. However there is a huge room for improvement. I put below some directions for further analysis Path optimality . The algorithm used here for defining the trees is optimal at each split but it doesn8217t guarantee the optimality of the path. Adding a metric to measure the optimality of the path would certainly improve the above results. Other variables . I chose the explanatory variables solely based on experience. It8217s very likely that this choice is neither good nor optimal. Backtest methodology . I used a simple In and Out of sample methodology. In a more formal backtest I would rather use a rolling or expanding window of in and out sample sub-periods (e. g. walk forward analysis) As usual, any comments welcome

No comments:

Post a Comment