Forex Market Maker OANDA er en etablert Forex Market Maker, hvis proprietære teknologi gir finansinstitusjoner konsekvent tilgang til den dype likviditeten de trenger for å handle effektivt og med tillit. Hanging Landscape OANDA har endret landskapet i valutamarkedet Selskapet utnytter sin omfattende detaljhandel volum, tilgang til dyp likviditet fra toppbanker og effektive handelsalgoritmer for å tilby en virkelig alternativ kilde til forex likviditet. Institusjonelle kunder inkluderer hedgefond, kvalifiserte handelsfirmaer, bedriftskunder, meglerhandlere, proprietære handelsmenn, ledende verdensbanker og andre finansinstitusjoner Deres misjonskritiske systemer og strategier er avhengige av OANDAs proprietære teknologi, som typisk behandler hundrevis av forex-transaksjoner daglig. Fullt regulert Fullstendig regulert med en solid finansiell balanse OANDA har kontorer i USA, Storbritannia, Canada, Sveits, Singapore, og Japan Den prisbelønte fxTrade-plattformen er bu ilt på kjerneprinsipper for innovasjon, åpenhet og rettferdighet, og lisensiert av to av de ti ledende utenlandske valutabankene. OANDAs Institutional FX-tjenester er ikke ment eller tilgjengelig for ikke-institusjonelle kunder og er ikke beregnet for distribusjon til noen jurisdiksjon der slik distribusjon er begrenset av lov eller forskrift.1996 - 2012 OANDA Corporation Alle rettigheter forbeholdes OANDA, fxTrade og OANDA s fx familie av varemerker eies av OANDA Corporation. Alle andre varemerker som vises på dette nettstedet tilhører deres respektive eiere. OANDA cookie, cookie, OANDA cookie cookie, cookie. ltiframe bredde 1 høyde 1 frameborder 0 stilvisning ingen mcestyle display ingen gt lt iframe gt., 1 1 2016 OANDA v20, 4. CFTC, - 50 1 20 1 OANDA Asia Pacific 50 1 OANDA Canada IIROC.1996 2017 OANDA Corporation OANDA, fxTrade fx OANDA Corporation .- OANDA Europe Ltd,, 4 50 1.OANDA Europe Limited, 7110087, Tower 42, Floor 9a, 25 Old Broad St, London EC2N 1HQ 542574.OANDA J apan Co Ltd Kanto Lokale Finansielle Bureau Kin-sho, 2137, 1571.Forex Trading Dagbok 1 - Automatisert Forex Trading med OANDA API. Jeg nevnte tidligere i QuantStart 2014 I Review-artikkelen at jeg skulle tilbringe litt av 2015 å skrive om automatiserte forex trading. Given at jeg selv vanligvis utfører forskning i aksjer og futures markeder, syntes jeg det ville være morsomt og lærerikt å skrive om mine erfaringer med å gå inn i valutamarkedet i stil med en dagbok. Hver dagbokspost vil forsøke å bygge videre på alle de før, men bør også være relativt selvforsynt. I denne første innføringen av dagboken vil jeg beskrive hvordan man oppretter en ny praksismeglerkonto med OANDA, samt hvordan man oppretter en grunnleggende multithreaded hendelsesdrevet handelsmotor som automatisk kan utføre handler både i praksis og i live setting. Det siste året brukte vi mye tid på å se på hendelsesdrevet backtester primært for aksjer og ETFs. Den jeg presenterer nedenfor, er rettet mot forex og kan b e brukes til enten papirhandel eller live trading. I har skrevet alle de følgende instruksjonene for Ubuntu 14 04, men de burde enkelt oversettes til Windows eller Mac OS X, ved hjelp av en Python-distribusjon som Anaconda. Det eneste ekstra biblioteket som brukes til Python handelsmotor er forespørselsbiblioteket, som er nødvendig for kommunikasjon til OANDA API. Siden dette er det første innlegget direkte om valutahandel, og koden som presenteres nedenfor, kan enkelt tilpasses et levende handelsmiljø, vil jeg gjerne presentere Følgende ansvarsfraskrivelser. Ansvarsfraskrivelse Valutakurs på margen gir høy risiko og kan ikke være egnet for alle investorer Tidligere resultater er ikke en indikasjon på fremtidige resultater. Høy grad av løftestang kan virke mot deg så godt som for deg. Før du bestemmer deg for å investere i utenlandsk valuta bør du nøye vurdere investeringsmålene dine, nivået på erfaring og risikoen for appetitten. Muligheten er at du kan opprettholde et tap på noen eller hele din opprinnelige investering, og derfor bør du ikke investere penger som du ikke har råd til å miste. Du bør være oppmerksom på alle risikoene knyttet til valutahandel, og søk råd fra en uavhengig finansiell rådgiver dersom du er i tvil. Denne programvaren er gitt som den er, og eventuelle uttrykte eller underforståtte garantier, inkludert, men ikke begrenset til, de underforståtte garantiene for salgbarhet og egnethet for et bestemt formål, blir fraskrevet. Regentene eller bidragsyterne skal under ingen omstendigheter være ansvarlige for direkte, indirekte, tilfeldige, spesielle, eksemplariske eller følgeskader, inkludert, men ikke begrenset til, anskaffelse av erstatningsprodukter eller tjenester tap av bruk, data eller fortjeneste eller driftsavbrudd, men forårsaket og på noen teorier om ansvar, uansett om kontrakten er strengt ansvar, eller tort inklusiv uaktsomhet eller på annen måte oppstått i noen ut av bruken av denne programvaren, selv om det er informert om muligheten for slik skade. Sette opp en konto med OA NDA. Det første spørsmålet som kommer til å tenke er, hvorfor velge OANDA. Etter litt Googling rundt for forex meglere som hadde APIer, så jeg at OANDA nylig hadde gitt ut en riktig REST API som lett kunne kommuniseres med fra nesten hvilket som helst språk på en ekstremt enkel måte Etter å ha lest gjennom utviklerens API-dokumentasjon bestemte jeg meg for å prøve dem, i hvert fall med en praksiskonto. For å være klar - jeg har ingen tidligere eller eksisterende forhold til OANDA og gir bare denne anbefalingen basert på min begrensede Opplev å leke med deres praksis API og litt kort bruk for nedlasting av markedsdata mens de er ansatt i et fond tidligere. Hvis noen har kommet over noen andre forex meglere som også har en tilsvarende moderne API, så vil jeg gjerne gi dem en titt også. Før du bruker API-en, må du registrere deg for en brukerkonto. For å gjøre dette, gå til påloggingslinken. Du vil se følgende skjerm. OANDA-påmeldingsskjerm. Du vil da kunne for å logge på med påloggingsinformasjonen. Pass på å velge fxTradePractice-fanen fra påloggingsskjermbildet. OANDA påloggingsskjerm. Når du er pålogget, må du notere konto-IDen din. Den er oppført under den svarte My Funds header neste til primærgruve er et 7-sifret tall I tillegg må du også generere en personlig API-token For å gjøre dette, klikker du Administrer API-tilgang under kategorien Andre handlinger nederst til venstre. I dette trinnet vil du kunne generere en API-token Du trenger nøkkelen til bruk senere, så sørg for å skrive den ned også. Du vil nå starte FXTrade Practice-programmet, som gjør det mulig for oss å se de utførte ordrene og vår fortjeneste for tap. Hvis du kjører en Ubuntu-systemet må du installere en litt annen versjon av Java. Spesielt Oracle-versjonen av Java 8 Hvis du ikke gjør dette, vil treningssimulatoren ikke lastes fra nettleseren. Jeg kjørte disse kommandoene på systemet mitt. Du vil nå være i stand til å starte praksis trading e nvironment Gå tilbake til OANDA dashbordet og klikk på den grønne uthevede Launch FXTrade Practice-lenken. Det vil hente en Java-dialogboks som spør om du vil kjøre den. Klikk Kjør og fxTrade Practice-verktøyet vil laste Mine-gruven til et 15-min-lysdiagram over EUR USD med Quote Panel på venstre. OANDA fxTrade Practice screen. At dette punktet er vi klare til å begynne å designe og kode våre automatiserte Forex trading system mot OANDA API. Overview of Trading Architecture. If du har fulgt hendelsen drevet backtester serien for aksjer og ETFer som jeg opprettet i fjor, vil du være oppmerksom på hvordan et slikt hendelsesdrevet handelssystem fungerer For de av dere som er nybegynner med hendelsesdrevet programvare, vil jeg sterkt foreslå å lese gjennom artikkelen for å få litt innsikt inn i hvordan de fungerer. I det hele tatt er hele programmet utført i en infinte mens sløyfe som bare avsluttes når handelssystemet er slått av. Den sentrale kommunikasjonsmekanismen til programmet er gitt vi en kø som inneholder hendelser. Køen blir konstant bedt om å se etter nye hendelser Når en begivenhet er tatt av toppen av køen, må den håndteres av en passende del av programmet. Derfor kan en markedsdatainnmatning lage TickEvent s som er plassert på køen når en ny markedspris ankommer. Et signalgenererende strategibjekt kan skape OrderEvent s som skal sendes til en megling. Bruken av et slikt system er gitt av det faktum at det ikke spiller noen rolle hvilken rekkefølge eller typer av Hendelser blir plassert i køen, da de alltid vil bli riktig håndtert av den rette komponenten i programmet. I tillegg kan forskjellige deler av programmet kjøres i separate tråder, noe som betyr at det aldri er noen som venter på noen bestemt komponent før de behandler andre Dette er ekstremt nyttig i algoritmiske handelssituasjoner der markedsdataforhandlere og strategisignalgeneratorer har svært forskjellige ytelsesegenskaper. Hovedhandelen er gitt ved følgende Python pseudo-kode. Som sagt ovenfor kjører koden i en uendelig sløyfe Først blir køen pollet for å hente en ny hendelse Hvis køen er tom, starter sløyfen bare etter en kort søvnperiode kjent som hjerteslag Hvis en begivenhet er funnet, vurderes typen og deretter blir den aktuelle modulen enten strategien eller utførelseshandleren pålagt å håndtere hendelsen og muligens generere nye som går tilbake til køen. De grunnleggende komponentene som vi skal skape for vår handel Systemet inkluderer følgende. Streaming Price Handler - Dette vil holde en langvarig tilkobling åpen for OANDAs servere og sende tick-data, dvs. bud, spør på tvers av forbindelsen for alle instrumenter vi er interessert i. Strategisk Signal Generator - Dette vil ta en sekvens av tick hendelser og bruk dem til å generere handelsordre som vil bli utført av eksekveringshåndtereren. Ekspedisjonshåndterer - Tar et sett med ordrehendelser og utfører dem blindt ut med OANDA. Events - Disse objektene c Forstøt meldingene som sendes rundt på hendelseskøen. Vi krever bare to for denne implementeringen, nemlig TickEvent og OrderEvent. Hovedinngangspunktet. Hovedinngangen inkluderer også handelsløypen som kontinuerlig avstemmer meldingskøen og sender meldinger til korrekt komponent Dette kalles ofte hendelsesløkken eller hendelseshåndtereren. Vi vil nå diskutere implementeringen av koden i detalj nederst i artikkelen er det en fullstendig liste over alle kildekodefiler hvis du plasserer dem i samme katalog og kjører python vil du begynne å generere bestillinger, forutsatt at du har fylt ut din konto ID og autentiseringstoken fra OANDA. Python Implementation. It er dårlig praksis å lagre passord eller autentiseringsnøkler i en kodebase som du aldri kan forutse hvem som til slutt vil få tilgang til en prosjekt I et produksjonssystem lagrer vi disse legitimasjonene som miljøvariabler med systemet og spør deretter disse envvars hver gang koden er r edeployed Dette sikrer at passord og auth tokens aldri blir lagret i et versjonskontrollsystem. Men siden vi bare er interessert i å bygge et leketøyhandelssystem, og ikke er opptatt av produksjonsdetaljer i denne artikkelen, vil vi i stedet skille disse autentegnene i en innstillingsfil. I den følgende konfigurasjonsfilen har vi en ordbok som heter MILJØER som lagrer API-sluttpunktene for både OANDA-prisavspillings-API og handels-API. Hver underordbok inneholder tre separate API-endpoints-sann praksis og sandbox. Sandbox-API er rent for testingskode og for å sjekke at det ikke er noen feil eller feil Det har ikke oppetidsgarantier for ekte eller praktiske APIer. Practice API gir i utgangspunktet muligheten til papirhandel. Det gir den alle funksjonene til den virkelige API på en simulert praksis konto Den virkelige API er nettopp det - det er live trading Hvis du bruker det endepunktet i koden din, vil det handle mot din live kontosaldo VIKTIG FORSIKTIG. VIKTIG. Når du handler mot praksis-API, husk at en viktig transaksjonskostnad, det som påvirker markedsvirkningen, ikke er tatt i betraktning. Siden ingen bransjer faktisk blir plassert i miljøet, må denne kostnaden regnes på en annen måte andre steder ved hjelp av en markedsvirkningsmodell hvis du ønsker å realistisk vurdere ytelsen. I det følgende bruker vi praksiskontoen som er gitt av DOMAIN-innstillingen Vi trenger to separate ordbøker for domenene, en hver for streaming - og trading API-komponentene Endelig har vi ACCESSTOKEN og ACCOUNTID I ve fyllet de to under med dummy-IDer, så du må bruke din egen, som kan nås fra OANDA-kontosiden. Det neste trinnet er å definere hendelsene som køen skal bruke for å hjelpe alle de enkelte komponentene til å kommunisere. Vi trenger to TickEvent og OrderEvent Den første lagrer informasjon om instrumentmarkedsdata som det beste budet og handelstiden. Den andre brukes til å overføre eller ders til utførelsen handler og dermed inneholder instrumentet, antall enheter å handle, ordren type markedet eller grensen og siden ie kjøpe og selge. For fremtidssikker vår hendelseskode vi skal lage en base klasse kalt Event og har alle hendelser arvet fra dette Koden er oppgitt nedenfor. Den neste klassen vi skal skape, vil håndtere handelsstrategien I denne demonstrasjonen skal vi lage en ganske nonsensisk strategi som bare mottar alle markedskampene og hver 5. tick kjører tilfeldig eller selger 10.000 enheter i EUR USD. Clearly dette er en latterlig strategi. Det er imidlertid fantastisk for testing, fordi det er greit å kode og forstå. I fremtidige dagbokoppføringer vil vi erstatte dette med noe betydelig mer spennende som forhåpentligvis slå en fortjeneste. Filen finner du nedenfor La oss jobbe gjennom det og se hva som foregår Først importerer vi det tilfeldige biblioteket og OrderEvent-objektet fra Vi trenger tilfeldig lib for å kunne sele ct en tilfeldig kjøps - eller salgsordre Vi trenger OrderEvent, da dette er hvordan strategibjektet vil sende ordrer til hendelseskøen, som senere vil bli henrettet av utførelseshandleren. TestRandomStrategy-klassen tar bare instrumentet i dette tilfellet EUR USD, tallet av enheter og hendelseskøen som et sett med parametere. Deretter oppretter en ticks counter som brukes til å fortelle hvor mange TickEvent-forekomster det har sett. Mesteparten av arbeidet skjer i calculatesignals-metoden, som bare tar en hendelse, avgjør om det er et TickEvent ellers ignorerer og øker tick-telleren. Det kontrollerer deretter for å se om tellingen er delt med 5 og deretter tilfeldigvis kjøper eller selger, med en markedsordre, det angitte antall enheter. Det er absolutt ikke verdens største handelsstrategi, men det vil være mer enn egnet for våre OANDA meglerprogrammeringsprøveformål. Den neste komponenten er utførelseshandleren Denne klassen har til oppgave å handle på OrderEvent-forekomster og foreta forespørsler til megleren i t hans tilfelle OANDA på dum måte Det er ingen risikostyring eller overbygging av potetkonstruksjon. Utførelseshandleren vil bare utføre en hvilken som helst rekkefølge den har blitt gitt. Vi må sende all autentiseringsinformasjon til utførelsesklassen, inkludert domenepraksis , ekte eller sandkasse, tilgangstoken og konto-ID Vi oppretter så en sikker forbindelse med en av Pythons innebygd i biblioteker. Mesteparten av arbeidet skjer i eksekveringsordre Metoden krever en hendelse som en parameter. Deretter konstrueres to ordbøker - overskriftene og params Disse ordbøkene vil da bli riktig kodet delvis av urllib et annet Python-bibliotek som skal sendes som en POST-forespørsel til OANDAs API. Vi passerer innholds-type og autorisasjonsoverskriftsparametere, som inkluderer vår autentiseringsinformasjon I tillegg koder vi parametrene, som inkluderer instrumentet EUR USD, enheter, ordre type og side buy sell Til slutt, vi gjør forespørselen og lagre svaret. Den mest komplekse komponenten av t rading system er StreamingForexPrices objektet som håndterer markedspris oppdateringer fra OANDA Det er to metoder connecttostream og streamtoqueue. Den første metoden bruker Python forespørsler biblioteket til å koble til en streaming socket med de aktuelle overskriftene og parametrene Parametrene inkluderer konto-ID og Den nødvendige instrumentlisten som skal høres på for oppdateringer i dette tilfellet, er bare EUR USD Merk følgende linje. Dette forteller at forbindelsen skal streames og dermed holdes åpen på langvarig måte. Den andre metoden forsøker streamtoqueue faktisk å Koble til strømmen Hvis svaret ikke er vellykket, det vil si at svarkoden ikke er 200, så returnerer vi bare og avslutter. Hvis det lykkes, prøver vi å laste JSON-pakken tilbake til en Python-ordbok. Endelig konverterer vi Python-ordboken med instrumentet , bud spør og tidsstempel i et TickEvent som sendes til hendelseskøen. Vi har nå alle hovedkomponentene på plass. Det siste trinnet er å pakke opp alt vi har skrevet så langt inn i et hovedprogram. Målet med denne filen, kjent som å lage to separate tråder, hvorav den ene driver prissentaren, og den andre som driver handelshandleren. Hvorfor trenger vi to separate tråder Put Vi utfører bare to separate kodenheter, som begge løpende løpende. Hvis vi skulle lage et ikke-gjenget program, vil strømuttaket som ble brukt for prisoppdateringene, aldri slippe tilbake til hovedkoden og dermed vi ville aldri faktisk utføre noen handel På samme måte, hvis vi kjørte handelsløkken se nedenfor, ville vi aldri faktisk returnere strømningsbanen til prisstrømmen. Derfor trenger vi flere tråder, en for hver komponent, slik at de kan utføres uavhengig De vil både kommunisere til hverandre via hendelseskøen. Lets undersøke dette litt videre. Vi lager to separate tråder med følgende linjer. Vi sender funksjonsnavnet eller metodenavnet til målordningsargumentet og t høne passere en iterable som en liste eller tuple til args søkeordet argumentet, som deretter overfører disse argumentene til den faktiske metoden funksjon. Indelig starter vi begge tråder med følgende linjer. Så vi kan kjøre to, effektivt uendelig looping, kode segmenter uavhengig av hverandre, som begge kommuniserer gjennom hendelsekøen. Merk at Python-tråderbiblioteket ikke produserer et ekte multi-core multithreaded miljø på grunn av CPython-implementeringen av Python og Global Interpreter Lock GIL. Hvis du vil lese mer om multithreading på Python Ta en titt på denne artikkelen. Ta en titt på resten av koden i detalj Først importerer vi alle nødvendige biblioteker, inkludert køtråd og tid Vi importerer deretter alle de ovennevnte kodefilene jeg personlig foretrekker å kapitalisere noen konfigurasjonsinnstillinger, som er en vane jeg plukket opp fra å jobbe med Django. Deretter definerer vi handelsfunksjonen, som ble forklart i Python-pseudokode over En uendelig whil e loop utføres mens True som kontinuerlig avspørsler fra hendelseskøen og bare hopper om sløyfen hvis den er funnet tom Hvis en hendelse er funnet, er det enten en TickEvent eller en OrderEvent og så blir den aktuelle komponenten kalt for å bære den ut i dette tilfellet er det enten en strategi eller en eksekveringshåndterer. Sløyfen sover så bare for hjerteslag sekunder i dette tilfellet 0 5 sekunder og fortsetter. Til slutt definerer vi hovedinngangen for koden i hovedfunksjonen. Det er godt kommentert nedenfor, men jeg vil oppsummerer her I hovedsak organiserer vi hendelseskøen og definerer instrumentenhetene. Vi lager deretter StreamingForexPrices prisstrømningsklassen og deretter senere gjennomføringshåndteringsbehandleren Begge mottar de nødvendige godkjenningsdetaljer som er gitt av OANDA når du oppretter en konto. Vi lager deretter TestRandomStrategy instans Til slutt definerer vi de to trådene og starter dem. For å kjøre koden trenger du ganske enkelt å plassere alle filene i samme katalog og ca. I det følgende må du se på terminalen. Merk at for å stoppe koden på dette stadiet krever en hard drep av Python-prosessen via Ctrl-Z eller tilsvarende. Jeg har ikke lagt til en ekstra tråd for å håndtere å se etter det som trengs for å stoppe koden trygt En mulig måte å stoppe koden på en Ubuntu Linux-maskin på er å skrive. Og send deretter utgangen av dette til et prosessnummer i følgende. Hvor PROCESSID må byttes ut med utgangen av pgrep Merk at dette ikke er spesielt god praksis. I senere artikler vil vi skape en mer sofistikert stoppstartsmekanisme som benytter Ubuntu s prosessovervåking for å få handelssystemet til å kjøre 24 7. Utgangen etter 30 sekunder eller så, avhengig av tidspunktet på dagen i forhold til de viktigste handelstider for EUR USD, for ovennevnte kode, er gitt nedenfor. De første fem linjene viser JSON-kryssdata returnert fra OANDA med budsøkpriser. Deretter kan du se utførelsesordreutgangen, samt JSON-svaret returnert fra OANDA bekrefter åpningen av en kjøpshandel for 10.000 enheter av EUR USD og prisen den ble oppnådd på. Dette vil fortsette å løpe på ubestemt tid til du dreper programmet med en Ctrl-Z-kommando eller lignende. I senere artikler skal vi utføre noen tiltrengte forbedringer, inkludert. Realstrategier - Riktig forexstrategier som genererer lønnsomme signaler. Produksjonsinfrastruktur - Fjernserverimplementering og 24 7 overvåket handelssystem, med stoppstartkapasitet. Portefølje og risikostyring - Portefølje og risikooverlegg for alle foreslåtte bestillinger fra strategien. Flere strategier - Konstruere en portefølje av strategier som integreres i risikostyringsoverlegget. Som med aksjebasert backtester, må vi også opprette en forex-testmodul som lar oss utføre rask forskning og gjøre det lettere å distribuere strategier. Husk å endre ACCOUNTID og ACCESSTOKEN. Just Komme i gang med kvantitativ handel.
No comments:
Post a Comment