Die bemeestering van Python vir Finansies Forex met site OANDA API In die vorige afdelings, ons geïmplementeer 'n handel stelsel deur skakeling met Interaktiewe Brokers Trader WorkStation X deur die aansluiting verbindings oor 'n enkele poort. Daar is egter baie ander makelaars bied verskillende keuses van haak persoonlike handel sagteware oor 'n API. In hierdie artikel, sal ons leer hoe om ons handel strategie met OANDAs REST API koppelvlak. Site OANDA 'n belangrike speler in die buitelandse valuta (Forex) besigheid diens kleinhandel beleggers. Ons sal 'n tendens volgende strategie gebruik om forex produkte handel. Wat is RES RUS staan vir Representational Staat oordrag. Dit verwys na web diens API vir die oordrag van data oor HTTP gebruik van die AOO. Plaas. POST. of te verwyder metodes. Met die res API, kan ons stroom. Die beste inhoud vir jou loopbaan. Vind onbeperkte leer oor die vraag na sowat 1 / dag. Machine Leer en patroonherkenning vir Algorithmic Forex en Stock Trading Inleiding masjien leer in enige vorm, insluitend patroonherkenning, het natuurlik baie gebruike van stem en gesig erkenning aan mediese navorsing. In hierdie geval, ons vraag is of ons patroonherkenning kan gebruik om vorige situasies wat soortgelyk in patroon was verwys. As ons dit kan doen, kan ons dan maak ambagte gebaseer op wat ons weet wat gebeur met diegene patrone in die verlede en eintlik 'n wins Om dit te doen maak, gaan alles heeltemal kodeer onsself. As jy toevallig op hierdie onderwerp te geniet, sal die volgende stap wees om te kyk na GPU versnelling of threading. Was net gaan Matplotlib nodig (vir data visualisering) en 'n paar Numpy (vir verwerking van syfers), en die res is vir ons. Python is natuurlik 'n enkel-threaded taal, wat beteken dat elke script sal slegs gebruik 'n enkele SVE (beteken gewoonlik hierdie dit maak gebruik van 'n enkele SVE kern, en soms selfs net die helfte of 'n kwart, of nog erger, van daardie kern). Dit is die rede waarom programme in Python 'n rukkie om rekenaar iets kan neem, maar jou verwerking kan slegs 5 en RAM 10. Vir meer inligting oor threading leer, kan jy die stringe handleiding te sien op hierdie site. Die maklikste manier om hierdie modules deesdae kry is om te gebruik PIP installeer. Dont weet wat pit is of hoe om modules te installeer Pip is waarskynlik die maklikste manier om pakkette te installeer Sodra jy Python installeer, moet jy in staat wees om jou opdrag prompt, soos cmd. exe op vensters, of bash op Linux, en tipe: pit installeer Numpy neut installeer matplotlib Het jy probleme steeds geen probleem, Theres 'n handleiding vir die volgende: pit installeer Python modules handleiding. As jy nog steeds probleme het, voel vry om ons te kontak, met behulp van die kontak in die voetskrif van hierdie webwerf. Die plan is om 'n groep van pryse in 'n tyd, en sit dit aan persent verandering in 'n poging om die data te normaliseer. Kom ons sê ons neem 50 agtereenvolgende prys punte ter wille van verduideliking. Wat goed doen, is karteer hierdie patroon in die geheue, skuif vorentoe een prys punt, en weer die kaart van die patroon. Vir elke patroon wat ons karteer in die geheue, dan wil ons vorentoe spring 'n bietjie, sê, 10 prys punte en teken waar die prys is op daardie stadium. Ons het toe karteer hierdie uitkoms van die patroon en voortgaan. Elke patroon het sy gevolg. Volgende, neem ons die huidige patroon, en dit vergelyk met al die vorige patrone. Wat goed doen, is vergelyk die persent ooreenkoms met alle vorige patrone. As hul persent ooreenkoms is meer as 'n sekere drempel, dan gaan dit oorweeg. Van hier, miskien het ons 20-30 vergelykbaar patrone uit die geskiedenis. Met hierdie soortgelyke patrone, kan ons dan n gemiddelde gee van hul uitkomste, en kom met 'n geskatte gemiddelde uitslag. Met die gemiddelde uitslag, al is dit baie gunstig, dan kan ons dalk 'n koop te inisieer. As die uitslag is nie gunstig is, miskien ons verkoop, of kort. Vir visualisering, hier is 'n voorbeeld: In die voorbeeld hierbo, die voorspelde gemiddelde patroon is om op te trek, sodat ons kan 'n koop te inisieer. Hierdie reeks sal nie eindig met jou om enige soort van kry-rich-quick algoritme. Daar is 'n paar bekende foute met hierdie program, en die kanse wat jy in staat is om ambagte vinnig genoeg uit te voer met die bosluis data is onwaarskynlik, tensy jy 'n bank. Die doel hier is om jou te wys net hoe maklik en basiese patroon erkenning is. Solank as wat jy 'n paar basiese Python programmering kennis, moet jy in staat wees om te volg along. OANDA API Trading Nut in Python Voorbeeld programme handel met die site OANDA API deur Python2.7 Dit repo bevat 'n handel program wat handel voer wanneer WBG en SMA kruis . Daar is ook 'n lêer met 'n paar baie eenvoudige funksies wat 'n bedryf of 'n bevel onderskeidelik sal oopmaak. Kloon hierdie repo om die ligging van jou keuse verander api-order. py om te doen wat jy wil, of net loop api-trade-averages. py behulp Python2.7 Om die script loop spesifiseer asseblief die aantal kerse waaroor die berekening WBG en SMA, die kers korrelig, die instrument en jou accountId. Dit script maak gebruik van die sandbox omgewing, so moet asseblief gebruik jy sandbox accountId. python api-trade-averages. py 10 S5 EURUSD Hierdie program is daarop gemik om site OANDA API funksies demonstreer en is nie bedoel as 'n belegging advies of 'n oplossing te koop of te verkoop enige belegging product. QSForex is 'n oop-bron gebeurtenis gedrewe back testing en leef verhandelingsplatform vir gebruik in die buitelandse valuta (Forex) markte, wat tans in 'n alfa staat. Dit is geskep as deel van die Forex Trading Dagboek reeks oor QuantStart om die sistematiese handel gemeenskap te voorsien met 'n robuuste handel enjin wat eenvoudig forex strategie implementering en toetsing laat. Die sagteware word onder 'n permissiewe MIT lisensie (sien onder). Open-source - QSForex is vrygestel onder 'n uiters permissiewe open-source MIT lisensie, wat vol gebruik in beide navorsing en kommersiële toepassings toelaat, sonder beperking, maar met geen waarborg van enige aard hoegenaamd nie. Gratis - QSForex is heeltemal gratis en kos niks om af te laai of te gebruik. Samewerking - As QSForex is open-source baie ontwikkelaars saam om die sagteware te verbeter. Nuwe funksies word dikwels bygevoeg. Enige foute is vinnig bepaal en vasgestel. Software Development - QSForex is geskryf in die Python-programmeertaal vir eenvoudige kruis-platform ondersteuning. QSForex bevat 'n suite van eenheid toetse vir die meerderheid van die berekening kode en nuwe toetse word voortdurend bygevoeg vir nuwe funksies. Gebeurtenis gedrewe Architecture - QSForex is heeltemal gebeurtenis gedrewe beide vir back testing en live handel, wat lei tot eenvoudige oordrag van strategieë van 'n navorsingsprojek / toetsfase om 'n lewendige handel implementering. Transaksiekoste - Smeer kostes word ingesluit by verstek vir alle backtested strategieë. Back testing - QSForex funksies intraday bosluis-resolusie multi-dag multi-geldeenheid paar back testing. Trading - QSForex ondersteun tans live intraday handel met behulp van die site OANDA makelaarsloon API oor 'n portefeulje van pare. Prestasie statistieke - QSForex ondersteun tans basiese prestasiemeting en gelykheid visualisering via die Matplotlib en Seaborn visualisering biblioteke. Installasie en Gebruik 1) Besoek www. oanda / en die opstel van 'n rekening om die API verifikasie geloofsbriewe, wat jy nodig het om uit te voer lewende handel te verkry. Ek verduidelik hoe om dit te uit te voer in hierdie artikel: www. quantstart / artikels / Forex-Trading-Dagboek-1-outomatiese-Forex-Trading-met-die-site OANDA-API. 2) Kloon hierdie git bewaarplek in 'n geskikte plek op jou rekenaar met behulp van die volgende opdrag in jou terminale: git kloon GitHub / mhallsmoore / qsforex. git. Alternatiewe kan jy die zip-lêer van die huidige meester tak op GitHub / mhallsmoore / qsforex / argief / master. zip aflaai. 3) Maak 'n stel van die omgewing veranderlikes vir al die instellings wat in die settings. py lêer in die aansoek hoofdmap. (.) Alternatiewelik kan jy hard jou spesifieke instellings soos deur die vervang van die os. environ. get oproepe vir elke instelling: 4) Skep 'n virtuele omgewing (virtualenv) vir die QSForex kode en gebruik neut om die vereistes te installeer. Byvoorbeeld in 'n Unix-gebaseerde stelsel (Mac of Linux) wat jy dalk so 'n gids skep soos volg deur die invoer van die volgende opdragte in die terminale: sal dit 'n nuwe virtuele omgewing by die pakkette in installeer skep. Veronderstel jy die QSForex git repository afgelaai in 'n voorbeeld gids soos / projekte / qsforex / (verander hierdie gids onder om waar jy QSForex geïnstalleer), dan ten einde die pakkette wat jy sal nodig hê om die volgende opdragte uit te voer installeer: Dit sal 'n paar te neem tyd en wyl Numpy, Scipy, Pandas, Scikit-Leer en Matplotlib moet opgestel. Daar is baie pakkette wat nodig is vir hierdie om te werk, so moet asseblief 'n blik op hierdie twee artikels vir meer inligting: Jy moet ook 'n simboliese skakel vanaf jou webwerf-pakkette gids te skep om jou QSForex installasie gids in staat te wees om 'n beroep invoer qsforex binne die kode. Om dit te doen wat jy sal 'n bevel soortgelyk aan die volgende nodig: Maak seker dat / projekte / qsforex verander om jou installasie gids en /venv/qsforex/lib/python2.7/site-packages/ om jou virtualenv webwerf pakkette gids. Jy sal nou in staat wees om die daaropvolgende opdragte korrek uit te voer. 5) Op hierdie stadium, as jy net wil praktiseer of lewende handel uit te voer, dan kan jy luislang handel / trading. py hardloop. wat sal die verstek TestStrategy handel strategie te gebruik. Dit net koop of verkoop 'n geldeenheid paar elke 5 bosluis. Dit is suiwer vir die toets - gebruik dit nie in 'n lewendige handelsomgewing As jy wil 'n meer bruikbare strategie te skep, dan net 'n nuwe klas met 'n beskrywende naam, byvoorbeeld MeanReversionMultiPairStrategy en verseker dat dit 'n calculatesignals metode. Jy sal nodig hê om hierdie klas die pare lys asook die gebeure tou slaag, soos in die handel / trading. py. Kyk asb na strategie / strategy. py vir meer inligting. 6) Ten einde enige back testing dit nodig is om gesimuleerde forex data te genereer of laai historiese blok data uit te voer. As jy wil net probeer om die sagteware uit, die vinnigste manier om te genereer 'n voorbeeld backtest is om 'n paar gesimuleerde data te genereer. Die huidige data formaat wat gebruik word deur QSForex is dieselfde as dié wat deur die DukasCopy Historiese data voed op www. dukascopy / Switserse / Engels / MarketWatch / historiese /. In 'n sekere historiese data te genereer, maak seker dat die CSVDATADIR instelling in settings. py is om 'n gids waar jy wil die historiese data te leef. Jy moet dan generatesimulatedpair. py hardloop. wat onder die skrifte / gids. Hy verwag 'n enkele command line argument, wat in hierdie geval is die geldeenheid paar in BBBQQQ formaat. Byvoorbeeld: In hierdie stadium die script is gekodeer om 'n enkele maande data te skep vir Januarie 2014. Dit is, sal jy individuele lêers te sien, van die formaat BBBQQQYYYYMMDD. csv (bv GBPUSD20140112.csv) vertoon in jou CSVDATADIR vir alle werksdae in daardie maand. Indien u verkies om die maand / jaar van die data uitset verander, net die lêer en re-run verander. 7) Nou dat die historiese data gegenereer is dit moontlik 'n backtest uit te voer. Die backtest lêer self is gestoor in backtest / backtest. py. maar dit bevat slegs die backtest klas. Om 'n backtest eintlik voer wat jy nodig het om hierdie klas instansieer en verskaf dit met die nodige modules. Die beste manier om te sien hoe dit gedoen is om te kyk na die voorbeeld Gemiddeld Crossover implementering beweeg in die voorbeelde / mac. py lêer en gebruik dit as 'n sjabloon. Dit maak gebruik van die MovingAverageCrossStrategy wat gevind word in strategie / strategy. py. Hierdie verstek na handel beide GBP / USD en EUR / USD verskeie geldeenheid paar gebruik demonstreer. Dit maak gebruik van data wat gevind is in CSVDATADIR. Om die voorbeeld backtest voer, net hardloop die volgende: Dit sal 'n tyd neem. Op my Ubuntu lessenaar stelsel by die huis, met die historiese data wat gegenereer word deur generatesimulatedpair. py. dit neem om 5-10 minute om te loop. 'N Groot deel van hierdie berekening plaasvind aan die einde van die werklike backtest, wanneer die onttrekking word bereken, so moet asseblief onthou dat die kode nie hang Laat dit tot voltooiing. 8) As jy wil om die prestasie van die backtest kan jy net gebruik output. py om 'n aandele kurwe, tyd opbrengste skerm (dit wil sê merk-tot-blok opbrengste) en 'n onttrekking kurwe: En dis dit in hierdie stadium is jy gereed is om te begin maak van jou eie backtests deur die wysiging of die aanbring van strategieë in strategie / strategy. py en die gebruik van werklike data afgelaai word vanaf DukasCopy (www. dukascopy / Switserse / Engels / MarketWatch / historiese /). Indien u enige vrae oor die installasie het moet asseblief nie huiwer om my te e-pos by mikequantstart. Indien u enige foute of ander kwessies wat jy dink dalk te danke aan die kodebasis wees spesifiek, voel vry om 'n GitHub kwessie hier oop te maak: GitHub / mhallsmoore / qsforex / kwessies Kopiereg (c) 2015 Michael Saal-Moore Toestemming word hiermee verleen, gratis lading, aan enige persoon 'n kopie van hierdie sagteware en daarvan dokumentasie (die sagteware), om te gaan in die sagteware sonder beperking, insluitend sonder beperking die reg om te gebruik, kopieer, aanpas, kombinering, publiseer, versprei, sublisensieer, en / of te verkoop kopieë van die sagteware, en om persone aan wie die Software is lewer om dit te doen, onderhewig aan die volgende voorwaardes toegelaat: die bogenoemde kopieregkennisgewing en hierdie kennisgewing toestemming sal in alle kopieë of aansienlike gedeeltes van die sagteware word ingesluit. DIE SAGTEWARE WORD AS verskaf word, SONDER WAARBORG VAN ENIGE AARD, uitdruklik of geïmpliseer, INSLUITEND MAAR NIE BEPERK TOT DIE WAARBORGE VAN VERHANDELBAARHEID, GESKIKTHEID VIR 'N SPESIFIEKE DOEL en sekuriteit. In geen geval sal die skrywers OR KOPIEREGHOUERS aanspreeklik wees vir enige eis, skade of ander aanspreeklikheid, hetsy in 'Aksie VAN KONTRAK, DELIK OF ANDERS, VOORTSPRUITEND UIT, VAN OF IN VERBAND MET DIE SAGTEWARE OF DIE GEBRUIK VAN OF ANDER HANDELINGEN IN DIE SAGTEWARE. Forex Trading Disclaimer Trading buitelandse valuta op marge dra 'n hoë vlak van risiko, en mag nie geskik vir alle beleggers nie. Vorige prestasie is nie 'n aanduiding van toekomstige resultate. Die hoë mate van die hefboom kan werk teen jou sowel as vir jou. Voordat jy besluit om te belê in buitelandse valuta moet jy noukeurig oorweeg jou beleggingsdoelwitte, vlak van ervaring, en risiko-aptyt. Die moontlikheid bestaan dat jy 'n verlies van sommige of al jou aanvanklike belegging kan volhou en daarom moet jy nie geld wat jy nie kan bekostig om te verloor belê. Jy moet bewus wees van al die risiko's wat verband hou met die buitelandse valuta handel, en soek advies van 'n onafhanklike finansiële adviseur indien u enige doubts. Forex Trading Dagboek 1 - outomatiese forex met die site OANDA API Deur Michael Saal-Moore op 21 Januarie 2015 Ek voorheen genoem in die QuantStart: 2014 in Review artikel wat ek sou spandeer 'n paar van 2015 skryf oor outomatiese forex. Gegewe dat ek myself gewoonlik uit te voer navorsing in aandele en futures markte, het ek gedink dit sou pret (en opvoedkundige) om oor my ervarings van toetrede tot die forex mark in die styl van 'n dagboek te skryf. Elke dagboekinskrywing sal probeer om te bou op al sy voorgangers, maar moet ook relatief selfstandige wees. In hierdie eerste inskrywing van die dagboek Siek word beskryf hoe om 'n nuwe praktyk makelaars rekening met site OANDA asook hoe om 'n basiese multi-gebeurtenis gedrewe handel enjin wat outomaties ambagte in beide 'n praktyk en lewendige omgewing kan voer te skep. Verlede jaar het ons baie tyd op soek na die gebeurtenis gedrewe backtester. hoofsaaklik vir aandele en ETF's. Die een wat ek hieronder aanbied is gerig op forex en kan gebruik word vir óf papier handel of lewende handel. Ek het al die volgende instruksies vir Ubuntu 14.04 geskryf, maar hulle moet maklik vertaal na Windows of Mac OS X, met behulp van 'n Python verspreiding soos Anaconda. Die enigste bykomende biblioteek gebruik word vir die Python handel enjin is die versoeke biblioteek, wat nodig is vir HTTP kommunikasie na die site OANDA API is. Aangesien dit die eerste post direk oor buitelandse valuta handel, en die kode hieronder aangebied kan reguit aangepas word om 'n lewendige handel omgewing, wil ek graag die volgende disclaimers bied: Disclaimer: Trading buitelandse valuta op marge dra 'n hoë vlak van risiko, en mag nie geskik vir alle beleggers nie. Vorige prestasie is nie 'n aanduiding van toekomstige resultate. Die hoë mate van die hefboom kan werk teen jou sowel as vir jou. Voordat jy besluit om te belê in buitelandse valuta moet jy noukeurig oorweeg jou beleggingsdoelwitte, vlak van ervaring, en risiko-aptyt. Die moontlikheid bestaan dat jy 'n verlies van sommige of al jou aanvanklike belegging kan volhou en daarom moet jy nie geld wat jy nie kan bekostig om te verloor belê. Jy moet bewus wees van al die risiko's wat verband hou met die buitelandse valuta handel, en soek advies van 'n onafhanklike finansiële adviseur indien u enige twyfel het. Hierdie sagteware is verskaf soos en enige uitdruklike of geïmpliseerde waarborge, insluitend, maar nie beperk tot, die geïmpliseerde waarborge van verhandelbaarheid en geskiktheid vir 'n spesifieke doel is ontken. In geen geval sal die regente of bydraers aanspreeklik wees vir enige direkte, indirekte, toevallige, spesiale, voorbeeldige, of gevolglike skade (insluitend, maar nie beperk tot, die verkryging van plaasvervanger goedere of dienste verlies van gebruik, data of winste of besigheid onderbreking ) egter veroorsaak en op enige teorie van aanspreeklikheid, hetsy in kontrak, skuldlose aanspreeklikheid, of tort (insluitend nalatigheid of andersins) wat op enige van die gebruik van hierdie sagteware, selfs as hulle oor die moontlikheid van sodanige skade. Die opstel van 'n rekening in site OANDA Die eerste vraag wat opkom is hoekom kies site OANDA. Eenvoudig gestel, nadat 'n bietjie van Googlen rond vir forex makelaars wat APIs het, het ek gesien dat site OANDA onlangs vrygestel van 'n behoorlike REST API wat kan maklik met uit byna enige taal in 'n uiters eenvoudige manier gekommunikeer. Nadat jy deur hul ontwikkelaar API dokumentasie. Ek het besluit om dit te probeer, ten minste met 'n praktyk rekening. Om duidelik te wees - ek het geen vorige of bestaande verhouding met site OANDA en is net die verskaffing van hierdie aanbeveling op grond van my beperkte ervaring rondspeel met hul praktyk API en 'n paar kort gebruik (vir markdata aflaai) terwyl hy by 'n fonds wat voorheen. As iemand in 'n ander forex makelaars wat ook 'n soortgelyke moderne API gekom toe id gelukkig wees vir hulle 'n blik te gee sowel. Voor die gebruik van die API is dit nodig om aan te meld vir 'n praktyk rekening. Om dit te doen, hoof van die teken-up skakel. Jy sal die volgende skerm sien: Jy sal dan in staat wees om aan te meld met jou inskrywing geloofsbriewe. Maak seker dat jy die blad fxTradePractice van die teken-in-skerm te kies: Een in wat jy nodig het om 'n aantekening van jou rekening ID te maak. Dit is gelys onder die swart My Fondse header langs Laerskool. Myne is 'n 7-syfergetal. Daarbenewens sal jy ook 'n persoonlike API teken genereer. Om dit te doen klik Bestuur API Toegang onder die blad Ander aksies op die links onder: Op hierdie stadium sal jy in staat wees om 'n API teken genereer wees. Jy sal die sleutel vir gebruik later nodig, so maak seker om dit neer te skryf sowel. Jy sal nou wil die praktyk toepassing FXTrade, wat sal toelaat dat ons die uitvoer bestellings en ons (papier) wins amp verlies sien stapel te stuur. As jy 'n Ubuntu stelsel loop jy sal nodig hê om 'n effens ander weergawe van Java installeer. In die besonder, die Oracle weergawe van Java 8. As jy dit nie doen dit dan die praktyk simulator sal nie laai van die leser. Ek het hierdie opdragte op my stelsel: Jy sal nou in staat wees om die praktyk handelsomgewing te loods. Terug na die site OANDA paneelbord en klik op die groen uitgelig Begin FXTrade Practice skakel. Dit sal lei tot 'n Java dialoog te vra of jy wil om dit te doen. Klik Run en die instrument fxTrade Practice sal laai. Myne gebreke aan 'n 15-minute kers grafiek van EUR / USD met die kwotasie paneel aan die linkerkant: Op hierdie stadium is ons gereed om te begin ontwerp en kodering ons outomatiese forex stelsel teen die site OANDA API. Oorsig van Handel Architecture As jy na aanleiding van die gebeurtenis gedrewe backtester reeks vir aandele en ETF's wat ek verlede jaar geskep gewees het, sal jy bewus wees van hoe so 'n gebeurtenis gedrewe handel stelsel funksies. Vir dié van julle wat nuut is in gebeurtenis gedrewe sagteware. Ek sou raai die lees van die artikel om 'n insig in hoe dit werk te kry. In wese is die hele program uitgevoer in 'n infinte while lus dat slegs beëindig wanneer die handel stelsel is afgeskakel. Die sentrale kommunikasie meganisme van die program verskyn deur 'n tou wat gebeure bevat. Die tou word voortdurend bevraagteken om te kyk vir 'n nuwe gebeure. Sodra 'n gebeurtenis uit die top van die tou is geneem moet hanteer word deur 'n toepaslike deel van die program. Vandaar 'n mark data feed kan skep TickEvent s wat op die tou geplaas wanneer 'n nuwe mark prys kom. 'N Sein-genererende strategie voorwerp kan skep OrderEvent s wat 'n makelaar te stuur. Die nut van so 'n stelsel gegee word deur die feit dat dit nie saak watter volgorde of tipes van die gebeure op die tou geplaas word, aangesien hulle altyd korrek sal hanteer word deur die regte komponent binne die program. Daarbenewens verskillende dele van die program kan uitgevoer word in 'n aparte drade. Dit beteken dat daar nooit enige wag vir 'n bepaalde komponent voor die verwerking van enige ander. Dit is baie nuttig in algoritmiese handel situasies waar die mark data feed hanteerders en strategie sein kragopwekkers het heeltemal anders prestasie eienskappe. Die vernaamste handelsvennote lus word gegee deur die volgende Python pseudo-kode: Soos ons hierbo die kode lopies wat in 'n oneindige lus. Eerstens, is die tou ondervra om 'n nuwe gebeurtenis te haal. As die waglys is leeg, dan die lus net weer begin na 'n kort slaap tydperk bekend as die hartklop. As 'n gebeurtenis is gevind sy soort is beoordeel en dan die betrokke module (óf die strategie of die uitvoering hanteerder) aangesê word om die gebeurtenis te hanteer en moontlik genereer nuwes wat teruggaan na die tou. Die basiese komponente dat ons sal skep vir ons handel stelsel sluit die volgende in: Streaming Prys Handler - Dit sal 'n lang-lopende verband hou oop vir OANDAs bedieners en stuur bosluis data (dws bod / vra) oor die verband vir enige instrumente wat belang gestel het in Strategie seingenerator -. dit sal 'n reeks van blok gebeure af te gebruik om te handel bestellings wat uitgevoer word deur die uitvoering hanteerder te genereer. Uitvoering Handler - Neem 'n stel van orde gebeure en dan blindelings voer hulle met site OANDA. Events - Hierdie voorwerpe vorm die boodskappe wat geslaag om op die gebeure tou. Ons het net nodig het twee hiervoor implementering, naamlik die TickEvent en die OrderEvent. Main Entry Point - Die belangrikste beginpunt sluit ook die handel lus wat voortdurend stembusse die boodskap tou en versendings boodskappe na die korrekte komponent. Dit is dikwels bekend as die gebeurtenis lus of event handler. Ons sal nou bespreek die implementering van die kode in detail. Aan die onderkant van die artikel is die volledige lys van al die bronkode lêers. As jy dit te plaas in dieselfde gids en hardloop luislang trading. py jy sal begin genereer bestellings, in die veronderstelling jy dit ingestuur het in jou rekening ID en stawingtoken van site OANDA. Python Implementering Dit is slegte praktyk om wagwoorde of verifikasie sleutels slaan binne 'n kodebasis as jy nooit kan voorspel wat sal uiteindelik toegang tot 'n projek toegelaat word. In 'n produksiestelsel sal ons hierdie geloofsbriewe as omgewing veranderlikes met die stelsel stoor en dan navraag hierdie envvars elke keer die kode is herontplooi. Dit verseker dat wagwoorde en auth tekens nooit in 'n weergawe beheer stelsel gestoor word. Maar, aangesien ons slegs belangstel in die bou van 'n speelding handel stelsel, en is nie betrokke by die produksie besonderhede in hierdie artikel, ons sal plaas skei hierdie auth tekens in 'n lêer instellings. In die volgende settings. py konfigurasielêer het ons 'n woordeboek genoem OMGEWINGS wat die API eindpunte vir beide die site OANDA prys streaming API en die handel API stoor. Elke sub woordeboek bevat drie afsonderlike API eindpunte: real. praktyk en sandbox. Die sandput API is suiwer vir die toets-kode en vir die beheer van dat daar geen foute of foute. Dit maak nie die uptime waarborg van die werklike of praktyk APIs het. Die praktyk API, in wese, verskaf die vermoë om papier handel. Dit is, dit gee al die eienskappe van die reële API op 'n gesimuleerde praktyk rekening. Die werklike API is net dat - dit is lewende handel As jy dit eindpunt in jou kode, dit sal handel teen jou live rekening balans. Wees baie versigtig BELANGRIK: Wanneer die handel teen die praktyk API onthou dat 'n belangrike transaksie koste, wat van invloed mark. is nie oorweeg nie. Aangesien daar geen ambagte is eintlik geplaas in die omgewing van hierdie koste moet in berekening gebring word in 'n ander manier elders met behulp van 'n impak mark model as jy wil om realisties te assesseer. In die volgende is ons met behulp van die praktyk rekening soos deur die DOMEIN omgewing. Ons moet twee afsonderlike woordeboeke vir die domeine, een elk vir die streaming en handel API komponente. Ten slotte het ons die ACCESSTOKEN en ACCOUNTID. Ive gevul die twee hieronder met dummy ID's sodat jy sal nodig hê om jou eie, wat kan verkry word vanaf die site OANDA rekening bladsy gebruik: Die volgende stap is om die gebeure wat die tou sal gebruik om jou te help al die individuele komponente kommunikeer definieer. Ons moet twee: TickEvent en OrderEvent. Die eerste winkels inligting oor instrument mark data soos die (beste) bod / vra en die handel tyd. Die tweede is gebruik om bestellings by die uitvoering hanteerder oordra en dus bevat die instrument, die aantal eenhede van verhandeling, die tipe orde (mark of beperking) en die kant (dit wil sê koop en verkoop). Toekoms bestendig ons gebeure kode gaan ons 'n basis klas genoem Event skep en het al die gebeure in besit van hierdie. Die kode word hieronder verskaf in events. py: Die volgende klas gaan ons skep, sal die handel strategie te hanteer. In hierdie demo gaan ons 'n redelik nonsens strategie wat eenvoudig ontvang al die mark bosluise en op elke 5de blok lukraak koop of verkoop 10.000 eenhede van EUR / USD skep. Dit is duidelik dat dit 'n belaglike strategie Maar dit is fantasties vir toetsdoeleindes, want dit is maklik om te kode en verstaan. In die toekoms dagboekinskrywings sal ons hierdie word vervang met iets beduidend meer opwindend wat (hopelik) sal op sy beurt 'n wins Die strategy. py lêer kan hier gevind word. Kom ons daardeur te werk en te sien wat aangaan. Eerstens voer ons die ewekansige biblioteek en die OrderEvent voorwerp van events. py. Ons moet die ewekansige lib ten einde 'n ewekansige koop orde kies of te verkoop. Ons moet OrderEvent as dit is hoe die strategie voorwerp bestellings om die gebeure tou, wat later sal uitgevoer word deur die uitvoering hanteerder sal stuur. Die TestRandomStrategy klas neem net die instrument (in hierdie geval euro / dollar), die aantal eenhede en die gebeure tou as 'n stel van parameters. Dit skep dan 'n bosluise toonbank wat gebruik word om te sê hoeveel TickEvent gevalle het dit gesien. Die meeste van die werk kom in die calculatesignals metode, wat net neem 'n gebeurtenis, bepaal of dit 'n TickEvent (anders ignoreer) en vermeerderings die bosluis toonbank. Dit tjeks dan om te sien of die telling is deelbaar deur 5 en dan lukraak koop of verkoop, met 'n mark orde, die gespesifiseerde aantal eenhede. Sy beslis nie die wêreld se grootste handel strategie, maar dit sal meer as geskik vir ons site OANDA stel API toetsdoeleindes Die volgende komponent is die uitvoering hanteerder wees. Hierdie klas is getaak met daarop reageer OrderEvent gevalle en maak versoeke aan die makelaar (in hierdie geval site OANDA) in 'n stom mode. Dit wil sê, daar is geen risikobestuur of potfolio konstruksie oortrek. Die uitvoering hanteerder sal net 'n bevel dat dit gegee is uit te voer. Ons moet al die verifikasie inligting slaag om die uitvoering klas, insluitend die domein (praktyk, werklike of sandbox), die toegang teken en rekening ID. Ons skep dan 'n veilige verbinding met httplib. een van Luislange gebou in biblioteke. Die meeste van die werk kom in executeorder. Die metode vereis 'n gebeurtenis as 'n parameter. Dit stel dan twee woordeboeke - die kop en die params. Hierdie woordeboeke sal dan korrek geïnkripteer (gedeeltelik deur urllib. 'N ander Python biblioteek) gestuur word as 'n HTTP POST versoek om OANDAs API. Ons stap verby die Content-Type en magtiging kop parameters, wat ons verifikasie inligting insluit. Daarbenewens enkodeer ons die parameters, wat die instrument (EUR / USD), eenhede, tipe en newe-orde (koop / verkoop) insluit. Ten slotte, maak ons die versoek en stoor die antwoord: Die mees komplekse deel van die handel stelsel is die StreamingForexPrices voorwerp, wat die markprys updates from site OANDA hanteer. Daar is twee metodes: connecttostream en streamtoqueue. Die eerste metode maak gebruik van die Python versoeke biblioteek aan te sluit op 'n streaming aansluiting met die toepaslike opskrifte en parameters. Die parameters sluit die rekening ID en die nodige lys instrument wat gevolg moet word geluister na vir updates (in hierdie geval is dit net euro / dollar). Let op die volgende reël: Dit vertel die verbinding met gestroom en dus oopgehou in 'n lang-lopende wyse. Die tweede metode, streamtoqueue. eintlik probeer om toegang tot die stroom. As die antwoord is nie suksesvol (dit wil sê die reaksie-kode is nie HTTP 200), dan kan ons net teruggaan en uitgang. As dit suksesvol is ons probeer om die into pakkie teruggekeer na 'n Python woordeboek laai. Ten slotte, sit ons die Python woordeboek met die instrument, bod / vra en tyd stempel in 'n TickEvent dat die gebeure tou gestuur: Ons het nou al die belangrikste komponente in plek. Die finale stap is om te draai alles wat ons tot dusver in 'n hoofprogram geskryf. Die doel van hierdie lêer, bekend as trading. py. is twee aparte drade skep. waarvan een loop die pryse hanteerder en die ander wat die handel hanteerder loop. Hoekom moet ons twee aparte drade Eenvoudig gestel, is ons die uitvoering van twee afsonderlike stukke kode, wat albei aaneen gebruik. As ons 'n nie-gestruktureerde program te skep, dan is die stroom aansluiting wat gebruik word vir die prys updates sal nooit ooit weer vry te laat om die hoof-kode pad en dus sal ons nooit werklik uit te voer enige handel. Net so, as ons die handel lus het (sien onder), sou ons nooit werklik terugkeer die vloei weg na die prys streaming voetstuk. Vandaar ons nodig het verskeie drade, een vir elke komponent, sodat hulle uit onafhanklik uitgevoer kan word. Hulle sal albei kommunikeer met mekaar deur middel van die gebeure tou. Kom ons ondersoek hierdie 'n bietjie verder. Ons skep twee afsonderlike drade met die volgende reëls: Ons ry verby die funksie of metode naam na die teiken navraag argument en dan slaag 'n iterable (soos 'n lys of tuple) om die argumente navraag argument, wat dan gaan die argumente om die werklike metode / funksie. Ten slotte begin ons albei drade met die volgende reëls: So is ons in staat was om uit te voer twee, doeltreffend oneindige herhaling,-kode segmente onafhanklik, wat beide kommunikeer deur middel van die gebeure tou. Let daarop dat die Python threading biblioteek 'n ware multi-kern multi omgewing produseer nie as gevolg van die CPython implementering van 'n afgestorwene en die Global Interpreter Lock (GIL). As jy wil graag meer inligting oor multi-threading op Python lees, neem 'n blik op hierdie artikel. Kom ons kyk na die res van die kode in detail. Eerstens ons invoer al die nodige biblioteke insluitend Queue. threading en tyd. Ons het toe in te voer al die bogenoemde kode lêers. Ek persoonlik verkies om enige verstellings instellings kapitaliseer, wat is 'n gewoonte wat ek opgetel het van die werk met Django Na dat ons die handel funksie, wat verduidelik word in Python-pseudokode bo definieer. 'N oneindige while lus uitgevoer (terwyl Ware:) wat voortdurend stembusse uit die gebeure tou en net spring die lus as dit leeg gevind. As 'n gebeurtenis dan is gevind dat dit is óf 'n TickEvent of 'n OrderEvent en dan die toepaslike komponent staan bekend as om dit uit te voer. In hierdie geval is dit óf 'n strategie of uitvoering hanteerder.
No comments:
Post a Comment