Kvantstrategier - är de för dig Kvantitativa investeringsstrategier har utvecklats till mycket komplexa verktyg med tillkomsten av moderna datorer, men strategierna går tillbaka över 70 år. De drivs vanligtvis av högutbildade lag och använder proprietära modeller för att öka deras förmåga att slå marknaden. Det finns även off-shelf-program som är plug-and-play för dem som söker enkelhet. Kvantmodeller fungerar alltid bra när de testas igen, men deras faktiska applikationer och framgångsgrad är diskutabelt. Medan de verkar fungera bra på tjurmarknaderna. När marknaderna går haywire, är kvantstrategier utsatta för samma risker som alla andra strategier. Historien En av grundarna till studien av kvantitativ teori tillämpad på finans var Robert Merton. Man kan bara föreställa sig hur svårt och tidskrävande processen var före användningen av datorer. Andra teorier inom ekonomi utvecklades också från några av de första kvantitativa studierna, inklusive grunden för diversifiering av portföljer baserat på modern portföljteori. Användningen av både kvantitativ finansiering och kalkyler ledde till många andra gemensamma verktyg, inklusive en av de mest kända, Black-Scholes optionsprissättningsformeln, som inte bara hjälper investerare till prisoptioner och utvecklar strategier, men hjälper till att hålla marknaderna i kontroll med likviditeten. När den tillämpas direkt på portföljförvaltning. Målet är som någon annan investeringsstrategi. att lägga till värde, alfabetisk eller meravkastning. Quants, som utvecklarna heter, komponerar komplexa matematiska modeller för att upptäcka investeringsmöjligheter. Det finns så många modeller där ute som quants som utvecklar dem, och alla hävdar att vara bäst. En av de mest säljande punkterna i quant investment strategys är att modellen, och i slutändan datorn, gör det faktiska beslutet om buysell, inte en människa. Detta tenderar att ta bort eventuellt känslomässigt svar som en person kan uppleva när man köper eller säljer investeringar. Kvantstrategier accepteras nu i investeringssamhället och drivs av fonder, hedgefonder och institutionella investerare. De brukar gå med namnet alfa generatorer. eller alfa-gens. Bakom gardinen Precis som i Wizard of Oz, står någon bakom gardinen som kör processen. Som med vilken modell som helst, är det bara lika bra som den människa som utvecklar programmet. Även om det inte finns något specifikt krav på att bli en kvant, kombinerar de flesta företag som köper kvantmodeller kompetensanalyser, statistiker och programmerare som kodar processen i datorerna. På grund av de matematiska och statistiska modellernas komplicerade karaktär är det vanligt att se uppgifter som doktorsexamen och doktorsexamen i ekonomi, ekonomi, matematik och teknik. Historiskt har dessa lagmedlemmar arbetat i backkontor. men som kvantmodeller blev mer vanliga flyttar backkontoret till kontoret. Fördelar med Quant Strategies Medan den övergripande framgången är diskutabel, är anledningen till att vissa kvantstrategier fungerar, att de bygger på disciplin. Om modellen är rätt, fortsätter disciplinen att strategin arbetar med blixtsnabbsdatorer för att utnyttja ineffektivitet på marknaderna baserad på kvantitativa data. Modellerna själva kan baseras på så lite som några förhållanden som PE. skuld till eget kapital och resultatutveckling, eller använd tusentals insatser som samarbetar samtidigt. Framgångsrika strategier kan hämta trender i sina tidiga skeden, eftersom datorerna ständigt driver scenarier för att lokalisera ineffektivitet innan andra gör det. Modellerna kan analysera en mycket stor grupp av investeringar samtidigt, där den traditionella analytiker kan titta på bara ett fåtal i taget. Screeningsprocessen kan betygsätta universum med betygsnivåer som 1-5 eller A-F beroende på modell. Detta gör den faktiska handelsprocessen väldigt enkel genom att investera i de högklassiga investeringarna och sälja de lågklassiga. Quant modeller öppnar också variationer av strategier som lång, kort och longshort. Framgångsrika kvantfonder håller koll på riskkontrollen på grund av deras modeller. De flesta strategier börjar med ett universum eller riktmärke och använder sektorer och branschvikter i sina modeller. Detta gör att fonderna kan styra diversifieringen i viss utsträckning utan att kompromissa med själva modellen. Kvantfonderna går oftast till lägre kostnad eftersom de inte behöver så många traditionella analytiker och portföljförvaltare att köra dem. Nackdelar med kvantstrategier Det finns anledningar till att så många investerare inte fullt ut tar hand om begreppet att låta en svart låda köra sina investeringar. För alla framgångsrika kvantfonder där ute, verkar lika många som misslyckas. Tyvärr för quants rykte, när de misslyckas misslyckas de stora tiden. Långfristig kapitalförvaltning var en av de mest kända kvanthäckfonderna, eftersom den drivs av några av de mest respekterade akademiska ledarna och två Nobelminnesprisvinnande ekonomer Myron S. Scholes och Robert C. Merton. Under 1990-talet genererade deras team över genomsnittet och attraherade kapital från alla typer av investerare. De var kända för att inte bara utnyttja ineffektivitet utan även med enkel tillgång till kapital för att skapa enorma hävstångssatser på marknadsriktningar. Den disciplinerade karaktären hos deras strategi skapade faktiskt den svaghet som ledde till deras kollaps. Långfristig kapitalförvaltning likviderades och löstes i början av år 2000. I sina modeller ingår inte möjligheten att den ryska regeringen skulle kunna standardisera sin egen skuld. Den här händelsen utlöste händelser och en kedjereaktion förstorad av hävstångsskapande förödelse. LTCM var så starkt involverad i andra investeringsverksamheter att dess kollaps påverkade världsmarknaderna och utlöste dramatiska händelser. På lång sikt gick Federal Reserve in för att hjälpa, och andra banker och investeringsfonder stödde LTCM för att förhindra ytterligare skador. Detta är en av anledningarna till att kvantfonder kan misslyckas, eftersom de bygger på historiska händelser som inte får inkludera framtida händelser. Medan ett starkt kvantteam kontinuerligt kommer att lägga till nya aspekter på modellerna för att förutsäga framtida händelser, är det omöjligt att förutsäga framtiden varje gång. Kvantfonder kan också bli överväldigade när ekonomin och marknaderna upplever större volatilitet än genomsnittet. Köp - och säljsignalerna kan komma så snabbt att den höga omsättningen kan skapa höga provisioner och skattepliktiga händelser. Kvantfonder kan också utgöra en fara när de marknadsförs som bärsäkra eller bygger på korta strategier. Förutsägande nedgångar. Att använda derivat och kombinera hävstång kan vara farligt. En fel tur kan leda till implosioner, vilket ofta gör nyheterna. Bottom Line Kvantitativa investeringsstrategier har utvecklats från backboks svarta lådor till vanliga investeringsverktyg. De är utformade för att utnyttja de bästa sinnena i branschen och de snabbaste datorerna för att både utnyttja ineffektivitet och använda hävstångseffekt för att göra marknadsbud. De kan vara mycket framgångsrika om modellerna har inkluderat alla rätt ingångar och är fimma nog att förutse onormala marknadshändelser. På flipsidan, medan kvantfonderna noggrant testas igen tills de arbetar, är deras svaghet att de är beroende av historiska data för deras framgång. Samtidigt som investeringar i quant-style har sin plats på marknaden är det viktigt att vara medveten om sina brister och risker. Att vara förenlig med diversifieringsstrategier. det är en bra idé att behandla kvantstrategier som en investeringsstil och kombinera den med traditionella strategier för att uppnå rätt diversifiering. En typ av skatt som tas ut på kapitalvinster som uppkommit av individer och företag. Realisationsvinster är vinsten som en investerare. En order att köpa en säkerhet till eller under ett angivet pris. En köpgränsorder tillåter näringsidkare och investerare att specificera. En IRS-regel (Internal Revenue Service) som tillåter utbetalningar från ett IRA-konto på ett strafffritt sätt. Regeln kräver det. Den första försäljningen av lager av ett privat företag till allmänheten. IPOs utfärdas ofta av mindre, yngre företag som söker. Skuldkvotskvoten är skuldkvoten som används för att mäta ett företags ekonomiska hävstångseffekt eller en skuldkvot som används för att mäta en individ. En typ av ersättningsstruktur som hedgefondsförvaltare brukar använda i vilken del av ersättningen som är prestationsbaserad. Forex Trading Diary 5 - Handel med flera valutapar Igår publicerade jag några viktiga ändringar av QSForex-programvaran. Dessa förändringar har ökat systemets användbarhet väsentligt till den punkt där den är nästan redo för multi-day tick-data backtesting över en rad valutapar. Följande ändringar har publicerats i Github: Ytterligare modifieringar till både objekten Position och Portfolio för att tillåta att flera valutapar ska handlas såväl som valutor som inte är nominerade i kontovalutan. Därför kan ett GBP-deominerat konto nu handla med EURUSD. Fullständig översyn av hur beräkningen av position och portfölj öppnas, stängs, läggs till och flyttas av enheter. Position-objektet utför nu den tunga lyftningen och lämnar ett relativt litet Portfolio-objekt. Tillägg av den första icke-triviala strategin, nämligen den välkända Moving Average Crossover-strategin med ett par enkla rörliga medelvärden (SMA). Ändring till backtest. py för att göra den enkelgängad och deterministisk. Trots min optimism att en multi-threaded approach inte skulle vara för skadlig för simulering noggrannhet, jag hade det svårt att få tillfredsställande backtesting resultat med en multi-threaded tillvägagångssätt. Införde ett mycket grundläggande Matplotlib-baserat utskriftskript för att se portföljens aktiekurva. Aktiekurveproduktionen är på ett tidigt stadium och kräver fortfarande mycket arbete. Som jag nämnde i föregående post. för de av er som är obekanta med QSForex och kommer för första gången till denna forex dagbokserie, föreslår jag starkt att du läser följande dagboksposter för att komma igång med programvaran: Förutom Github-sidan för QSForex : Multipel valutastöd En funktion som jag kontinuerligt har diskuterat i dessa dagboksposter är möjligheten att stödja flera valutapar. Ive har nu nu modifierat mjukvaran för att tillåta olika kontonynomineringar, eftersom tidigare GBP var den hårdkodade valutan. Det är också möjligt att handla med andra valutapar, förutom de som består av en bas eller citat i japansk yen (JPY). Den senare beror på hur fackstorlekarna är caculerade i JPY-valutor. För att uppnå detta har jag ändrat hur vinsten beräknas när enheter tas bort eller positionen är stängd. Här är det aktuella stycket för beräkning av pips i position. py-filen: Om vi stänger positionen för att uppnå en vinst eller förlust behöver vi använda följande kod för stängning. även i position. py-filen: För det första får vi bud - och frågepriserna för både valutaparet som handlas såväl som det quotehome valutaparet. Till exempel, för ett konto i GBP, där vi handlar EURUSD, måste vi få priser för USDGBP, eftersom EUR är basvalutan och USD är citatet. Vid detta tillfälle kontrollerar vi om positionen själv är en lång eller kort position och beräknar sedan det lämpliga avlägsningspriset och quotehome tar bort priset, vilket anges av removeprice respektive qhclose. Vi uppdaterar nu aktuella och genomsnittliga priser inom positionen och slutligen beräknar PampL genom att multiplicera pipsna, priset för quotehome-borttagning och sedan stängdes antalet enheter. Vi har helt eliminerat behovet av att diskutera exponering, vilket var en överflödig variabel. Denna formel ger då korrekt PampL mot någon (icke-JPY denominerade) valutaparhandeln. Översyn av position och portföljhantering Förutom förmågan att handla i flera valutapar har Ive också förfinat hur position och portfölj har ansvaret för att öppna och stänga positioner, samt att lägga till och subtrahera enheter. Ive flyttade i synnerhet mycket positioneringshanteringskoden som var i portfolio. py till position. py. Det här är mer naturligt eftersom positionen ska ta hand om sig själv och inte delegera den till portföljen. I synnerhet tilläggen. removeunits och closeposition metoder har skapats eller förbättrats: I de senare två kan du se hur den nya formeln för beräkning av vinst implementeras. Många funktioner i Portfolio-klassen har därmed minskat motsvarande. I synnerhet metoderna läggs till. addpositionunits. borttagningsenheter och stängningspositioner har modifierats för att ta hänsyn till det faktum att beräkningsarbetet görs i positionsobjektet: I grunden kontrollerar de alla (förutom tilläggsposition) helt enkelt om positionen existerar för det valutaparet och sedan ring motsvarande positioneringsmetod , med beaktande av vinst vid behov. Moving Average Crossover Strategy Vi har diskuterat Moving Average Crossover-strategin innan på QuantStart. i samband med aktiehandel. Det är en mycket användbar testbäddsindikatorstrategi eftersom det är lätt att replikera beräkningarna för hand (åtminstone vid lägre frekvenser) för att kontrollera att backtesteren beter sig som den ska. Grundsidan av strategin är följande: Två separata enkla glidande medelfilter skapas, med varierande återslagstid, av en viss tidsserie. Signaler för att köpa tillgången inträffar när det kortare återgåande glidande medlet överstiger det längre återkommande glidmedlet. Om det längre genomsnittet därefter överstiger det kortare genomsnittet säljs tillgången tillbaka. Strategin fungerar bra när en tidsserie går in i en period med stark trend och sedan sakta tillbaka trenden. Genomförandet är enkelt. För det första tillhandahåller vi en metod calcrollingsma som gör det möjligt för oss att effektivt utnyttja den tidigare tidsperioden SMA-beräkningen för att generera den nya utan att behöva räkna om SMA vid varje steg. För det andra genererar vi signaler i två fall. I det första fallet genererar vi en signal om den korta SMA överstiger den långa SMA och var inte länge valutaparet. I det andra fallet genererar vi en signal om den långa SMA överstiger den korta SMA och vi är redan långa. Jag har satt standardfönstret för att vara 500 ticks för de korta SMA och 2000 ticks för den långa SMA. Tydligen i en produktionsinställning skulle dessa parametrar optimeras, men de fungerar bra för våra teständamål. Single-threaded Backtester En annan stor förändring var att modifiera den backtesting komponenten att vara single-threaded, snarare än multi-threaded. Jag gjorde denna förändring eftersom jag hade en mycket svår tid att synkronisera trådarna att utföra på ett sätt som skulle uppstå i en levande miljö. Det innebar i grunden att inmatnings - och utgångspriserna var mycket orealistiska, ofta förekommande (virtuella) timmar efter det att själva fästet hade mottagits. Därför inkorporerade jag streaming av TickEvent-objekt i backtesting loopen, som du kan se i följande kod av backtest. py: Lägg märke till linjepekaren. streamnexttick (). Detta kallas före en omröstning av händelsekön och som sådan kommer alltid att garantera att en ny fästningsevenemang kommer att ha kommit innan kön pollas igen. I synnerhet betyder det att en signal utförs när nya marknadsdata kommer fram, även om det finns en viss fördröjning i orderprocessen på grund av glidning. Ive anger också ett maxiters värde som styr hur länge backtesting loop fortsätter. I praktiken måste det vara ganska stort när det handlar om flera valutor under flera dagar, men Ive ställer in det till ett standardvärde som tillåter en dagsdata av ett valutapar. Streckkodsmetoden för prishanterarklassen liknar strömtangent, förutom att den kallar iteratorns nästa () - metod manuellt, istället för att utföra frikoppling i en för loop: Observera att den stannar vid mottagandet av ett StopIteration-undantag. Detta gör att koden kan återupptas i stället för att krascha med undantag. Matplotlib Output Ive skapade också ett mycket grundläggande Matplotlib-utmatningsskript för att visa aktiekurvan. output. py bor för närvarande i backstestkatalogen av QSForex och anges nedan: Observera att det finns en ny settings. py-variabel nu kallad OUTPUTRESULTSDIR. vilket måste ställas in i dina inställningar. Jag pekar på en temporär katalog någon annanstans på mitt filsystem eftersom jag inte vill lägga till några resultat av eget kapital backtest till kodbasen Aktiekurvan fungerar genom att ha en balansvärde till en lista med ordböcker, med en ordlista som motsvarar en tidsstämpel. När backtestet är slutfört konverteras listan över ordböcker till en Pandas DataFrame och tocsv-metoden används för att mata ut equity. csv. Det här utmatningsskriptet läser helt enkelt i filen och plottar balanskolumnen i den efterföljande DataFrame. Du kan se utdraget för appendequityrow och outputresults metoderna i Portfolio-klassen nedan: Varje gång executesignal heter, kallas den tidigare metoden och lägger till timestampbalansvärdet till kapitalandelen. I slutet av backtestet kallas outputresults som helt enkelt konverterar listan över ordböcker till en DataFrame och sedan matar ut till den angivna OUTPUTRESULTSDIR-katalogen. Tyvärr är detta inte ett särskilt lämpligt sätt att skapa en egenkapitalkurva, eftersom den bara uppstår när en signal genereras. Det innebär att det inte tar hänsyn till orealiserad PampL. Medan det här är hur verklig handel sker (du har inte gjort några pengar förrän du stänger en position) betyder det att aktiekurvan kommer att förbli helt platt mellan balansuppdateringar. Värre, Matplotlib kommer som standard att linjärt interpolera mellan dessa punkter, vilket ger ett felaktigt intryck av den orealiserade PampL. Lösningen på detta problem är att skapa en orealiserad PampL-tracker för positionsklassen som korrekt uppdaterar på varje ficka. Detta är lite mer beräkningsmässigt dyrt, men tillåter en mer användbar kapitalkurva. Den här funktionen är planerad senare. Nästa steg Nästa stora uppgift för QSForex är att möjliggöra flera dagars backtesting. För närvarande laddar HistoricCSVPriceHandler-objektet bara en dagars värde av DukasCopy-kryssdata för några angivna valutapar. För att möjliggöra flera dagars testning kommer det att vara nödvändigt att ladda och strömma varje dag i följd för att undvika att fylla RAM med hela fältdataets historia. Detta kommer att kräva en ändring av hur flödesjusteringsmetoden fungerar. När det är klart kommer det att möjliggöra långsiktig strategi backtesting över flera par. En annan uppgift är att förbättra produktkurvan. För att kunna beräkna någon av de vanliga prestandametrierna (som Sharpe Ratio) behöver vi beräkna procentuell avkastning under en viss tidsperiod. Detta kräver emellertid att vi fäller in kryssningsinformationen i staplar för att beräkna en avkastning under en viss tidsperiod. Sådan binning måste ske med en samplingsfrekvens som liknar handelsfrekvensen eller Sharpe-förhållandet kommer inte att reflektera över strategins sanna riskreaktion. Denna binning är inte en trivial övning, eftersom det finns många antaganden som går in på att generera ett pris för varje bin. När dessa två uppgifter är färdiga och tillräckliga uppgifter har förvärvats kommer vi att kunna backtest ett brett spektrum av tick-data-baserade forexstrategier och producera kapitalkurvor med av de flesta transaktionskostnaderna. Dessutom kommer det vara extremt enkelt att testa dessa strategier på OANDAs praktikpapperskonto. Detta borde ge dig möjlighet att fatta mycket bättre beslut om huruvida du ska driva en strategi jämfört med ett mer forskningsinriktat backtesting-system. Bara Komma igång med Kvantitativ TradingForex Trading Dagbok 3 - Öppna Sourcing Forex Trading System I dagens inlämning av Forex Trading Dagbok vill jag diskutera den långsiktiga planen för Forex trading system. Dessutom vill jag beskriva hur jag använde Pythons Decimal data-typ för att göra beräkningarna mer exakta. Hittills har vi experimenterat med OANDA Rest API för att se hur det jämfördes med API tillhandahållet av Interactive Brokers. Weve har också sett hur man lägger till i ett grundläggande portföljreplikationselement som det första steget mot ett korrekt händelsedrivet backtesting-system. Ive hade också några användbara kommentarer på både tidigare artiklar (1 och 2), vilket tyder på att många av er villiga att ändra och förlänga koden själva. Öppna Sourcing Forex Trading System Av de skäl som beskrivits ovan har jag bestämt mig för att öppna källan för valutahandeln. Vad betyder det? Det betyder att all nuvarande och framtida kod kommer att finnas tillgänglig gratis, under en liberal MIT open source-licens, på Githubs versionskontrollwebbplats på följande webbadress: githubmhallsmooreqsforex. För de av er som har använt Git och Github förut, kommer du att kunna ge klon repo och börja ändra det för egna ändamål. QuantStart Automated Forex Trading System är nu öppen källkod under en liberal MIT-licens. Du hittar den senaste koden på Github under qsforex-förvaret på githubmhallsmooreqsforex. För dig som är ny för källversionskontroll kommer du förmodligen vilja läsa om hur git (och versionskontroll i allmänhet) fungerar med den fantastiska gratis e-boken Pro Git. Det är värt att spendera lite tid att lära sig om källkontroll eftersom det kommer att spara dig en stor del av framtida huvudvärk om du spenderar mycket tidsprogrammering och uppdatering av projekt. Snabbstart för ett Ubuntu-system är att installera git: Du måste då göra en katalog för qsforex-projektet att leva i och klona projektet från Githubs webbplats enligt följande: Vid denna tidpunkt måste du skapa en virtuell miljö för att köra koden: Du måste då installera kraven (detta kommer att ta någon gång): Slutligen måste du skapa en symbolisk länk i din virtuella virtuella Python-miljö så att du kan importera qsforex i din kod (och köra den): Som jag nämnde i tidigare poster måste du skapa nödvändiga miljövariabler för dina OANDA-autentiseringsuppgifter. Se dagbokspost 2 för instruktioner om hur du gör det här. Var vänlig uppmärksam på README i samband med repo, eftersom det innehåller installationsanvisningar, en ansvarsfriskrivning och en garanti om hur du använder koden. Eftersom mjukvaran är i alfasläge kommer dessa instruktioner att bli enklare när tiden går. I synnerhet kommer jag att försöka sätta in projektet i ett Python-paket så att det enkelt kan installeras via pip. Om du har några frågor om installationsproceduren, tveka inte att maila mig på mikequantstart. Långtidsplan Filosofin i forex trading systemet, liksom med resten av QuantStart-webbplatsen, är att försöka efterlikna det verkliga livet så mycket som möjligt i vår backtesting. Detta innebär att de detaljer som ofta utesluts från mer forskningsinriktade backtesting-situationer ingår. Latency, serveravbrott, automatisering, övervakning, realistiska transaktionskostnader kommer alla att inkluderas i modellerna för att ge oss en bra uppfattning om hur bra en strategi är sannolikt att utföra. Eftersom vi kommer att ha tillgång till kryssningsdata (bidaskidsstämplar) kommer vi att kunna inkludera spridningen i transaktionskostnaderna. Vi kan också modellera slippa. Det är mindre omedelbart att modellera marknadseffekter, även om det här är mindre oroande för mindre handelsvolymer. Utöver transaktionskostnader vill vi modellera robust portföljhantering med risköverlagringar och positionering. Så vad ingår för närvarande i Forex Trading System hittills Event-Driven Architecture - Forex trading system har utformats som ett händelsestyrt system från grunden, eftersom det här är hur ett intraday trading system kommer att implementeras i en levande miljö . Pris Streaming - Vi har ett grundläggande prisströmmande objekt. Detta hanterar för närvarande abonnemang på endast ett par, men vi kan enkelt ändra detta för att prenumerera på flera valutapar. Signalgenerering - Vi kan integrera handelsstrategier (baserat direkt på tidigare och aktuella tickningspriser) med hjälp av strategibjektet, vilket skapar SignalEvent-objekt. Order Execution - Vi har ett naivt orderexekutionssystem som blint skickar order från Portfolio till OANDA. Blindt innebär jag att det inte finns någon riskhantering eller positionsstorlek som utförs, eller något algoritmiskt utförande som kan leda till minskade transaktionskostnader. GBP Base Valuta - För att hålla det enkelt, skrev Ive bara systemet för GBP-basvaluta. Det här är kanske den viktigaste aspekten att ändra med tanke på hur många av er kommer att ha övningskonton som är betalda i USD, EUR, CAD, JPY, AUD och NZD GBPUSD Trading - Jag valde kabeln som valutapar för att testa de ursprungliga positionerna och portföljobjekten med. Hantering av flera valutapar är ett viktigt nästa steg. Detta kommer att innebära modifiering av position och portföljberäkningar. Decimal hantering - Varje produktionshandelssystem måste hantera valutaberäkningar på rätt sätt. I synnerhet bör valutavärden inte lagras som flytpunktsdatatyper, eftersom avrundningsfel kommer att ackumuleras. Vänligen se denna fantastiska artikel om flytande punktrepresentationer för mer information. LongShort Trading - Mellan dagboksposter 2 och 3 lade jag till förmågan att korta ett valutapar (i motsats till att det bara gick lång tid). Avgörande är detta också enhetstestad. Lokal portföljhantering - Enligt min mening utförs en backtest som ger upphov till strategiska prestanda på grund av orealistiska antaganden, irriterande i bästa fall och extremt olönsam värt i värsta fall. Genom att introducera ett lokalt portföljobjekt som replikerar OANDA-beräkningarna kan vi kontrollera våra interna beräkningar under genomförandet av praktiken handel . vilket ger oss större förtroende när vi senare använder samma portföljobjekt för backtesting på historiska data. Enhetstester för PositionPortfolio - Även om Ive inte nämnde det direkt i dagboksposter 1 och 2, har Ive faktiskt skrivit några enhetstester för portfölj - och positionsobjekten. Eftersom dessa är så viktiga för strategiernas beräkningar måste man vara mycket säker på att de utför som förväntat. En ytterligare fördel med sådana test är att de tillåter att den underliggande beräkningen ändras, så att om alla test fortfarande passerar, kan vi vara övertygade om att det övergripande systemet fortsätter att verka som förväntat. På detta stadium saknar Forex Trading System följande funktion: Slippage Handling - Systemet genererar för närvarande mycket slipning på grund av den högfrekventa naturen av frikopplingsdata som tillhandahålls från OANDA. Det innebär att portföljbalansen som beräknas lokalt inte återspeglar den balans som beräknats av OANDA. Innan korrekt händelsehantering och glidjustering utförs, innebär detta att en backtest inte korrekt reflekterar verkligheten. Multiple Base Valutor - Vi är för närvarande begränsade till GBP. Vi måste åtminstone inkludera de stora valutaföreningarna - USD, EUR, CAD, AUD, JPY och NZD. Multipelvalparpar - På samma sätt behöver vi stödja de stora valutaparen bortom Cable (GBPUSD). Det finns två aspekter på detta. Den första är att korrekt hantera beräkningarna när varken basen eller citatet för ett valutapar är lika med kontonomineringsvalutan. Den andra aspekten är att stödja flera positioner så att vi kan handla en portfölj av valutapar. Riskhantering - Många forskningsbacktest ignorerar helt riskhanteringen. Tyvärr är det i allmänhet nödvändigt för kortfattad beskrivning av reglerna i en strategi. I själva verket använder vi en risköverlagring vid handel, annars är det extremt troligt att vi i viss tid kommer att drabbas av en betydande förlust. Detta innebär inte att riskhantering kan förhindra detta helt, men det gör det definitivt mindre. Portföljoptimering - I en institutionell miljö har vi ett investeringsmandat som kommer att diktera ett robust portföljhanteringssystem med olika fördelningsregler. I en detaljhandeln kan vi vilja använda en positioneringsmetod som Kelly Criterion för att maximera vår långsiktiga förhöjda tillväxt. Robusta strategier - Jag har bara visat några enkla slumpmässiga signalgenererande leksaksstrategier hittills. Nu när vi börjar skapa ett tillförlitligt intraday trading system, bör vi börja utföra några mer intressanta strategier. Framtida dagboksposter kommer att koncentreras på strategier som dras av en blandning av tekniska indikatorfilter samt tidsseriemodeller och maskininlärningsteknik. Fjärrdistribution - Eftersom vi är potentiellt intresserade av handel 24 timmar (åtminstone under veckan) behöver vi en mer sofistikerad inställning än att köra backtesteren på en lokal skrivbordsmaskin hemma. Det är viktigt att vi skapar en robust fjärrserverutplacering av vårt system med lämplig redundans och övervakning. Historisk Backtesting - Vi har byggt Portfolio-objektet så att vi kan göra realistiska backtesting. Vid detta tillfälle saknar vi ett historiskt fält datalagringssystem. I efterföljande artiklar ser vi på att få historiska fältdata och lagra den i en lämplig databas, till exempel HDF5. Handelsdatabas - Till sist vill vi lagra våra levnadsaffärer i vår egen databas. Detta gör det möjligt för oss att utföra vår egen analys av live trading data. En bra rekommendation för en relationsdatabas skulle vara PostgreSQL eller MySQL. Övervakning och hög tillgänglighet - Eftersom vi överväger ett högfrekvent intradagsystem måste vi sätta övergripande övervakning och hög tillgänglighet redundans på plats. Det innebär att rapportera om CPU-användning, diskanvändning, nätverkets IO, latens och kontroller att några periodiska skript är inställda att fortsätta att köra. Dessutom behöver vi en säkerhetskopierings - och återställningsstrategi. Fråga dig själv vilka säkerhetskopieringsplaner du skulle ha om du hade stora öppna positioner, på en volatil marknad och din server plötsligt dog. Tro mig, det händer flera BrokerFIX Integration - För närvarande är vi starkt kopplade till OANDA-mäklaren. Som jag sa är det helt enkelt för att jag kom över deras API och fann att det var ett modernt erbjudande. Det finns många andra mäklare där ute, varav många stöder FIX-protokollet. Att lägga till en FIX-kapacitet skulle öka antalet mäklare som skulle kunna användas med systemet. GUI-kontroll och rapportering - Just nu är systemet helt konsolkommandot linjebaserat. Vi behöver åtminstone några grundläggande kartläggningar för att visa resultat för backtest. Ett mer sofistikerat system kommer att innehålla sammanfattande statistik över branscher, strateginivå prestandametri samt övergripande portföljprestanda. Denna GUI kan implementeras med hjälp av ett fönsterplattformssystem som t. ex. Qt eller Tkinter. Den kan också presenteras med hjälp av ett webbaserat front-end, med hjälp av en webb-ram som Django. Som det framgår är det mycket funktionalitet kvar på färdplanen Som sagt kommer varje ny dagbokspost (och eventuella bidrag från samhället) att flytta projektet framåt. Decimala datatyper Nu när vi har diskuterat den långsiktiga planen vill jag presentera några av de ändringar jag har gjort i koden sedan dagbokspost 2. I synnerhet vill jag beskriva hur jag ändrade koden för att hantera Decimal data - skriv istället för att använda flytpunktslagring. Detta är en oerhört viktig förändring, eftersom flytpunkter representerar en betydande källa till långsiktigt fel i portfölj - och orderhanteringssystem. Python stödjer indirekt decimalreferenser till en godtycklig precision. Funktionen finns i decimalbiblioteket. I synnerhet måste vi ändra - värt-värde som visas i en positionsberäkning till en decimal-datatyp. Detta inkluderar enheter, exponering, pips, vinst och procentuell vinst. Detta säkerställer att vi har full kontroll över hur avrundningsfrågorna hanteras vid hantering av valutapresentationer som har två decimaler av precision. I synnerhet måste vi välja avvägningsmetoden. Python stöder några olika typer, men vi ska gå med ROUNDHALFDOWN. vilken runda till närmaste heltal med band som går mot noll. Här är ett exempel på hur koden är modifierad för att hantera decimala datatyper från sina tidigare floating point-representationer. Följande är en lista över position. py: Observera att vi måste ge decimalt med ett strängargument, snarare än ett floating point-argument. Detta beror på att en sträng precis anger precisionen för värdet, medan en flytpunktstyp inte kommer att göra det. Observera också att när vi börjar lagra våra affärer i en relationsdatabas (som beskrivs ovan i färdplanen) måste vi se till att vi återigen använder rätt datatyp. PostgreSQL och MySQL stöder en decimalrepresentation. Det är avgörande att vi använder dessa datatyper när vi skapar vårt databasschema, annars kommer vi att röra sig till avrundningsfel som är extremt svåra att diagnostisera. För dem som är intresserade av en djupare diskussion om dessa frågor i matematik och datavetenskap ämnet Numerical Analysis täcker problem med flytande punkt, bland många andra intressanta ämnen. I efterföljande dagboksposter kommer vi att diskutera hur jag har testat enhetstestning på koden och hur vi kan utvidga programvaran till fler valutapar genom att ändra positionsberäkningarna. Full Python-kod Eftersom hela källkoden för projektet nu är öppen källkod, under en MIT-licens. det kan alltid hittas på githubmhallsmooreqsforex. med medföljande dokumentation. Om du vill läsa de andra inmatningarna i serien följer du länkarna nedan: Just Getting Started with Quantitative Trading
No comments:
Post a Comment