Wednesday 8 November 2017

Quantstart Forex Trading


Quant Strategies - er de for deg Kvantitative investeringsstrategier har utviklet seg til svært komplekse verktøy med advent av moderne datamaskiner, men strategierne går tilbake over 70 år. De drives vanligvis av høyt utdannede lag og bruker proprietære modeller for å øke sin evne til å slå markedet. Det er til og med hylleprogrammer som er plug-and-play for de som søker enkelhet. Quant modeller fungerer alltid bra når de testes på nytt, men deres faktiske applikasjoner og suksessrate kan diskuteres. Mens de ser ut til å fungere godt i oksemarkeder. når markeder går til haywire, blir kvantstrategier utsatt for samme risiko som enhver annen strategi. Historien En av grunnleggerne av studiet av kvantitativ teori anvendt på økonomi var Robert Merton. Du kan bare forestille seg hvor vanskelig og tidkrevende prosessen var før bruk av datamaskiner. Andre teorier i økonomi utviklet seg også fra noen av de første kvantitative studiene, inkludert grunnlaget for porteføljediversifisering basert på moderne porteføljeorientering. Bruken av både kvantitativ finansiering og kalkulator førte til mange andre vanlige verktøy, blant annet en av de mest berømte, Black-Scholes opsjonsprisformelen, som ikke bare hjelper investorer til å velge prisalternativer og utvikle strategier, men bidrar til å holde markedene i kontroll med likviditeten. Når det brukes direkte til porteføljestyring. Målet er som enhver annen investeringsstrategi. å legge til verdi, alfa eller meravkastning. Kandidater, som utviklerne kalles, komponerer komplekse matematiske modeller for å oppdage investeringsmuligheter. Det er så mange modeller der ute som quants som utvikler dem, og alle hevder å være de beste. En av investeringsstrategys bestselgende poeng er at modellen, og til slutt datamaskinen, gjør den faktiske buysell-avgjørelsen, ikke et menneske. Dette har en tendens til å fjerne enhver følelsesmessig respons som en person kan oppleve når han kjøper eller selger investeringer. Kvantstrategier er nå akseptert i investeringssamfunnet og drives av verdipapirfond, hedgefond og institusjonelle investorer. De går vanligvis etter navnet alpha generatorer. eller alfa-gens. Bak gardinen På samme måte som i guiden Oz, er noen bak gardinen som kjører prosessen. Som med hvilken som helst modell, er det bare så godt som det menneske som utvikler programmet. Mens det ikke er noe spesifikt krav for å bli en kvant, kombinerer de fleste firmaer som kjører kvantmodeller ferdighetene til investeringsanalytikere, statistikere og programmerere som koden prosessen inn i datamaskinene. På grunn av den komplekse naturen til de matematiske og statistiske modellene, er det vanlig å se legitimasjon som utdannelsesgrader og doktorgrad i økonomi, økonomi, matte og ingeniørfag. Historisk har disse gruppemedlemmene jobbet i bakkene. men som kvantmodeller ble mer vanlig, flytter kontoret til frontkontoret. Fordeler med Quant Strategies Mens den samlede suksessraten er diskutabel, er årsaken til at noen kvantstrategier fungerer, at de er basert på disiplin. Hvis modellen har rett, fortsetter disiplinen strategien å arbeide med lyndrevne datamaskiner for å utnytte ineffektivitet i markedene basert på kvantitative data. Modellene selv kan være basert på så lite som noen forhold som PE. gjeld til egenkapital og lønnsvekst, eller bruk tusenvis av innganger som samarbeider samtidig. Suksessfulle strategier kan hente på trender i sine tidlige stadier, da datamaskiner stadig driver scenarier for å finne ineffektivitet før andre gjør. Modellene er i stand til å analysere en veldig stor gruppe investeringer samtidig, der den tradisjonelle analytikeren kanskje ser på bare noen få om gangen. Skjermeprosessen kan rangere universet etter karakternivåer som 1-5 eller A-F, avhengig av modellen. Dette gjør den faktiske handelsprosessen veldig enkel ved å investere i de høyt vurderte investeringene og selge de lavt vurderte. Quant modeller åpner også variasjoner av strategier som lang, kort og longshort. Suksessfulle kvantfonde holder et godt øye med risikokontroll på grunn av deres modellers natur. De fleste strategier starter med et univers eller referanse og bruker sektor og bransjeviktinger i sine modeller. Dette gjør at midlene kan styre diversifiseringen til en viss grad uten å kompromittere modellen selv. Quant midler kjører vanligvis på lavere pris fordi de ikke trenger så mange tradisjonelle analytikere og porteføljeforvaltere å drive dem. Ulemper med Quant Strategies Det er grunner til at så mange investorer ikke fullt ut omfavner konseptet om å la en svart boks kjøre sine investeringer. For alle de vellykkede kvantfondene der ute, virker like mange som mislykkes. Dessverre for kjendisens omdømme, når de feiler, feiler de stor tid. Langsiktig kapitalforvaltning var en av de mest berømte quant hedgefondene, da den ble drevet av noen av de mest respekterte akademiske ledere og to Nobels minnesprisvinnende økonomer Myron S. Scholes og Robert C. Merton. I løpet av 1990-tallet genererte deres lag over gjennomsnittet avkastning og tiltrukket kapital fra alle typer investorer. De var berømte for ikke bare å utnytte ineffektivitet, men også å bruke enkel tilgang til kapital for å skape enorme løftede spill på markedsretninger. Den disiplinerte naturen til deres strategi skapte faktisk svakheten som førte til deres sammenbrudd. Langsiktig kapitalforvaltning ble likvidert og oppløst i begynnelsen av 2000. Dens modeller inneholdt ikke muligheten for at den russiske regjeringen kunne standardisere noen av sin egen gjeld. Denne hendelsen utløste hendelser og en kjedereaksjon forstørret av løfteskapt opprør. LTCM var så tungt involvert i andre investeringsoperasjoner at dets sammenbrudd påvirket verdensmarkedet, noe som utløste dramatiske hendelser. I det lange løp gikk føderalbanken inn for å hjelpe, og andre banker og investeringsfond støttet LTCM for å forhindre ytterligere skade. Dette er en av grunnene til at kvantfondene kan mislykkes, da de er basert på historiske hendelser som kanskje ikke inkluderer fremtidige hendelser. Mens et sterkt kvantteam stadig vil legge til nye aspekter til modellene for å forutsi fremtidige hendelser, er det umulig å forutsi fremtiden hver gang. Kvantfonde kan også bli overveldet når økonomien og markedene opplever større volatilitet enn gjennomsnittet. Kjøpesalgssignaler kan komme så fort at den høye omsetningen kan skape høye provisjoner og skattepliktige hendelser. Quant midler kan også utgjøre en fare når de markedsføres som bjørnsikre eller er basert på korte strategier. Forutsier nedgangstider. bruk av derivater og kombinere innflytelse kan være farlig. En feil sving kan føre til implosjoner, noe som ofte gjør nyheten. Bunnlinjen Kvantitative investeringsstrategier har utviklet seg fra back office-svarte bokser til vanlige investeringsverktøy. De er designet for å utnytte de beste sinnene i virksomheten og de raskeste datamaskinene til både å utnytte ineffektivitet og bruke innflytelse til å gjøre markedsbud. De kan være svært vellykkede hvis modellene har tatt med alle de riktige inngangene og er krevende nok til å forutsi unormale markedshendelser. På baksiden, mens kvantfondene er strengt testet tilbake til de jobber, er deres svakhet at de stole på historiske data for deres suksess. Mens investering i kvant-stil har sin plass i markedet, er det viktig å være oppmerksom på manglene og risikoen. Å være konsistent med diversifiseringsstrategier. det er en god ide å behandle kvantstrategier som en investeringsstil og kombinere den med tradisjonelle strategier for å oppnå riktig diversifisering. En type skatt belastet kapitalgevinster pådratt av enkeltpersoner og selskaper. Kapitalgevinst er fortjenesten som en investor. En ordre om å kjøpe en sikkerhet til eller under en spesifisert pris. En kjøpsgrenseordre tillater handelsmenn og investorer å spesifisere. En IRS-regelen (Internal Revenue Service) som tillater straffefri uttak fra en IRA-konto. Regelen krever det. Det første salg av aksjer av et privat selskap til publikum. IPO er ofte utstedt av mindre, yngre selskaper som søker. Gjeldsgrad er gjeldsgrad som brukes til å måle selskapets økonomiske innflytelse eller en gjeldsgrad som brukes til å måle en person. En type kompensasjonsstruktur som hedgefondsledere vanligvis bruker i hvilken del av kompensasjonen som er ytelsesbasert. Forex Trading Diary 5 - Trading Multiple Currency Par I går publiserte jeg noen viktige endringer i QSForex-programvaren. Disse endringene har økt bruken av systemet betydelig til det punktet hvor det er nesten klart for flerdagers tick-data backtesting over en rekke valutapar. Følgende endringer er lagt ut på Github: Ytterligere modifikasjon til både Posisjon og Porteføljeobjekter for å tillate at flere valutapar blir handlet, så vel som valutaer som ikke er denominert i kontovalutaen. Derfor kan en GBP-deonomert konto nå handle med EURUSD, for eksempel. Fullstendig overhaling av hvordan beregning av posisjon og portefølje åpnes, lukkes, tilføyes og flyttes av enheter. Posisjonsobjektet utfører nå den tunge løftingen, og etterlater en relativt slank porteføljeobjekt. Tilgang til den første ikke-trivielle strategien, nemlig den kjente Flytte Gjennomsnittlige Crossover-strategien med et par enkle bevegelige gjennomsnitt (SMA). Endring til backtest. py for å gjøre det enkeltrådig og deterministisk. Til tross for min optimisme at en multi-threaded tilnærming ikke ville være for skadelig for simuleringsnøyaktigheten, fant jeg det vanskelig å oppnå tilfredsstillende backtesting resultater med en multi-threaded tilnærming. Introdusert et veldig grunnleggende Matplotlib-basert utskriftskript for visning av egenkapitalkurven i porteføljen. Egenkapitalkurven er tidlig, og krever fortsatt mye arbeid. Som jeg nevnte i forrige oppføring. for de av dere som ikke er kjent med QSForex og kommer til denne forex dagbokserien for første gang, foreslår jeg sterkt at du leser av følgende dagboksposter for å komme opp til fart med programvaren: I tillegg til Github-siden for QSForex : Flere valutasupport En funksjon som jeg kontinuerlig har diskutert i disse dagbokspostene, er muligheten til å støtte flere valutapar. På dette stadiet har jeg nå endret programvaren for å tillate forskjellig kontoverdier, siden tidligere GBP var den hardkodede valutaen. Det er også nå mulig å handle i andre valutapar, unntatt de som består av en base eller et sitat i japansk yen (JPY). Sistnevnte skyldes hvordan kryssstørrelser er caclulated i JPY valutaer. For å oppnå dette har jeg endret hvordan fortjenesten beregnes når enheter fjernes eller posisjonen er stengt. Her er den nåværende koden for beregning av pips, i posisjons. py-filen: Hvis vi lukker posisjonen for å oppnå en gevinst eller tap, må vi bruke følgende kutt for lukkeposisjon. også i posisjons. py-filen: For det første oppnår vi bud - og spørprisene for både valutaparet som handles, så vel som quotehome-valutaparet. For eksempel, for en konto i GBP, hvor vi handler EURUSD, må vi få priser for USDGBP, siden EUR er basisvalutaen og USD er sitatet. På dette stadiet kontrollerer vi om posisjonen selv er en lang eller kort posisjon, og deretter beregner du riktig fjerningspris og quotehome fjerne pris, som er oppgitt med henholdsvis removeprice og qhclose. Vi oppdaterer nå gjeldende og gjennomsnittlige priser innenfor stillingen og til slutt beregner PampL ved å multiplisere pips, quotehome-fjerningsprisen og deretter antall enheter ble avsluttet. Vi har helt eliminert behovet for å diskutere eksponering, som var en overflødig variabel. Denne formelen gir deretter PampL riktig mot eventuelle valutaparhandel (ikke-JPY-valuta). Overhaling av stilling og porteføljehåndtering I tillegg til muligheten til å handle i flere valutapar, har jeg også raffinert hvordan posisjon og portefølje deler ansvaret for åpnings - og lukkeposisjoner, samt å legge til og subtrahere enheter. Spesielt flyttet Ive mye av posisjonshåndteringskoden som var i portfolio. py til position. py. Dette er mer naturlig siden stillingen skal ta vare på seg selv og ikke delegere den til porteføljen Spesielt tilleggene. removeunits og closeposition metoder har blitt opprettet eller forbedret: I de to siste kan du se hvordan den nye formelen for beregning av fortjeneste er implementert. En stor del av funksjonaliteten til porteføljeklassen er dermed tilsvarende redusert. Spesielt metodene legges til. addpositionunits. removepositionunits og closeposition har blitt modifisert for å ta hensyn til det faktum at beregningsarbeidet gjøres i posisjonsobjektet: I hovedsak kontrollerer de alle (bortsett fra tillegg) bare om posisjonen eksisterer for det valutaparet og deretter kaller den tilsvarende Posisjonsmetoden , ta hensyn til fortjeneste om nødvendig. Moving Average Crossover Strategy Vi har diskutert Moving Average Crossover-strategien før på QuantStart. i sammenheng med aksjehandel. Det er en veldig nyttig test-bed-indikatorstrategi fordi det er enkelt å kopiere beregningene for hånd (i hvert fall ved lavere frekvenser) for å kontrollere at backtesteren oppfører seg som det skal. Den grunnleggende ideen til strategien er som følger: To separate enkle glidende gjennomsnittsfiltre opprettes, med varierende tilbakekoblingsperioder, av en bestemt tidsserie. Signaler for å kjøpe eiendelen oppstår når det kortere tilbakegangsgjenomsnittet overstiger det lengre tilbakegående glidende gjennomsnittet. Hvis det lengre gjennomsnittet senere overgår kortere gjennomsnitt, blir aktiva solgt tilbake. Strategien fungerer bra når en tidsserie går inn i en periode med sterk trend og så sakte reverserer trenden. Gjennomføringen er enkel. For det første gir vi en metode calcrollingsma som gir oss mulighet til å utnytte SMA-beregningen tidligere for å generere den nye, uten å måtte beregne SMA på hvert trinn. For det andre genererer vi signaler i to tilfeller. I det første tilfellet genererer vi et signal hvis den korte SMA overskrider den lange SMA og ikke var lenge valutaparet. I andre tilfelle genererer vi et signal hvis den lange SMA overskrider den korte SMA, og vi er allerede lange. Jeg har satt standardvinduet til å være 500 ticks for den korte SMA og 2000 ticks for den lange SMA. Naturligvis i en produksjonsinnstilling vil disse parametrene bli optimalisert, men de fungerer godt for våre testformål. Single-threaded Backtester En annen viktig endring var å modifisere den backtesting komponenten å være single-threaded, heller enn multi-threaded. Jeg har gjort denne endringen fordi jeg hadde svært vanskelig tid å synkronisere tråder til å utføre på en måte som ville skje i et levende miljø. Det innebar i utgangspunktet at inngangs - og utgangsprisene var svært urealistiske, ofte forekommende (virtuelle) timer etter at selve krysset var mottatt. Derfor integrerte jeg streaming av TickEvent-objekter i backtesting loop, som du kan se i følgende utdrag av backtest. py: Merk linjepekeren. streamnexttick (). Dette kalles før en avstemning av hendelsekøen og som sådan vil det alltid garanteres at en ny hekkehendelse vil ha kommet før køen blir pollet igjen. Spesielt betyr det at et signal utføres når nye markedsdata kommer fram, selv om det er noe lag i bestillingsprosessen på grunn av glidning. Ive stiller også en maksimumsverdier som styrer hvor lenge backtesting loop fortsetter. I praksis må dette være ganske stort når det gjelder flere valutaer over flere dager, men Ive angir det til en standardverdi som tillater en enkeltdagsdata for ett valutapar. Streamnextick-metoden i prishandler-klassen ligner strømtastaturet bortsett fra at den kaller iteratoren neste () - metoden manuelt, i stedet for å utføre tippestrømmen i en for loop: Legg merke til at den stopper ved mottak av et StopIteration-unntak. Dette gjør at koden kan gjenoppta snarere enn å krasje ved unntaket. Matplotlib Output Ive opprettet også et veldig grunnleggende Matplotlib utgangsscript for å vise egenkapitalkurven. output. py bor i backtestkatalogen av QSForex og er gitt nedenfor: Legg merke til at det er en ny settings. py-variabel nå kalt OUTPUTRESULTSDIR. som må settes inn i innstillingene dine. Jeg har det peker på en midlertidig katalog andre steder på filsystemet mitt fordi jeg ikke vil tilfeldigvis legge til noen egenkapitalbacktestresultater til kodebase Egenkapitalkurven fungerer ved å ha en balanseverdi lagt til en liste over ordbøker, med en ordbok som tilsvarer en tidsstempel. Når back-testen er fullført, blir listen over ordbøker konvertert til en Pandas DataFrame, og tocsv-metoden brukes til å utdata equity. csv. Dette utdata-skriptet leser bare i filen og plotter balansen i den påfølgende DataFrame. Du kan se koden for appendequityrow og outputresults-metodene i porteføljeklassen under: Hver gang executesignal heter, blir den tidligere metoden kalt og legger til timestampbalansverdien til egenkapitalmedlemmet. På slutten av backtest kalles outputresultater som bare konverterer listen over ordbøker til en DataFrame og deretter utdata til den angitte OUTPUTRESULTSDIR katalogen. Dessverre er dette ikke en spesielt hensiktsmessig måte å skape en egenkapitalkurve på, da det bare oppstår når et signal genereres. Dette betyr at det ikke tar hensyn til urealisert PampL. Mens dette er hvordan faktisk handel skjer (du har ikke faktisk gjort noen penger før du lukker en stilling) betyr det at egenkapitalkurven forblir helt flat mellom balanseoppdateringer. Verre, Matplotlib vil som standard linjært interpolere mellom disse punktene, og dermed gi feilaktig inntrykk av urealisert PampL. Løsningen på dette problemet er å skape en urealisert PampL-spor for posisjonsklassen som oppdaterer riktig på hvert kryss. Dette er litt mer beregningsfullt dyrt, men tillater en mer nyttig egenkapitalkurve. Denne funksjonen er planlagt for en senere dato Neste trinn Den neste hovedoppgaven for QSForex er å tillate flerdagers tilbakemelding. For øyeblikket laster HistoricCSVPriceHandler-objektet bare en enkeltdags verdi av DukasCopy-kryssdata for noen spesifiserte valutapar. For å tillate flerdagers testing, vil det være nødvendig å laste og streame hver dag i rekkefølge for å unngå å fylle RAM med hele historien til kryssdata. Dette vil kreve en modifisering av hvordan streamnexttick-metoden fungerer. Når det er fullført, vil det tillate langsiktig strategi backtesting på tvers av flere par. En annen oppgave er å forbedre produksjonen av egenkapitalkurven. For å kunne beregne noen av de vanlige resultatene (for eksempel Sharpe Ratio) må vi beregne prosentvis avkastning over en bestemt tidsperiode. Dette krever imidlertid at vi legger opp kryssdataene i stolper for å beregne en avkastning for en bestemt tidsperiode. Slike binning må skje ved en samplingsfrekvens som ligner handelsfrekvensen, eller Sharpe-forholdet vil ikke være reflekterende over den sanne risikoen for strategien. Denne binning er ikke en triviell øvelse, da det er mange forutsetninger som går inn i å generere en pris for hver bin. Når disse to oppgavene er fullført, og tilstrekkelig informasjon er innhentet, vil vi være i stand til å backtest et bredt spekter av tick-data-baserte forexstrategier og produsere egenkapitalkurver, netto etter de fleste transaksjonskostnader. I tillegg vil det være ekstremt greit å teste disse strategiene på OANDAs praksispapirhandelskonto. Dette bør gi deg mulighet til å ta mye bedre beslutninger om å kjøre en strategi i forhold til et mer forskningsorientert backtesting system. Bare Komme i gang med Kvantitativ TradingForex Trading Dagbok 3 - Åpne Sourcing Forex Trading System I dagens inngang av Forex Trading Dagbok Jeg vil diskutere langsiktige plan for Forex trading system. I tillegg vil jeg skissere hvordan jeg brukte Pythons Decimal datatype for å gjøre beregningene mer nøyaktige. Hittil har vi eksperimentert med OANDA resten API for å se hvordan det sammenlignet med API levert av Interactive Brokers. Weve har også sett hvordan man legger til i et grunnleggende portefølje replikeringselement som det første skrittet mot et skikkelig hendelsesdrevet backtesting system. Ive hadde også noen nyttige kommentarer til både tidligere artikler (1 og 2), noe som tyder på at mange av dere er opptatt av å endre og utvide koden selv. Åpne Sourcing Forex Trading System Av de grunnene som er skissert ovenfor har jeg besluttet å åpne kilde forex trading system. Hva betyr dette? Det betyr at all nåværende og fremtidig kode vil være tilgjengelig gratis, under en liberal MIT open source lisens, på Github versjonskontroll nettside på følgende URL: githubmhallsmooreqsforex. For de av dere som har brukt git og Github før, kan dere git klone repoet og begynne å endre det til egne formål. QuantStart Automated Forex Trading System er nå åpen kildekode under en liberal MIT lisens. Du finner den nyeste koden på Github under qsforex-depotet på githubmhallsmooreqsforex. For de av dere som er nye for kildeversjonskontroll, vil du sannsynligvis ønske å lese om hvordan git (og versjonskontroll generelt) fungerer med den fantastiske gratis eBok Pro Git. Det er verdt å bruke litt tid på å lære om kildekontroll, da det vil spare deg for en stor mengde fremtidig hodepine hvis du bruker mye tidsprogrammering og oppdatering av prosjekter. Den raske starten på et Ubuntu-system er å installere git: Du må da lage en katalog for qsforex-prosjektet å bo i og klone prosjektet fra Github-siden som følger: På dette tidspunktet må du opprette et virtuelt miljø for å kjøre koden: Du må da installere kravene (dette vil ta litt tid): Endelig må du opprette en symbolsk lenke i ditt virtuelle virtuelle miljø i Python, slik at du kan skrive inn qsforex i koden din (og kjøre den): Som nevnt i de forrige oppføringene må du opprette de nødvendige miljøvariablene for din OANDA autentiseringsinformasjon. Vennligst se dagbokspost 2 for instruksjoner om hvordan du gjør dette. Vær oppmerksom på README knyttet til repo, da det inneholder installasjonsinstruksjoner, en ansvarsfraskrivelse og en garanti om bruk av koden. Siden programvaren er i alfa-modus, blir disse instruksjonene enklere når tiden går. Spesielt vil jeg prøve å pakke prosjektet inn i en Python-pakke slik at det enkelt kan installeres via pip. Hvis du har spørsmål om installasjonsprosedyren, vennligst ikke nøl med å sende meg en e-post på mikequantstart. Langsiktig plan Filosofien i forex trading systemet, som med resten av QuantStart nettstedet, er å prøve og etterligne real-life trading så mye som mulig i vår backtesting. Dette innebærer blant annet detaljer som ofte utelukkes fra flere forskningsorienterte backtesting situasjoner. Latency, serverbrudd, automatisering, overvåking, realistiske transaksjonskostnader vil alle bli inkludert i modellene for å gi oss en god ide om hvor godt en strategi er sannsynlig å utføre. Siden vi vil ha tilgang til tick-data (bidaskidsstempler), vil vi kunne innlemme spredningen i transaksjonskostnadene. Vi kan også modellere slippage. Det er mindre straighforward å modellere markedsvirkninger, selv om dette er mindre av en bekymring for mindre handelsbeløp. I tillegg til transaksjonskostnader ønsker vi å modellere robust porteføljestyring ved hjelp av risikooverlays og posisjonering. Så hva er for tiden inkludert i Forex Trading System til dato Event-Driven Architecture - Forex trading system er designet som et hendelse-drevet system fra grunnen opp, da dette er hvordan et intraday trading system vil bli implementert i et levende miljø . Pris Streaming - Vi har et grunnleggende pris streaming objekt. Dette håndterer for øyeblikket abonnement på bare ett par, men vi kan enkelt endre dette for å abonnere på flere valutapar. Signalgenerering - Vi kan innlemme handelsstrategier (basert direkte på fortid og nåværende tickepriser) ved hjelp av strategibjektet, som skaper SignalEvent-objekter. Ordreutførelse - Vi har et naivt ordreutføringssystem som blindt sender ordrer fra Porteføljen til OANDA. Blindt mener jeg at det ikke er noen risikostyring eller posisjonering som utføres, eller algoritmisk utførelse som kan føre til reduserte transaksjonskostnader. GBP Base Valuta - For å holde ting enkelt, har jeg bare skrevet systemet for GBP basevaluta. Dette er kanskje det viktigste aspektet for å modifisere gitt hvor mange av dere vil trenge kontoer som er nevnt i USD, EUR, CAD, JPY, AUD og NZD GBPUSD Trading - Jeg plukket kabelen som valutapar for å teste de opprinnelige Posisjon og Porteføljeobjektene med. Å håndtere flere valutapar er et viktig neste skritt. Dette vil innebære endring av posisjon og porteføljeberegninger. Dekimal håndtering - Et hvilket som helst produksjonshandelssystem må korrekt håndtere valutaberegninger. Spesielt bør valutaverdier ikke lagres som flytende datatyper, siden avrundingsfeilene vil akkumulere. Vennligst se denne fantastiske artikkelen om flytende punktrepresentasjoner for flere detaljer. LongShort Trading - Mellom dagbokoppføringene 2 og 3 har jeg lagt til evnen til å korte et valutapar (i motsetning til bare å kunne gå lenge). Avgjørende, dette er også enhetstestet. Lokal porteføljehåndtering - Etter min mening utfører en backtest som oppblåser strategisk ytelse på grunn av urealistiske antagelser, er irriterende i beste fall og ekstremt ulønnsom i verste fall. Innføring av et lokalt porteføljeobjekt som replikerer OANDA-beregningene, betyr at vi kan sjekke våre interne beregninger mens du utfører praksis handel. noe som gir oss større tillit når vi senere bruker samme porteføljeobjekt for backtesting på historiske data. Unit Tests for PositionPortfolio - Selv om jeg ikke har nevnt det direkte i dagbokoppføringer 1 og 2, har jeg faktisk skrevet noen enhetstester for porteføljen og posisjonobjektene. Siden disse er så avgjørende for beregningene av strategien, må man være svært sikker på at de utfører som forventet. En ekstra fordel ved slike tester er at de tillater at den underliggende beregningen endres, slik at hvis alle tester fortsatt passerer, kan vi være sikre på at det totale systemet vil fortsette å oppføre seg som forventet. På dette stadiet mangler Forex Trading System følgende funksjonalitet: Slippage Handling - Systemet genererer for tiden mye slipp på grunn av høyfrekvensen av tippdataene fra OANDA. Dette betyr at porteføljebalansen som beregnes lokalt, ikke reflekterer balansen beregnet av OANDA. Inntil korrekt hendelseshåndtering og slippjustering utføres, vil dette bety at en backtest ikke korrekt reflekterer virkeligheten. Flere Base Valutaer - Vi er for tiden begrenset til GBP. I det minste må vi inkludere de store valutaverdiene - USD, EUR, CAD, AUD, JPY og NZD. Flere valutapar - På samme måte må vi støtte de store valutaparene utover Kabel (GBPUSD). Det er to aspekter ved dette. Den første er å håndtere beregningene riktig når hverken basen eller sitatet til et valutapar er lik kontoen denominasjonsvalutaen. Det andre aspektet er å støtte flere posisjoner slik at vi kan handle en portefølje av valutapar. Risikostyring - Mange undersøkelser av forskning gir fullstendig oversikt over risikostyring. Dessverre er dette generelt nødvendig for korthet i å beskrive regler for en strategi. I virkeligheten bruker vi en risikooverlegg når vi handler, ellers er det ekstremt sannsynlig at vi på et eller annet tidspunkt vil få et betydelig tap. Dette er ikke å si at risikostyring kan forhindre dette helt, men det gjør det absolutt mindre sannsynlig Porteføljeoptimalisering - I en institusjonell ramme vil vi ha et investeringsmandat som vil diktere et robust porteføljestyringssystem med ulike fordelingsregler. I en detaljert stilling kan vi ønske å bruke en posisjoneringstilpasning som Kelly Criterion for å maksimere vår langsiktige sammensatte vekstrate. Robuste strategier - Jeg har bare demonstrert noen enkle tilfeldige signalgenererende leketøystrategier til dags dato. Nå som vi begynner å skape en pålitelig intradag forex trading system, bør vi begynne å utføre noen mer interessante strategier. Fremtidige dagboksposter vil konsentrere seg om strategier hentet fra en blanding av tekniske indikatorfiltre, samt tidsseriemodeller og maskinlæringsteknikker. Fjerndistribusjon - Siden vi er potensielt interessert i å handle 24 timer (minst i uken) trenger vi et mer sofistikert oppsett enn å kjøre backtesteren på en lokal stasjonær PC-maskin hjemme. Det er viktig at vi oppretter en robust ekstern serverutplassering av vårt system med passende redundans og overvåking. Historisk Backtesting - Vi har bygget Porteføljeobjektet slik at vi kan utføre realistisk backtesting. På dette stadiet mangler vi et historisk kryss datalagringssystem. I etterfølgende artikler vil vi se på å skaffe historiske kryssdata og lagre den i en passende database, for eksempel HDF5. Handelsdatabase - Til slutt vil vi ønske å lagre våre forretninger i vår egen database. Dette vil tillate oss å utføre vår egen analyse på live trading data. En god anbefaling for en relasjonsdatabase ville være PostgreSQL eller MySQL. Overvåking og høy tilgjengelighet - Siden vi vurderer et høyfrekvent intradagsystem, må vi sette omfattende overvåking og høy tilgjengelighet redundans på plass. Dette betyr rapportering om CPU bruk, disk bruk, nettverk IO, latens og kontroller at noen periodiske skript er satt til å fortsette å løpe. I tillegg trenger vi en sikkerhetskopierings - og gjenopprettingsstrategi. Spør deg selv hvilke sikkerhetskopieringsplaner du ville ha på plass hvis du hadde store åpne posisjoner, i et volatilt marked, og serveren din plutselig døde. Tro meg, det skjer flere BrokerFIX Integration - For øyeblikket er vi sterkt koblet til OANDA megleren. Som jeg sa dette er rett og slett fordi jeg kom over deres API og fant det å være et moderne tilbud. Det er mange andre meglere der ute, hvorav mange støtter FIX-protokollen. Å legge til en FIX-evne ville øke antall meglere som kunne brukes med systemet. GUI-kontroll og rapportering - For øyeblikket er systemet helt konsollkommandolinjebasert. I det minste trenger vi noen grunnleggende kartlegging for å vise backtestresultater. Et mer sofistikert system vil inkludere sammendraget statistikk over bransjer, strategisk nivå ytelsesstatistikk samt samlet porteføljeytelse. Denne GUI kan implementeres ved hjelp av et kryssplattformsvinduesystem som Qt eller Tkinter. Det kan også presenteres ved hjelp av en web-basert frontend, ved hjelp av et web-rammeverk som Django. Som det kan sees, er det mye funksjonalitet igjen på veikartet Som sagt vil hver ny dagbokspost (og potensielle bidrag fra samfunnet) flytte prosjektet videre. Desimaldatatyper Nå som vi har diskutert lengre siktplan, vil jeg presentere noen av endringene jeg har gjort til koden siden dagbokoppføring 2. Spesielt vil jeg beskrive hvordan jeg endret koden for å håndtere Decimal data - skriv i stedet for å bruke flytende punkt lagring. Dette er en ekstremt viktig forandring, da flytende poengrepresentasjoner er en betydelig kilde til langsiktig feil i portefølje - og ordstyringssystemer. Python støtter indirekte desimaltiske representasjoner til en vilkårlig presisjon. Funksjonaliteten er inneholdt i desimalbiblioteket. Spesielt må vi modifisere-hver verdi som vises i en Posisjonsberegning til en Decimal datatype. Dette inkluderer enheter, eksponering, pips, fortjeneste og prosentvis fortjeneste. Dette sikrer at vi har full kontroll over hvordan avrundingsproblemer håndteres når det gjelder valutapresentasjoner som har to desimaler av presisjon. Spesielt må vi velge metoden for avrunding. Python støtter noen forskjellige typer, men vi skal gå med ROUNDHALFDOWN. som rundes til nærmeste heltall med bånd som går mot null. Her er et eksempel på hvordan koden er modifisert for å håndtere Decimal datatyper fra deres tidligere flytende poengrepresentasjoner. Følgende er en liste over position. py: Merk at vi må gi Decimal med et strengargument, i stedet for et flytende punktargument. Dette skyldes at en streng nettopp spesifiserer presisjonen av verdien, mens en flytende punkttype ikke vil. Vær også oppmerksom på at når vi begynner å lagre våre handler i en relasjonsdatabase (som beskrevet ovenfor i veikartet), må vi sørge for at vi igjen bruker riktig datatype. PostgreSQL og MySQL støtter en desimalrepresentasjon. Det er viktig at vi benytter disse datatyper når vi lager vårt databaseskema, ellers vil vi komme inn i avrundingsfeil som er ekstremt vanskelig å diagnostisere. For de som er interessert i en dypere diskusjon av disse problemene, i matematikk og datavitenskap, emnet Numerical Analysis dekker flytende punktlagringsproblemer, blant mange andre interessante emner. I etterfølgende dagbokoppføringer skal vi diskutere hvordan jeg har brukt enhetstesting på koden og hvordan vi kan utvide programvaren til flere valutapar ved å endre posisjonsberegningene. Full Python Code Siden full kildekode for prosjektet er nå åpen kildekode, under en MIT lisens. det kan alltid bli funnet ut på githubmhallsmooreqsforex. med tilhørende dokumentasjon. Hvis du vil lese de andre oppføringene i serien, vennligst følg linkene under: Bare Kom i gang med kvantitativ handel

No comments:

Post a Comment