Thursday, 21 December 2017

Quantstart forex handel


Forex Trading Dagbok 3 - Öppna Sourcing Forex Trading System I dagens tilldelning 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 blåser upp strategiska prestanda på grund av orealistiska antaganden, är störst irriterande och extremt olönsam värst. Värst att presentera ett lokalt portföljobjekt som replikerar OANDA-beräkningarna innebär att vi kan kontrollera våra interna beräkningar när du utför praktik 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 kontrollerar att några periodiska skript är inställda för 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 Komma igång med Kvantitativ TradingForex Trading Dagbok 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 : Multiple Values ​​Support 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 ett 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 möjligheten att handla med flera valutapar har Ive också förfinat hur position och portfölj har ansvaret för öppnings - och stängningsställen, 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 minskats 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 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 in - och utgående priser 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, i stället för att utföra tändningsströmmar i en för loop: Observera att den stannar vid mottagandet av ett StopIteration-undantag. Detta gör att koden kan återupptas snarare än 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 biten för appendquityrow - och outputresults-metoderna i Portfolio-klassen nedan: Varje gång köresignal 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 fullständiga och tillräckliga data 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 TradingQSForex är en öppen källkodshändelsesdrevet backtesting och live trading plattform för användning på valutamarknaden (forex) marknader, för närvarande i ett alfa-tillstånd. Det har skapats som en del av Forex Trading Diary-serien på QuantStart för att ge det systematiska handelsgemenskapen en robust handelsmotor som möjliggör enkel förexstrategiimplementering och testning. Programvaran tillhandahålls under en tillåten MIT-licens (se nedan). Open Source - QSForex har släppts under en extremt permissiv MIT-licens med öppen källkod, vilket möjliggör full användning i både forskning och kommersiella applikationer, utan begränsning, men utan någon garanti alls. Free - QSForex är helt gratis och kostar inget att ladda ner eller använda. Samarbete - Eftersom QSForex är öppen källkod samarbetar många utvecklare för att förbättra programvaran. Nya funktioner läggs till ofta. Eventuella fel är snabbt bestämda och fixerade. Programutveckling - QSForex är skrivet i Python programmeringsspråk för enkel plattformsupport. QSForex innehåller en serie enhetstester för majoriteten av sin beräkningskod och nya tester läggs hela tiden till nya funktioner. Event-Driven Architecture - QSForex är helt händelsestyrt både för backtesting och live trading, vilket leder till en enkel övergång av strategier från en researchtesting-fas till en live trading implementering. Transaktionskostnader - Spridningskostnader ingår som standard för alla backtestedstrategier. Backtesting - QSForex har flera dagars multi-day par-backtesting i flera dagar. Trading - QSForex stöder för närvarande direkt intraday trading med hjälp av OANDA Brokerage API över en portfölj av par. Prestationsmetoder - QSForex stöder för närvarande grundläggande prestationsmätning och visuell visualisering via Matplotlib och Seaborn visualiseringsbibliotek. Installation och användning 1) Besök oanda och konfigurera ett konto för att få API-autentiseringsuppgifter, vilket du behöver utföra live trading. Jag förklarar hur man bär detta ut i den här artikeln: quantstartarticlesForex-Trading-Diary-1-Automated-Forex-Trading-med-the-OANDA-API. 2) Klona detta gitförvar i en lämplig plats på din maskin med följande kommando i din terminal: git klon githubmhallsmooreqsforex. git. Alternativt kan du ladda ner zip-filen i den nuvarande huvudgrenen på githubmhallsmooreqsforexarchivemaster. zip. 3) Skapa en uppsättning miljövariabler för alla inställningar som finns i filen Settings. py i programmets rotkatalog. Alternativt kan du svårt koda dina specifika inställningar genom att skriva över os. environ. get (.) Samtal för varje inställning: 4) Skapa en virtuell miljö (virtualenv) för QSForex-koden och använd pip för att installera kraven. Till exempel i ett Unix-baserat system (Mac eller Linux) kan du skapa en sådan katalog enligt följande genom att ange följande kommandon i terminalen: Detta skapar en ny virtuell miljö för att installera paketen i. Förutsatt att du laddade ner QSForex gitförvaret i en exempellista som projectsqsforex (ändra den här katalogen nedan till var du installerade QSForex), för att installera paketen måste du köra följande kommandon: Det tar lite tid som NumPy, SciPy, Pandas, Scikit-Learn och Matplotlib måste sammanställas. Det finns många paket som krävs för att detta ska fungera, så ta en titt på dessa två artiklar för mer information: Du måste även skapa en symbolisk länk från din katalog med sajtpaket till din QSForex-installations katalog för att kunna ringa importera qsforex inom koden. För att göra detta behöver du ett kommando som liknar följande: Se till att du ändrar projectsqsforex till din installationskatalog och venvqsforexlibpython2.7site-paket till din virtuella webbplatskatalogkatalog. Du kommer nu att kunna köra kommandon på rätt sätt korrekt. 5) Om du bara vill utöva träning eller leva handel så kan du köra python tradingtrading. py. som kommer att använda standardstrategin för handelsstrategier. Detta köper eller säljer en valutapar varje femte kryssning. Det är rent för testning - använd det inte i en levande handelsmiljö Om du vill skapa en mer användbar strategi skapar du helt enkelt en ny klass med ett beskrivande namn, t. ex. MeanReversionMultiPairStrategy och se till att det har en calculatesignals metod. Du måste passera den här klassen parlistan samt evenemangskön, som i tradingtrading. py. Vänligen se strategystrategy. py för detaljer. 6) För att kunna göra någon backtesting är det nödvändigt att generera simulerade forexdata eller ladda ner historiska fältdata. Om du bara vill prova programvaran är det snabbaste sättet att generera ett exempel-backtest att generera viss simulerad data. Det nuvarande dataformatet som används av QSForex är detsamma som det som tillhandahålls av DukasCopy Historical Data Feed vid dukascopyswissenglishmarketwatchhistorical. För att generera några historiska data, se till att inställningen CSVDATADIR i settings. py är inställd på en katalog där du vill att de historiska data ska leva. Därefter måste du köra generatesimulatedpair. py. som finns under skriptkatalogen. Det förväntar sig ett enda kommandoradsargument, vilket i detta fall är valutaparet i BBBQQQ-format. Till exempel: I det här skedet är skriptet hårdkodat för att skapa en enda månadsdata för januari 2014. Dvs. du kommer att se enskilda filer, av formatet BBBQQQYYYYMMDD. csv (t. ex. GBPUSD20140112.csv) visas i din CSVDATADIR för alla arbetsdagar i den månaden. Om du vill ändra månadstiden för datautmatningen, ändrar du bara filen och kör igen. 7) Nu när den historiska data har genererats är det möjligt att göra en backtest. Backtest-filen är lagrad i backtestbacktest. py. men detta innehåller bara Backtest-klassen. För att faktiskt genomföra en backtest måste du instansera den här klassen och ge den nödvändiga modulerna. Det bästa sättet att se hur det här görs är att titta på exemplet Moving Average Crossover implementation i filen examplemac. py och använd det som en mall. Detta använder sig av MovingAverageCrossStrategy som finns i strategystrategy. py. Den här standarden handlar både för GBPUSD och EURUSD för att visa flera valutaparanvändning. Den använder data som finns i CSVDATADIR. För att exekvera exemplet backtest, kör helt enkelt följande: Det tar lite tid. På mitt Ubuntu-skrivbordssystem hemma, med de historiska data som genereras via generatesimulatedpair. py. Det tar cirka 5-10 minuter att springa. En stor del av denna beräkning sker vid slutet av den faktiska backtesten, när nedräkningen beräknas, så kom ihåg att koden inte har hängt upp Vänligen lämna det tills det är klart. 8) Om du vill se resultatet av backtestet kan du helt enkelt använda output. py för att se en egenkapitalkurva, periodens retur (dvs tick-to-tick return) och en drawdown-kurva: Och det är det på det här steget är du redo att börja skapa egna backtests genom att ändra eller lägga till strategier i strategystrategy. py och använda verkliga data som hämtas från DukasCopy (dukascopyswissenglishmarketwatchhistorical). Om du har några frågor om installationen kan du gärna maila mig på mikequantstart. Om du har några buggar eller andra problem som du tycker kanske beror på kodbasen, är du välkommen att öppna ett Githubproblem här: githubmhallsmooreqsforexissues Copyright (c) 2015 Michael Halls-Moore Tillstånd beviljas härmed gratis till någon person skaffa en kopia av denna programvara och tillhörande dokumentationsfiler (Programvaran) för att handla i Programvaran utan begränsning, inklusive utan begränsning rättigheterna att använda, kopiera, modifiera, fusionera, publicera, distribuera, sublicense och eller sälja kopior av Programvaran, och att tillåta personer till vilka Programvaran är avsedd att göra det, under förutsättning att följande villkor är uppfyllda: Ovanstående upphovsrättsmeddelande och detta tillståndsmeddelande ska ingå i alla kopior eller väsentliga delar av Programvaran. PROGRAMVARAN GIVAS SOM ÄR, UTAN GARANTI AV NÅGON KÄN, UTTRYCKLIGT ELLER UNDERFÖRSTÅDD, INKLUSIVE MEN INTE BEGRÄNSAT TILL GARANTIER FÖR SALGBARHET, EGNETHET FÖR ET SÄRSKILT SYFTE OCH NONINFRINGEMENT. INNEHÅLLSFÖRSÄLJARE ÄR INTE HÄNDIGT FÖR ANSVAR, SKADOR ELLER ANNAN ANSVAR, OM EN ANSVAR AV KONTRAKTET SKADER ELLER ANNAN, UTAN ELLER I SAMBAND MED PROGRAMVARAN ELLER ANVÄNDNINGEN ELLER ANDRA FÖRHANDLINGAR I PROGRAMVARA. Forex Trading Ansvarsbegränsning Valutakurshandel på margin ger hög risk och kan inte vara lämplig för alla investerare. Tidigare resultat är inte en indikation på framtida resultat. Den höga hävstångseffekten kan fungera mot dig såväl som för dig. Innan du bestämmer dig för att investera i utländsk valuta bör du noggrant överväga dina investeringsmål, nivå av erfarenhet och risk aptit. Möjligheten finns att du kan bibehålla en förlust av vissa eller alla dina initiala investeringar och därför borde du inte investera pengar som du inte har råd att förlora. Du borde vara medveten om alla risker som är förknippade med valutahandel och söka råd från en oberoende finansiell rådgivare om du är osäker. Om Mike Hi Jag heter Michael Halls-Moore och jag är killen bakom QuantStart. Jag tog examen med en MMath i matematik från University of Warwick, doktorsexamen från Imperial College London i Fluid Dynamics, och arbetade i en hedgefond som en kvantitativ handelsutvecklare under de senaste åren i Mayfair, London. Jag spenderar nu tid på forskning, utveckling, backtesting och implementering av intradagalgoritmiska handelsstrategier. Jag är egentligen bara en kille som en gång ville ha jobbat som en kvantitativ analytiker i staden London. Som en ung doktorand kände jag mig som att bli en kvant var nästa logiska steg för att utnyttja mina matematiska färdigheter i en spännande och lukrativ karriär. Jag började studera för att vara en kvant i oktober 2006, men märkte snart att den information jag behövde veta var ganska tät och ganska svår att förstå utan mycket arbete. Jag behövde verkligen organisation, diagram och användbara tips från andra som visste bättre. Ingenting av den typen fanns egentligen för kvanta intervjuförberedelser på Internet, så jag tänkte Id gör det själv. Och sålunda QuantStart föddes. Jag organiserade mina anteckningar, läste alla matematiska finans - och algoritmiska handelshandböckerna, pratade med en massa människor och placerade all den informationen online så att jag lätt kunde komma åt mina anteckningar var som helst för att hjälpa mig att förstå. Då förstod jag inte att jag hjälpte till att starta något stort. Sedan QuantStarts lanseringen i mars 2010 blir Ive en kvantitativ utvecklare för en hedgefond i London och har haft mer än 500 000 unika besökare som använder den för hjälp - och fler potentiella kunder och handlare fortsätter att besöka. Återigen tackar jag för att du använder QuantStart Det största med att köra QuantStart hörs dina historier om kvant och handelssucces. Jag drivs för att göra webbplatsen bättre genom att fortsätta lägga till mer information och ge världen den bästa algoritmiska handel och kvantfinansieringsinformation som finns tillgänglig tack vare dina vänliga ord och beröm. Det är en bra känsla varje gång att höra att någon har fått sitt drömkvantjobb eller äntligen har utvecklat en lönsam algoritmisk handelsmodell på grund av den här webbplatsen. Dina kommentarer, förslag och tack är mycket uppskattade. Jag tror att mitt arbete med QuantStart är mitt sätt att hjälpa den yngre generationen att bli anställd i dessa tuffa ekonomiska tider gick igenom. Om jag kan hjälpa tiotusentals att få jobb i Wall Street eller London, och de lyckas med en framgångsrik kvantitativ karriär, känner jag mig som en stor skillnad. Om du är ny, återigen är jag här för att hjälpa dig, så om du har några frågor eller kommentarer (eller förslag) om något, var god kontakta mig när som helst. Det bästa sättet att nå mig är att maila mikequantstart. Lycka till er alla Skål

No comments:

Post a Comment