Thursday, 2 November 2017

Kvantitative Trading Strategier In R Del 1 Of 3


30. november 2016, kl. 12:34 For noen måneder siden leser en leser meg ut denne nye måten å koble 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 kl. 20:55 Når det gjelder å styre 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 for 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. Det 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 gode 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ærestimering og rpart. plot for treningstegning. 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 fanges her med et 50 dagers enkelt bevegelige 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. Hvis summen er større enn 0, er uken klassifisert som UP, hvis summen er negativ it8217s en NED-uke, og hvis summen er lik 0, blir ingen stilling tatt den uken (retur 0). Ovennevnte metode brukes på en sett av meget flytende ETFer. Jeg plotter under ut av egenkapitalkurver sammen med kjøp og hold strategi i samme periode. Første resultater virker oppmuntrende selv om kvaliteten på utfallet varierer sterkt av instrument. Men det er et stort rom for forbedring. Jeg legger under noen veibeskrivelser for videreanalyse Sti optimalitet. Algoritmen som brukes her for å definere trærne, er optimal ved hver deling, men det garanterer ikke optimaliteten av banen. Å legge til en beregning for å måle optimaliteten av banen ville sikkert forbedre resultatene ovenfor. Andre variabler. Jeg valgte de forklarende variablene utelukkende basert på erfaring. Det er veldig sannsynlig at dette valget ikke er bra eller optimalt. Backtest metodikk. Jeg brukte en enkel In and Out of sample metode. I en mer formell backtest vil jeg helst bruke et rullende eller ekspanderende vindu med inn og ut prøve delperioder (for eksempel gå fremoveranalyse) Som vanlig, vil eventuelle kommentarer welcomeSuccessful Backtesting of Algorithmic Trading Strategies, del 1 Denne artikkelen fortsetter serien om kvantitativ handel , som startet med Beginner8217s Guide og Strategy Identification. Begge disse lengre, mer involverte artiklene har vært veldig populære, slik at I8217ll fortsetter i denne vene og gir detaljer om temaet strategisk backtesting. Algoritmisk backtesting krever kunnskap om mange områder, inkludert psykologi, matematikk, statistikk, programvareutvikling og marketexchange mikrostruktur. Jeg kunne ikke håpe å dekke alle disse emnene i en artikkel, så I8217m skal dele dem i to eller tre mindre biter. Hva skal vi diskutere i denne delen I8217ll begynner med å definere backtesting og da vil jeg beskrive grunnleggende om hvordan det utføres. Da vil jeg belyse de forspenninger vi berørte i Beginner8217s Guide til kvantitativ handel. Neste vil jeg presentere en sammenligning av de ulike tilgjengelige backtesting programvare alternativene. I etterfølgende artikler vil vi se nærmere på detaljer om strategibestemmelser som ofte knapt nevnes eller ignoreres. Vi vil også vurdere hvordan å gjøre backtesting prosessen mer realistisk ved å inkludere idiosyncrasies av en trading utveksling. Da vil vi diskutere transaksjonskostnader og hvordan du skal modellere dem riktig i en backtest-innstilling. Vi vil ende med en diskusjon om utførelsen av våre backtests og endelig gi et eksempel på en felles kvantstrategi, kjent som en gjennomsiktig parhandel. Let8217s begynner med å diskutere hva backtesting er og hvorfor vi burde bære det ut i vår algoritmiske handel. Hva er Backtesting Algoritmisk handel står bortsett fra andre typer investeringsklasser fordi vi på en mer pålitelig måte kan gi forventninger om fremtidig ytelse fra tidligere resultater, som en konsekvens av rikelig datatilgjengelighet. Prosessen som dette utføres er kjent som backtesting. In simple terms, backtesting is carried out by exposing your particular strategy algorithm to a stream of historical financial data, which leads to a set of trading signals . Each trade (which we will mean here to be a 8217round-trip8217 of two signals) will have an associated profit or loss. The accumulation of this profitloss over the duration of your strategy backtest will lead to the total profit and loss (also known as the 8216PampL8217 or 8216PnL8217). That is the essence of the idea, although of course the 8220devil is always in the details8221 What are key reasons for backtesting an algorithmic strategy Filtration 8211 If you recall from the article on Strategy Identification. our goal at the initial research stage was to set up a strategy pipeline and then filter out any strategy that did not meet certain criteria. Backtesting provides us with another filtration mechanism, as we can eliminate strategies that do not meet our performance needs. Modelling 8211 Backtesting allows us to (safely) test new models of certain market phenomena, such as transaction costs, order routing, latency, liquidity or other market microstructure issues. Optimisation 8211 Although strategy optimisation is fraught with biases, backtesting allows us to increase the performance of a strategy by modifying the quantity or values of the parameters associated with that strategy and recalculating its performance. Verification 8211 Our strategies are often sourced externally, via our strategy pipeline . Backtesting a strategy ensures that it has not been incorrectly implemented. Although we will rarely have access to the signals generated by external strategies, we will often have access to the performance metrics such as the Sharpe Ratio and Drawdown characteristics. Thus we can compare them with our own implementation. Backtesting provides a host of advantages for algorithmic trading. However, it is not always possible to straightforwardly backtest a strategy. In general, as the frequency of the strategy increases, it becomes harder to correctly model the microstructure effects of the market and exchanges. This leads to less reliable backtests and thus a trickier evaluation of a chosen strategy. This is a particular problem where the execution system is the key to the strategy performance, as with ultra-high frequency algorithms. Unfortunately, backtesting is fraught with biases of all types. We have touched upon some of these issues in previous articles, but we will now discuss them in depth. Biases Affecting Strategy Backtests There are many biases that can affect the performance of a backtested strategy. Unfortunately, these biases have a tendency to inflate the performance rather than detract from it. Thus you should always consider a backtest to be an idealised upper bound on the actual performance of the strategy. It is almost impossible to eliminate biases from algorithmic trading so it is our job to minimise them as best we can in order to make informed decisions about our algorithmic strategies. There are four major biases that I wish to discuss: Optimisation Bias, Look-Ahead Bias, Survivorship Bias and Psychological Tolerance Bias . Optimisation Bias This is probably the most insidious of all backtest biases. It involves adjusting or introducing additional trading parameters until the strategy performance on the backtest data set is very attractive. However, once live the performance of the strategy can be markedly different. Another name for this bias is 8220curve fitting8221 or 8220data-snooping bias8221. Optimisation bias is hard to eliminate as algorithmic strategies often involve many parameters. 8220Parameters8221 in this instance might be the entryexit criteria, look-back periods, averaging periods (i. e the moving average smoothing parameter) or volatility measurement frequency. Optimisation bias can be minimised by keeping the number of parameters to a minimum and increasing the quantity of data points in the training set. In fact, one must also be careful of the latter as older training points can be subject to a prior regime (such as a regulatory environment) and thus may not be relevant to your current strategy. One method to help mitigate this bias is to perform a sensitivity analysis . This means varying the parameters incrementally and plotting a 8220surface8221 of performance. Sound, fundamental reasoning for parameter choices should, with all other factors considered, lead to a smoother parameter surface. If you have a very jumpy performance surface, it often means that a parameter is not reflecting a phenomena and is an artefact of the test data. There is a vast literature on multi-dimensional optimisation algorithms and it is a highly active area of research. I won8217t dwell on it here, but keep it in the back of your mind when you find a strategy with a fantastic backtest Look-Ahead Bias Look-ahead bias is introduced into a backtesting system when future data is accidentally included at a point in the simulation where that data would not have actually been available. If we are running the backtest chronologically and we reach time point N . then look-ahead bias occurs if data is included for any point N k . where k gt 0 . Look-ahead bias errors can be incredibly subtle. Here are three examples of how look-ahead bias can be introduced: Technical Bugs 8211 Arraysvectors in code often have iterators or index variables. Incorrect offsets of these indices can lead to a look-ahead bias by incorporating data at N k for non-zero k . Parameter Calculation 8211 Another common example of look-ahead bias occurs when calculating optimal strategy parameters, such as with linear regressions between two time series. If the whole data set (including future data) is used to calculate the regression coefficients, and thus retroactively applied to a trading strategy for optimisation purposes, then future data is being incorporated and a look-ahead bias exists. MaximaMinima 8211 Certain trading strategies make use of extreme values in any time period, such as incorporating the high or low prices in OHLC data. However, since these maximalminimal values can only be calculated at the end of a time period, a look-ahead bias is introduced if these values are used - during - the current period. It is always necessary to lag highlow values by at least one period in any trading strategy making use of them. Survivorship Bias Survivorship bias is a particularly dangerous phenomenon and can lead to significantly inflated performance for certain strategy types. It occurs when strategies are tested on datasets that do not include the full universe of prior assets that may have been chosen at a particular point in time, but only consider those that have 8220survived8221 to the current time. As an example, consider testing a strategy on a random selection of equities before and after the 2001 market crash. Some technology stocks went bankrupt, while others managed to stay afloat and even prospered. If we had restricted this strategy only to stocks which made it through the market drawdown period, we would be introducing a survivorship bias because they have already demonstrated their success to us. In fact, this is just another specific case of look-ahead bias, as future information is being incorporated into past analysis. There are two main ways to mitigate survivorship bias in your strategy backtests: Survivorship Bias Free Datasets 8211 In the case of equity data it is possible to purchase datasets that include delisted entities, although they are not cheap and only tend to be utilised by institutional firms. In particular, Yahoo Finance data is NOT survivorship bias free, and this is commonly used by many retail algo traders. One can also trade on asset classes that are not prone to survivorship bias, such as certain commodities (and their future derivatives). Use More Recent Data 8211 In the case of equities, utilising a more recent data set mitigates the possibility that the stock selection chosen is weighted to 8220survivors8221, simply as there is less likelihood of overall stock delisting in shorter time periods. One can also start building a personal survivorship-bias free dataset by collecting data from current point onward. After 3-4 years, you will have a solid survivorship-bias free set of equities data with which to backtest further strategies. We will now consider certain psychological phenomena that can influence your trading performance. We will now consider certain psychological phenomena that can influence your trading performance. Psychological Tolerance Bias This particular phenomena is not often discussed in the context of quantitative trading. However, it is discussed extensively in regard to more discretionary trading methods. It has various names, but I8217ve decided to call it 8220psychological tolerance bias8221 because it captures the essence of the problem. When creating backtests over a period of 5 years or more, it is easy to look at an upwardly trending equity curve, calculate the compounded annual return, Sharpe ratio and even drawdown characteristics and be satisfied with the results. As an example, the strategy might possess a maximum relative drawdown of 25 and a maximum drawdown duration of 4 months. This would not be atypical for a momentum strategy. It is straightforward to convince oneself that it is easy to tolerate such periods of losses because the overall picture is rosy. However, in practice, it is far harder If historical drawdowns of 25 or more occur in the backtests, then in all likelihood you will see periods of similar drawdown in live trading. These periods of drawdown are psychologically difficult to endure. I have observed first hand what an extended drawdown can be like, in an institutional setting, and it is not pleasant 8211 even if the backtests suggest such periods will occur. The reason I have termed it a 8220bias8221 is that often a strategy which would otherwise be successful is stopped from trading during times of extended drawdown and thus will lead to significant underperformance compared to a backtest. Thus, even though the strategy is algorithmic in nature, psychological factors can still have a heavy influence on profitability. The takeaway is to ensure that if you see drawdowns of a certain percentage and duration in the backtests, then you should expect them to occur in live trading environments, and will need to persevere in order to reach profitability once more. Software Packages for Backtesting The software landscape for strategy backtesting is vast. Solutions range from fully-integrated institutional grade sophisticated software through to programming languages such as C, Python and R where nearly everything must be written from scratch (or suitable 8216plugins8217 obtained). As quant traders we are interested in the balance of being able to 8220own8221 our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill 8211 The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PampL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your 8220tech stack8221. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction 8211 Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If you8217re tied into a particular broker (and Tradestation 8220forces8221 you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation 8211 An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity 8211 Certain software just isn8217t cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation 8211 Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you don8217t introduce bugs which can lead to biases. Speed of Development 8211 One shouldn8217t have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the 8220elephant in the room8221 here Speed of Execution 8211 If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost 8211 Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Description . WYSIWYG (what-you-see-is-what-you-get) spreadsheet software. Extremely widespread in the financial industry. Data and algorithm are tightly coupled. Execution . Yes, Excel can be tied into most brokerages. Customisation . VBA macros allow more advanced functionality at the expense of hiding implementation. Strategy Complexity . More advanced statistical tools are harder to implement as are strategies with many hundreds of assets. Bias Minimisation . Look-ahead bias is easy to detect via cell-highlighting functionality (assuming no VBA). Development Speed . Quick to implement basic strategies. Execution Speed . Slow execution speed 8211 suitable only for lower-frequency strategies. Cost . Cheap or free (depending upon license). Alternatives . OpenOffice Description . Programming environment originally designed for computational mathematics, physics and engineering. Very well suited to vectorised operations and those involving numerical linear algebra. Provides a wide array of plugins for quant trading. In widespread use in quantitative hedge funds. Execution . No native execution capability, MATLAB requires a separate execution system. Customisation . Huge array of community plugins for nearly all areas of computational mathematics. Strategy Complexity . Many advanced statistical methods already available and well-tested. Bias Minimisation . Harder to detect look-ahead bias, requires extensive testing. Development Speed . Short scripts can create sophisticated backtests easily. Execution Speed . Assuming a vectorisedparallelised algorithm, MATLAB is highly optimised. Poor for traditional iterated loops. Cost . Description . High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution . Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same 8220tech stack8221. Customisation . Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation . Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed . Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed . Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost . FreeOpen Source Alternatives . Ruby. Erlang. Haskell Description . Environment designed for advanced statistical methods and time series analysis. Wide array of specific statistical, econometric and native graphing toolsets. Large developer community. Execution . R possesses plugins to some brokers, in particular Interactive Brokers. Thus an end-to-end system can written entirely in R. Customisation . R can be customised with any package, but its strengths lie in statisticaleconometric domains. Strategy Complexity . Mostly useful if performing econometric, statistical or machine-learning strategies due to available plugins. Bias Minimisation . Similar level of bias possibility for any high-level language such as Python or C. Thus testing must be carried out. Development Speed . R is rapid for writing strategies based on statistical methods. Execution Speed . R is slower than C, but remains relatively optimised for vectorised operations (as with MATLAB). Cost . FreeOpen Source Alternatives . SPSS. Stata Description . Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution . Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation . CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity . C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation . Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed . C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed . CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost . Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Alternatives . C. Java. Scala Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the 8220all in one8221 nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can 8220drop in8221 to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be 8220left alone to trade8221 In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. 8212 By Michael Halls-Moore from QuantStart About the Author Mike Halls-Moore Michael graduated with a MMath in Mathematics from the University of Warwick, gained a PhD from Imperial College London in Fluid Dynamics, and was working in a hedge fund as a quantitative trading developer for the last few years in Mayfair, London. He now spends time on research, development, backtesting and implementation of intraday algorithmic trading strategies. Time really flies it is hard to believe that it has been over a month since my last post. Work and life in general have consumed much of my time lately and left little time for research and blog posts. Anyway, on to the post This post will be the first in a series of to cover a momentum strategy using R. One of my favorite strategies is a momentum or relative strength strategy. Here are just a few of the reasons why I like momentum: Simple to implement Long only or longshort portfolios Many ways to define the strength or momentum measure It just works Also, a momentum strategy lends itself well to potential for diversification. The universe of instruments can be infinite, but the instruments traded are finite. Think about it this way Investor A looks at 10 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor B looks at 100 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor A is limiting his potential for diversification by only having a universe of 10 instruments. Investor B has a much larger universe of instruments and can in theory be more diversified. Theoretically speaking, you can trade an infinite number of instruments with a finite amount of trading capital using a momentum or relative strength strategy. Check out these links for further reading In this first post of the series on momentum, I will go over some of the basic setup and functions we will be using. The first step is to get data from yahoo. Note that the for loop converts the data to monthly and subsets the data so that the only column we keep is the adjusted close column. We now have four objects (XLY, XLP, XLE, XLF) that have the Adjusted Close price. The next step is to merge these four objects into a single object holding the Adjusted Close price. We can do this in a simple one-liner in R For the factor that will be ranked, I will use the 3 period rate of change (ROC). Here8217s another way to create the symbolsclose object. create new environment to store data symEnv lt - new. env() getSymbols assigns to new environment getSymbols(symbols, from0392000-01-01039, envsymEnv) function aggregates and returns Adjusted column f lt - function(x) sym lt - sub(quot..quot, quotquot, names(x)1) Ad(to. monthly(x, indexAt039lastof039,drop. timeTRUE, namesym)) use eapply to call f() on each symbol symbolsclose lt - do. call(merge, eapply(symEnv, f)) I have problems replicating this analysis. First of all, the to. monthly(x, indexAt8221lastof8221) does not get me the last day of the month, as I would expect, for example: gt x to. monthly(x, indexAt8221lastof8221) x. Open x. High x. Low x. Close x. Volume 2012-12-29 69.71 71.44 69.57 71.42 16384800 2013-01-29 72.95 78.59 72.00 77.35 195100300 2013-02-26 77.76 79.51 77.16 77.70 128912200 x. Adjusted 2012-12-29 71.42 2013-01-29 77.35 2013-02-26 77.70 If I run the first part of code and type head(XLE) I get the following: gt head(XLE) XLE. Adjusted 2000-01-29 22.67 2000-02-27 21.71 2000-03-29 24.33 2000-04-28 23.96 2000-05-29 26.78 2000-06-28 25.30 as you can see this is totally different from what is shown in the article above, the prices are different and the index is different (not the last day of the month). Can someone explain why this is like that Why is data different Why indexAt8221lastof8221 produces the above results What is the difference between 8220lastof8221 and 8220endof8221 Thank you Oh, 8220x8221 in the above is XLE.

No comments:

Post a Comment