Forex Python Api
For å motta historiske data fra API-en må en bruker ha markedsdataabonnement på nivå 1 for den kontrakten. Historiske data er tilgjengelig i TWS-diagrammer for mange typer instrumenter uten å ha markedsdataabonnementer, men vil ikke være tilgjengelige for API-en, med mindre alle kravene til Live Market Data er oppfylt. Når du henter historiske data fra TWS, vær oppmerksom på de historiske databegrensningene. Be om historiske data Historiske data er hentet fra TWS via IBApi. EClient. reqHistoricalData funksjonen. Hver forespørsel trenger: En unik identifikator som tjener til å identifisere innkommende data. IBApi. Contract du er interessert i. Forespørsler sluttdato og klokkeslett. Hvor mye tid (eller Gyldig varighetstrengsenheter) for å gå tilbake fra forespørslene som er oppgitt sluttdato og klokkeslett. Datasegmentet eller Gyldig linjestørrelser Typen av data som skal hentes. Se Historiske datatyper (whatToShow) Hvorvidt å hente data generert kun innenfor Vanlige handelstimer (RTH) Formatet der innkommende stangedato skal presenteres. Legg merke til at bare yyyyMMdd-format er tilgjengelig for dagbjelker. For eksempel, å lage en forespørsel med en sluttdato og klokkeslett på 20160127 23:59:59, vil en varighetsstreng på 3 D og en strekstørrelse på 1 time returnere tre dagers verdi på 1 timers stangdata der den nyeste stangen vil vær nærmest mulig til 20160127 23:59:59. Client queryTime DateTime. Now. AddMonths (-6).ToString (quotyyyyMMddHH: mm: ssquot) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, quot1Mquot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1, null) klient. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, quot10 Dquot. quot1 minquot. quotTRADESquot. 1, 1, null) Calendar cal Calendar. getInstance () SimpleDateFormat danner ny SimpleDateFormat (quotyyyyMMdd HH: mm: ssquot) Stringformatert form. format (cal. getTime ()) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), formatert, quot1 Mquot. quot1 dayquot. quotMIDPOINTquot. 1, 1, null) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), formatert, quot10 Dquot. quot1 minquot. quotTRADESquot. 1, 1, null) Avbryter historiske dataforespørsler Dim queryTime As String DateTime. Now. AddMonths (-6).ToString (quotyyyyMMdd HH: mm: ssquot) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, quot1 Mquot. quot1 dayquot. quotMIDPOINTquot. 1, 1, ingenting) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, quot10 Dquot. Quot1 minquot. QuotTRADESquot. 1, Ingenting) char queryTime 80 std :: strftime (queryTime, 80, kvm H: M : Squot. Timeinfo) mpClient-gtreqHistoricalData (4001, ContractSamples :: EurGbpFx (), queryTime, quot; Motot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1, TagValueListSPtr ()) mpClient-gtreqHistoricalData (4002, ContractSamples :: EuropeanStock (), queryTime , quot10 Dquot. quot1 minquot. quotTRADESquot. 1, 1, TagValueListSPtr ()) 1 160 queryTime (datetime. datetime. today () - 2 160 datetime. timedelta (days180)) strftime (quotYd H: M: Squot) 3 160 String queryTime DateTime. Now. AddMonths (-6).ToString (quoteyyMMdd HH: mm: ssquot) 4 160 self. reqHistoricalData (4101, ContractSamples. USStockAtSmart (), queryTime, 5 160 quot1 Mquot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1 ,) 6 160 self. reqHistoricalData (4001, ContractSamples. EurGbpFx (), queryTime, 7 160 quot1 Mvot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1,) 8 1 60 self. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, 9 160 quot10 Dquot. quot1 minquot. quotTRADESquot. 1, 1,) Forespørsel om historiske data For å finne det tidligste tilgjengelige datapunktet for et gitt instrument og datatype, er en funksjon i API-en som starter i v973.02 og v963 av TWSIBG, IBApi :: EClient :: reqHeadTimestamp client. reqHeadTimestamp client. reqHeadTimestamp (14001, ContractSamples. USStock (), quotTRADESquot. 1, 1) client. reqHeadTimestamp (4003, ContractSamples. USStock (), quotTRADESquot. 1, 1) client. reqHeadTimestamp (14001, ContractSamples. USStock (), quotTRADESquot. 1, 1 ) mpClient-gtreqHeadTimestamp (14001, ContractSamples :: EurGbpFx (), quotMIDPOINTquot. 1, 1) 1 160 self. reqHeadTimeStamp (4103, ContractSamples. USStockAtSmart (), quotTRADESquot. 0, 1) Den resulterende hodetidsstempel returneres til funksjonen IBApi :: Klient :: headTimestamp offentlig klasse EWrapperImpl. EWrapper public void headTimestamp (int reqId, string headTimestamp) Console. WriteLine (quotHead tidsstempel. Request ID:, Head time stamp: quot. reqId, headTimestamp) offentlig klasse EWrapperImpl implementerer EWrapper public void headTimestamp (int reqId, String headTimestamp) System. out. println (quotHead tidsstempel. Req Id: quot reqId quot, headTimestamp: quot headTimestamp) Offentlig klasse EWrapperImpl Offentlig sub headTimestamp (requestId As Integer, timeStamp As String) Implementerer IBApi. EWrapper. headTimestamp Console. WriteLine (quotHead tidsstempel. :, Hovedtidsstempel: quote requestId, timeStamp) klasse TestCppClient. public EWrapper void TestCppClient :: headTimestamp (int reqId, const std :: stringamp headTimestamp) printf (quotHead tidsstempel. ReqId: d - Hodetidsstempel: s, nquot. reqId, headTimestamp. cstr ()) 1 160 klasse TestWrapper. EWrapper): 1 160 def headTimestamp (selv, reqId: int, headTimestamp: str): 2 160 print (quotHeadTimestamp: quot. ReqId, quot. title headTimestamp) Motta historiske data De historiske dataene vil bli levert via IBApi :: EWrapper :: historicalData metode i form av lysestaker. Når alle lysestaker har blitt mottatt, vil IBApi. EWrapper. historicalDataEnd markøren sendes offentlig klasse EWrapperImpl. EWrapper offentlig virtuell tomgang historicalData (int reqId, streng dato, dobbel åpen, dobbelt høy, dobbel lav, dobbel lukk, int volum, int count, dobbelt WAP, bool hasGaps) Console. WriteLine (quotHistoricalData. Quote: Open: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote: Quote virtuell tomgang historicalDataEnd (int reqId, streng startDate, streng endDate) Console. WriteLine (quotHistoricalDataEnd - kvittering fra quot startDate quot to quoted endDate) offentlig klasse EWrapperImpl implementerer EWrapper public void historicalData (int reqId, String dato, dobbelt åpen, dobbelt høy , dobbelt lav, dobbel lukk, int volum, int count, dobbelt WAP, boolean hasGaps) System. out. println (quotHistoricalData. quot reqId quot - Date: quot date quot; Åpent: quot åpent quot. : quot low quot, Lukk: quot lukk quot, Volum: quot vo lume quote, Count: Quote citationstegn, WAP: quot WAP citer, HasGaps: quot hasGaps) offentlig tomgang historicalDataEnd (int reqId, String startDateStr, String endDateStr) System. out. println (quotHistoricalDataEnd. Offentlig Klasse EWrapperImpl Offentlig Klasse EWrapperImpl Offentlig Subhistorisk Data (reqId Som helhet, dato som streng, åpne som dobbel, høy som dobbel, lav som dobbel, lukk like dobbel, volum som Integer, telle som helhet, WAP som dobbel, harGaps som boolsk) Implementerer IBApi. EWrapper. historicalData Console. WriteLine (quotHistoricalData - ReqId kvot forsterkningsregulering kvotokvoteringsdato amp amputt Offentlig kvittering åpen amp amp Citat høy amp amp amp amp Offentlig Sub historicalDataEnd (reqId Som helhet, start som streng, avslutte som streng) Implementerer IBApi. EWrapper. historicalDataEnd Console. WriteLine (quotHistoricalDataEnd - ReqId-kvadratkompensator reqId amp kvittere Start amp amp start amp citat End cv amp end amp kvot) klasse TestCppClient. offentlig EWrapper void TestCppClient :: historicalData (TickerId reqId, const std :: stringamp dato, dobbel åpen, dobbelt høy, dobbelt lav, dobbelt lukk, int volum, int barCount, dobbelt WAP, int harGaps) printf (quotHistoricalData. ReqId: ld - Dato: s, Åpent: G, Høyt: G, Lavt: G, Lukk: G, Volum: d, Count: d, WAP: g, HasGaps: dnquot. ReqId, date. cstr lukk, volum, barCount, WAP, hasGaps) void TestCppClient :: historicalDataEnd (int reqId, std :: streng startDateStr, std :: streng endDateStr) std :: cout ltlt quotHistoricalDataEnd. ReqId: Quote ReqId lt ct - Start Date: Quot startDateStr ltlt Quote, Sluttdato: Quote EndDateStr ltlt std :: endl 1 160 klasse TestWrapper (wrapper. EWrapper): 1 160 def historicalData (selv, reqId: TickerId, dato : str, open: float, high: float, 2 160 low: float, close: float, volum: int, barCount: int, 3 160 WAP: float, hasGaps: int): 4 160 super ().historiskData (reqId, dato, åpen, høy, lav, lukk, volum, 5 160 barCount, WAP, hasGaps) 6 160 print (quotHistoricalData. quot. reqId, quot. Date: quot. date, quoted: quot; open, 7 160 quot Quote: quot. low, quotClose: quot. close, quotVolume: volum, 8 160 quotCount: quot. barCount, quotWAP: quot. WAP, quotasGaps: quotesGaps) 1 160 def historicalDataEnd (self, reqId: int, start: str, ende: str): 2 160 super ().historiskDataEnd (reqId, start, slutt) 3 160 utskrift (quotHistoricalDataEndr. reqId, quotfromquot. start, quottoquot. end) Gyldig varighet String enheter Gyldig Bar Størrelser Historiske datatyper (whatToShow) Av ailable Data per ProductUpdate: Jeg oppdaterte koden slik at den fungerer med Oandas nye API. Få det her Tid til å snakke om meglere, hvordan du plasserer en handel programmatisk og viktigst hvordan du ikke blir lurt. En megler er ikke mer enn et selskap som lar deg handle (kjøpe eller selge) eiendeler på et marked gjennom plattformen. Det som er veldig viktig for algotrading er: Mekleren tilbyr en API for at vi skal kunne bestille. Du kan få en demo-konto for å kjøre scenemiljøet ditt og eksperimentere. Spredningen er så liten som mulig. I vårt tilfelle bryr vi oss ikke om spredning som vi ikke vil gjøre High Frequency Trading når som helst snart. Selv om meglere er regulert, har det vært hendelser de siste par årene, hvor meglere falt på grunn av visse forhold. Vær svært skeptisk hvis det ikke er noen vurderinger av megleren på internett (eller de fleste er dårlige) Hvis megleren gir deg litt gal innflytelse (som 1: 200) Hvis megleren ser ut til å være i et veldig merkelig land Hva kan skje er at du begynner å tjene penger og du ikke kan trekke dem ut. Alvor. Super stressende situasjon. Men vi kan bytte til et lykkeligere notat som åpner en konto og plasserer vår første programmatiske handel. Whooha Jeg bruker Oanda som megler (jeg er ikke tilknyttet dem), og de tilbyr en ganske anstendig API, biblioteker på github og en gratis demo-konto. Når du logger deg på demo-kontoen, går du til Administrer API-tilgang. Der kan du finne API-nøkkelen som vi skal bruke i vårt system for å plassere handler. Pass på at du ikke deler denne nøkkelen. Koden for dette er og alle andre innlegg er på github, og du kan installere det og kjøre det ganske enkelt. Oppdatering: Oanda utgitt en ny (kickass) utførelsesmotor kalt v20 og de har gitt ut en ny (forbedret) API. Dette innlegget har blitt oppdatert for å kunne bruke den nye API, men hvis (av en eller annen grunn) du vil sjekke den gamle koden, er den her. Du er heldig du Koble til Oanda trenger en conf-fil - som du kan generere ved hjelp av et skript som Oanda gir her, eller du kan bare lage det selv. Hvorfor vil du ha det Først av alt når det gjelder legitimasjon (og mine penger), foretrekker jeg å vite alt som skjer. Og jeg liker ikke å måtte installere PyYAML bare for å lese en conf-fil. Ta gjerne med hver metode. Nå, forberede deg til å bli overrasket. Koden er rett fram. Vi initialiserer API: og nå kan vi legge inn en bestilling (kjøp 5000 enheter EURUSD). Sjekk nåværende pris er like enkelt. Super enkelt. Ikke bekymre deg for hva EURUSD er, eller hvor mange enheter vi kjøper eller hva en markedsordre er. For nå har vi plassert vår første handel fra vår bærbare og vi skal bygge vår egen API for å plassere handler. Spennende ting Du kan lese Oandas dokumentasjon her for å se hva annet du kan gjøre med API-en, og finn Python-biblioteket her. Det finnes eksempler på Oandas github-side her. Kommer opp neste, koble til et ekte LIVE algotrading-system, som kjører fra min RaspberryPI hjemme. Du vil kunne se det (nesten) endelige programmet som kjører og godt snakke mer om Forex og strategier. Hvis du har mer tilbakemelding, ping meg på jonromero eller påmelding til nyhetsbrevet. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Dette er mer av en Slik bygger du din egen algotrading-strategi - Ethereum-utgaven og ikke en fortjeneste for fortjeneste. Det er også et reelt eksempel med reell avkastning (og ekte produksjonsfeil som koster meg penger) hvor du kan se hvordan du identifiserer muligheter, hvorfor alotrading er kjempebra og hvorfor risikostyring kan redde deg. Jeg får dette spørsmålet nesten daglig. Hvordan kan jeg finne en god strategi Hvordan kan jeg bygge mitt eget Må jeg ha PhD i matematikk Statistikk Newsflash: Hvis jeg kan skrive en strategi, kan noen skrive en strategi. Stol på meg på det. Det eneste trikset er å lete etter en enkel. Oppdatering: Dette innlegget har blitt omskrevet minst fem ganger (da The DAO drama escalated), og det er det perfekte eksempelet på en strategi som gjør en full sirkel. Jeg begynte å bli involvert i Ethereum tidlig da jeg virkelig likte å kjøre algoritmer på blockchain-tingen. Når TheDAO kom ut, leste jeg alt om det og elsket ideen. Du trenger ikke å forstå hva Ethereum, theDAO, blockchain er på dette punktet (jeg lover at jeg vil ramble på et annet innlegg). De samme ideene gjelder for Forex, aksjer selv Pokemon baller. Mine fire trinn - kaptein åpenbart - system Jeg personlig, har en bestemt måte at jeg jobber. Steg en . Identifiser en ide. Min ide i dette tilfellet er at det er et par utvekslinger som tilbyr Ethereum og DAO tokens. Hva om det var en arbitrage mellom de to trinnene. Test testen manuelt. Hvis noe fungerer, er jeg på noe. Alt jeg måtte gjøre er å utføre alle trinnene manuelt og skrive ned eventuelle avgifter, forhold eller noe som skal dokumenteres. Trinn tre. Automatiser denne algoritmen er ikke en høyfrekvent handelsalgoritme. Det er en betydelig mengde tidsrisiko (som du kan eliminere så vel se senere), men det jeg gjorde kunne gjøres manuelt. Problemet er at jeg må bruke hele tiden foran datamaskinen min, sjekke om det er en arbitrage-tilstand, og hvis det var det, måtte jeg handle raskt og uten å rote opp. Åh, og jeg måtte rekruttere fem av vennene mine for å skille dette opp. Lang historie kort, jeg tilbrakte presidentens dag og skrev et enkelt program som vil spille av alle mine manuelle trinn. Programmet ville krasje og det var ikke mer enn 100 linjer med kode. Dette er datainsamlingsstadiet der jeg ser om det er en fordel at algoritmer kan gi meg. Fordelene kan være: Noe som blir automatisert og løper 1000 ganger per sekund eller 1000 ganger parallelt Noe som tenker raskere enn jeg kan Noe som ikke har noen følelser å skru opp systemet mitt Hvis det er minst en eller flere forhold oppfylt, vil jeg begynne å bygge og omskrive algoet. Trinn fire. Alt i jeg tuller og ser deg litt, hvorfor risikostyring er super viktig i denne virksomheten. La oss diskutere litt om hva dette arbitraget var. Tanken er: Jeg lurer på om Kraken og Shapeshift har forskjellige priser for de samme eiendelene. Dette er en klassisk arbitrage sak (Kraken og Shapeshift er utveksling). Jeg kunne bytte DAO til ETH på Kraken, overføre ETH til Shapeshift, bytte ETH til DAO og sende dem tilbake til Kraken, og på grunn av prissammenheng vil jeg ende opp med mer DAO enn jeg først startet. Risikofri penger, den beste typen penger . Du kan tjene penger så lenge ETHDAO fra Kraken DAOETH fra ShapeShift gt 1 (avgifter gass). Veldig enkel formel, rett Hver syklus, var en 2 til 10 retur av hovedstaden min. Etter en stund begynte jeg å treffe grensene for Shapeshift, og jeg måtte gjøre dette løp parallelt. Spørsmålet er hva du ville gjøre hvis du hadde en algoritme som gir deg 10 av pengene dine hvert 20. minutt. Den dumeste tingen du kan gjøre er å sette tonn penger inn i den. Hvis du ikke er kjent med det greske ordet hybris. anser deg selv heldig. Hybris er når du tror at du er uovervinnelig, bedre enn gud. Og dette er det største NEI NEI du kan gjøre i handel. Etter et par uker ble theDAO hacket. 160 millioner dollar ble stjålet (eller skal jeg si frossen) og ingen visste hva som skulle skje. For meg, dette skjedde, 10 minutter før ombordstigning et fly for å fly til New York. Hybris. Eller som folk i USA sier: Fuck. Jeg var smart (heldig) nok til å ha gode risikostyringsvaner (takk Forex). Jeg risikerer aldri mer enn 2 av hovedstaden min, selv om det virker som den beste typen avtale. Heldigvis ble pengene gjenopprettet, og jeg kunne trekke min DAO tilbake til Ethereum (men ja, jeg kjøpte WiFi i fly for å holde tritt med hva som skjer). Denne hele opplevelsen er en påminnelse om at det alltid finnes ting du ikke kan forutsi. Ting du ikke kan kontrollere. Dette var en systematisk risiko, og det var ingen måte jeg kunne ha sett den på. Pushing knapper og bygningsalgoritmer er ikke nok. Riktig risikostyring og vite når du trenger å ta en chill-pille, er det som kan holde deg i spillet. På neste innlegg vil jeg legge inn hele algoritmen og gå linje for linje. Jeg planlegger også å diskutere litt mer om theDAO og Ethereum. Hvis du ikke vil gå glipp av noen av disse og få litt mer informasjon, kan du registrere deg for nyhetsbrevet der jeg snakker om fintech, algoritmer og markedene. Forresten, hvis du vil lage din egen cryptocurrency og lære mer om Ethereum, har jeg et flott innlegg med koden som er lagt inn her. Kommer neste: Dykking i ETHDAO algotrading-programmet Hvis du har mer tilbakemelding, ping meg på jonromero eller påmelding til nyhetsbrevet. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Maskininnlæring og handel er et veldig interessant emne. Det er også et emne hvor du kan bruke mye tid på å skrive kode og lese papirer, og så kan et barn slå deg mens du spiller Mario Kart. I nexts innleggene, skal vi snakke om: Optimaliser oppføringer og utganger. Dette og bare dette kan gjøre en tonn forskjell i bankrullet ditt. Beregn stillingsstørrelse (hvis du ikke liker Kelly-kriterium) Finn mulig sammenheng mellom forskjellige par (parhandel). Jeg elsker EURUSD vs GBPJPY-korrelasjonen Beregn støtteforsterker motstands-linjer Men hva er maskinlæring Maskininnlæringsalgoritmer er algoritmer hvor en maskin kan identifisere mønstre i dataene dine. Yeap, det er så enkelt. Finn for eksempel alle dyrene i dette bildet og tegne en boks rundt dem. Også nevne det dyret. Galt jeg vet. For handel som du kan forestille deg, er det ganske like: For at en maskin skal lære, må du lære det som er riktig eller galt (veiledet læring) eller gi den et stort datasett og la det bli villt (uten tilsyn). For å identifisere objekter er dette rett fram, men hva med handel, jeg så meg rundt for å se om det er noe maskinlæringsprogram som kan identifisere SR-linjer, men til ingen nytte. Så jeg bestemte meg for å skrive det første maskinlæringsprogrammet i python som identifiserer støtte - og motstandslinjer i Python. En annen første Hooray Men hvordan kan en algoritme identifisere disse områdene Hoooooow Ladies og herrer (og roboter), la meg introdusere deg til MeanShift. En ikke-overvåket algoritme som brukes mest for bildegjenkjenning, og er ganske trivial å installere og kjøre (men også veldig sakte). Tanken er at denne algoritmen lar meg partisjonere dataene mine (forex ticks) i områder, og så kan jeg bruke kantene som støtte - og motstandslinjer. Kult ide, men fungerer det Vi analyserer rundt 12 millioner datapoints av EURUSD i 2014 og et par måneder av 2015. Modstandslinjene er plassert automagisk av en maskinlæringsalgoritme. Hva er virkelig kult (og uhyggelig) er at algoritmen ganske mye negler det. NAILS det vanskelig. Det blir veldig uhyggelig når vi skal bruke algoritmen for å identifisere mikrostrukturer og begynne å scalping. Systemet kan behandle alle slags timeseries-data (aksjer, forex, gull, uansett) og det vil gjengi et HTML-interaktivt diagram (som diagrammet ovenfor) med dataene dine og maskingenerert SL. Koden er her, så vær gal. Nå kan vi gå gjennom koden. Etter at du har ditt sett med data, må du lese dem og rense dem. Forbered deg på noen pandaer magi. Vi slipper de tomme verdiene (helgene), og vi samler dataene til 24 timer lysestaker (ohcl). Dette gjør det mye lettere å plotte. Gruppedata er de dataene som vi vil mate inn i ml-algoritmen. Da utarbeider vi dataene som vi skal bruke i algoen. På neste innlegg diskuterer du hvordan du gjør dette arbeidet enda bedre, diskuter noen svært interessante resultater (kan algoritmen faktisk forutsi om fremtiden) og begynne å bruke den i vår egen handel. Hvis du vil sjekke den neste artikkelen og lese mer om handel og investere ved hjelp av algoritmer, registrer deg på nyhetsbrevet. Kommer opp neste: Maskinopplæring Gone Wild - Bruk koden Hvis du har mer tilbakemelding, ping meg på jonromero eller registrerer deg på nyhetsbrevet. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Oppdatering: Maskinlæringsposten skal være episk, men det tar så mye tid å gjøre koden presentabel. Bær med meg, det kommer kule ting (som du har lest på nyhetsbrevet) Ansvarsfraskrivelse: DETTE ER IKKE TAX-RÅD. Det som virkelig er overraskende er at flertallet av forespørslene i nyhetsbrevet er: Bruk verktøy for å hjelpe Trading Machine Learning for å optimalisere handel Skatter De to første kan jeg forstå. Alle ønsker å være en bedre handelsmann. Jeg forstår. Men skatt SKATT Dette er din heldige dag. Forex skatt er super enkelt. Alvor. Som standard (dette kalles Seksjon 988), vil alle tapene motregne inntektsskattene uten 3k grensen per år. Dette er mye bedre enn aksjehandel hvor tap kompenserer kapitalgevinstene dine. Men hva skjer med gevinster HVORFOR BRUKER DU HVORFOR Flertallet av Forex-forhandlerne mister penger (jeg kaller det å betale undervisning) det første året, så du har det bedre å holde det enkelt før du har en bevist og konsistent strategi. Når det er sagt, hvis du faktisk tjener en fortjeneste, blir du beskattet til kortsiktig kapitalgevinst (noen ganger opptil 40). Løsningene til når du begynner å tjene penger er: Å velge fra § 988 og bli beskattet i henhold til § 1256 hvor 60 av fortjenesten er beskattet som langsiktige kapitalgevinster og 40 som kort sikt (men nå kan tap ikke kompensere inntektene dine). Dette er veldig bra når du tjener penger, veldig dårlig når du ikke. Start en LLC For folk som nettopp har begynt å eksperimentere med Forex og algotrading, foreslår jeg alltid at de forblir med Seksjon 988 (standard) og når de begynner å tjene penger (konsekvent) eller de vil gå på full tid, snakk med meg :) Alvorlig er det så mange ting som du vil begynne å gjøre annerledes når du går fra hobbystadiet til andre inntekter til heltidsjobb, at det ikke er grunn til å overoptimalisere dette. Kommer opp neste: Maskinlæring Gone Wild Hvis du har mer tilbakemelding, ping meg på jonromero eller påmelding til nyhetsbrevet. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Sist gang vi snakket om The for-looper backtester (som jeg elsker å kalle dem). Nå er det tid for å se noen kode Vi sa at vi har noe slikt: python for hvert element av readhistoricaldata (): applystrategy () howourstrategydid () Søt, la oss laste vår strategi, laste inn noen historiske data, kjøre vår algoritme og skrive ut noen resultater Jeg foretrekker å ha mine strategier i et JSON-format som inneholder navnet på strategien og noen spesifikasjoner (som hvor mange pips for stoploss eller takeprofit etc). På den måten, når du begynner å bruke en eventbasert backtester, kan vi passere strategien gjennom en maskinlæringsalgoritme og prøve å optimalisere den. Neste linje laster inn dataene våre. Jeg vet at folk ikke liker pickle og andre måter å laste inn data på (og vi skal snakke om BColz på et tidspunkt), men for nå, bare bare med meg. Neste linje er selvforklarende. Vi sender de historiske dataene til vårt algo, og vi får tilbake noen statistikk for å skrive ut. Lets fokusere på algoritmen litt, og vi kan diskutere plotting etc på et senere tidspunkt. Den magiske av det enkle backtesting systemet Forbered deg på å bli overrasket over hvor latterlig lett å gjøre dette. Korte komninger Hva skjer med denne typen backtesting er at 1. du vil sannsynligvis gjøre feil når du vil bruke nøyaktig samme algoritme 2. Du vil ikke kunne skrive en svært kompleks strategi (minst så lett) 3. Veldig vanskelig å skalere (i forhold til hendelsesbasert) 4. Du må ha simuleringen og utførelsen på samme språk, men husk at dette er den beste og raskeste måten å starte og finne ut hvordan alle disse tingene fungerer. Kommer opp neste, ved hjelp av andre kjente backtestere i Python og legger til grafer til vår egen. Hvis du har mer tilbakemelding, ping meg på jonromero eller registrerer deg på nyhetsbrevet. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Hva er et godt algotrading-system uten noen ryddige strategier for å distribuere Nedenfor er det en liste over strategier jeg fant på nettet (eller sendt til meg av handelsmenn som er på nyhetsbrevet). Jeg planlegger å oppdatere listen som jeg fortsetter å komme over til nye ideer. Konseptet er at når vi fortsetter å dykke mer og mer inn i vårt algotrading-system, vil jeg vise deg hvordan du koder og distribuerer disse strategiene. Jeg vet sikkert at de fleste arbeider med små endringer. Verste tilfelle scenario, har du et system for å teste dine forutsetninger. Her er listen (og send meg en annen strategi som du tror at den skal inkluderes): Kommer opp neste, deling og diskusjon av min enkleste (men mest vellykkede) backtester Hvis du har mer tilbakemelding, ping meg på jonromero eller registrerer deg på nyhetsbrev. Juridisk outro. Dette er en teknisk veiledning om hvordan man bygger en algotrading-plattform for eksperimentering og FUN. Eventuelle forslag her er ikke økonomiske råd. Hvis du mister noen (eller alle) pengene dine fordi du fulgte noen handelsråd eller distribuert dette systemet i produksjon, kan du ikke klandre denne tilfeldige bloggen (andor meg). Nyt på egen risiko. Å bygge et backtest-system er faktisk ganske enkelt. Lett å skru opp, jeg mener. Selv om det er tonnevis med gode biblioteker der ute (og vel gå gjennom dem på et tidspunkt), liker jeg alltid å gjøre dette på egen hånd for å finjustere det. Fra alle backtesting-systemene jeg har sett, kan vi anta at det er to kategorier: For-loopers Event-generatorer I dag snakker godt om forløpere. For-loopers er min favoritt type backtesters. De er trivielle å skrive og super morsomme å utvide, men de har noen viktige strømmer og dessverre er flertallet av backtesters der ute forløpere (ps: Jeg må finne et bedre navn for dette). Hvordan forløpere jobber Bruk en forløp (som du kanskje har gjettet). Det er noe slikt: Veldig enkelt rett Slik fungerer det et backtesting system, som driver en momentumstrategi: Så, hva er problemet Svært vanskelig å skalere (horisontalt) Trenger mye arbeid for å holde søknadsstrategien din () jobber med backtesting og produksjon Du må ha alt i det samme programmeringsspråket Lar deg dykke inn i disse, en etter en. Skalerbarhet Jeg eksperimenterte et par for noen uker siden med en fjellklatringsalgoritme for å optimalisere en av mine strategier. Det kjører fortsatt. Etter to uker. Og jeg bygger uber-skalerbare systemer for å leve. Hvorfor kjører det fortsatt Du kan bruke multiprosessering. Disco. produsent (med ZeroMQ) eller bare tråder for å øke hastigheten på dette, men noen problemer er ikke pinlig parallelt (ja, dette er en faktisk term, ikke en av mine ferdige ord). Mengden arbeid for å skala en backtester som dette (spesielt når du vil gjøre samme maskinlæring på toppen av det) er enorm. Du kan gjøre det, men det er feil vei. Produksjon og backtesting i synkronisering Dette. Tider jeg har blitt bitt av dette. Jeg kan huske de tapte handlingene hvor jeg var hm, hvorfor jeg gikk inn i denne handelen eller min gamle tid favoritt HVOR TRAILING STOP WAS APPLIED NOW. Historie tid: Jeg hadde en ide for å optimalisere strategien min, for å kjøre en backtester for å se hva som ville skje hvis jeg kunne sette et stoppested etter at handelen var lønnsom for alltid å sikre fortjeneste. Backtesting fungerte som en sjarm på en 13 økning i inntjening og produksjon mistet hver eneste handel. Jeg skjønte det da min algo mistet 3400 om et par timer (en veldig dyr leksjon). Å holde applicationstrategy i synkronisering er svært vanskelig og blir nesten umulig når du vil gjøre det på en distribuert måte. Og du vil ikke ha to versjoner av strategien din som er nesten identiske. Med mindre du har 3400 til overs. Bruke forskjellige språk Jeg elsker Python. Og Erlang. Og Clojure. Og J. Og C. Og R. And Ruby (nei egentlig, jeg hater Ruby). Jeg vil være i stand til å utnytte styrken til andre språk i systemet mitt. Jeg vil prøve strategier i R hvor det er svært velprøvde biblioteker, og det er et stort samfunn bak det. Jeg vil ha Erlang å skala min kode og C for å knase data. Hvis du vil være vellykket (ikke bare i handel), må du kunne bruke alle tilgjengelige ressurser uten fordommer. Jeg har lært tonnevis av ting fra å henge ut med R-utviklere angående hvordan du kan delta på sikringsobligasjoner og visualisere dem eller hvorfor Sharpe-forholdet kan være en løgn. Hvert språk har en annen mengde, og du vil ha så mange folk som helter ideer inn i systemet ditt. Hvis du prøver å ha applicationstrategy på forskjellige språk, lykke til med (2). Er du overbevist nå Nå, jeg prøver ikke å overbevise deg som for-loopers er en fin måte å kjøre dine første tester på. Det er hvordan jeg startet og for mange strategier sender jeg dem ikke til rørledningen. A better way (so you can sleep at night) is the event generators. Coming up next, sharing and discussing my simplest (but most successful) backtester If you have more feedback, ping me at jonromero or signup to the newsletter. Legal outro. This is an engineering tutorial on how to build an algotrading platform for experimentation and FUN. Any suggestions here are not financial advices. If you lose any (or all) you money because you followed any trading advices or deployed this system in production, you cannot blame this random blog (andor me). Enjoy at your own risk. Before running any live algotrading system, it is a good practice to backtest (that means run a simulation) our algorithms. Have in mind that this doesnt mean that if your system is killing it for the last 5 yearsmonthsdays it will make a profit but it is a good indicator that you might be on to something. There are four things that we need to take into consideration when we do our backtesting: The quality of the data How to load them efficiently How to built our backtesting system Try to have our backtesting and our live system share as much code as we can Today, we are going to focus on (1) and (2). For Forex data, I am using GainCapital. Their data are in the form of ticks. For a free source it is good enough. I used to use Oandas historical data service but it seems that they moved it to a premium product. Too bad. Make sure that you use GainCapitals data only for experimentation. For any other kind of paid historical data (ETFs, stocks, options stc), I am using eoddata (they also have some forex historical data but I havent used them). Lets download data for a week and experiment a little bit. The link to the data is ratedata. gaincapital20151120NovemberEURUSDWeek1.zip for the first week of November 2015. First we need to unzip the file. python gtunzip EURUSDWeek1.zip and youll get a 25MB file named EURUSDWeek1.csv. These are data for one week for one currency pair. You can imagine the amount of data you need to process for all currencies for the last five years (hint: a lot). But dont worry, we are going optimize this. For now, lets open the file and inspect. the things that we care about is the RateDateTime, RateBid and RateAsk. As you can understade each line has a timestamp and the how much was the price to buy or sell. Formats downloaded by other services are pretty similar. There are many ways to load these data into Python but the most preferable when it comes to data slicing and manipulating is using Pandas. We can always use the csv library to load data (and it might be faster) but we need to do some optimizations and processing first that as you will see it is pretty easy with pandas. Another great tool to load TONS of GBs pretty efficiently and very fast is using Bcolz. covered in a much later post (or you can read a preview if you have signed up in the newsletter . Manipulating data using Pandas The data we downloaded are in ticks. Unless we are building an UHFT (ultra high frequency trading) algorithm, it is much more efficient (memory, storage and processing-wise) to group these ticks into seconds (or minutes or hours depending on your strategy). This will make our download scale down from 25MB to just 35KB which translate to HUGE performance and memory benefits. Lets group all these data in 15 minutes. How Time to fall in love with resample. The resampled the dataset looks like this: This is called OHLC (Open High Low Close) bar for every 15 minutes . You can see now that the ticks are grouped in 15 minute segments and you have the highest and lowest point that the price reached during these 15 minutes and also the openclose for buy and sell. Pure gold Not only you have all the information you need but now it is extremely fast to load it. You just need to save the data: and then you can reuse this 35kb file. We can write a simple momentum algorithm that checks if there was a huge movement the last 15 minutes and if that was the case, lets buy. We will dive into this in a later post. You can see the code as always on github . If you have more feedback, ping me at jonromero or signup to the newsletter. Legal outro. This is an engineering tutorial on how to build an algotrading platform for experimentation and FUN. Any suggestions here are not financial advices. If you lose any (or all) you money because you followed any trading advices or deployed this system in production, you cannot blame this random blog (andor me). Enjoy at your own risk. Before building any algotrading systems, you need to know how to trade manually. What that actually means is that you need to lose money on your own before blaming the machine. As simple as that. So, lets talk about Foreign Exchange or Forex as the cool guys call it. First of all, why do we choose Forex for algotrading Why dont we become millionaires trading like everybody else Why not just buy Tesla, Amazon, Google, Facebook, Twitter and hope for the best (PS: please read the legal outro at the end of this blog post before buying any stocks). Easy answer. You cannot win (or lose) money fast enough by buying stocks. Forex has a nice (or terrible, depending on which side of the coin you are) thing called leverage . Leverage can be 1:10, 1:50, 1:100, 1:200, 1:1000 depending on how suicidal you are or how sketchy your broker is (dont worry, well talk about brokers in the next post). Lets see an example. We want to place a trade of 1k. The logical thing is that in order to buy something that costs 1k, you need to have in your account 1k, right Nope. You can always get a loan. Oooooooor: Enter leverage. If we have a 1:100 leverage, we can place a trade and control 1k with just 10. For those that failed at math (dont be ashamed, I am one of you), 10 x 100 (leverage) 1,000. That means you can trade big and win big Actually 100 times more big . The catch is that you can actually go 100 times more small . Lets have another example. I just got my bonus (1k) and I want to play on Forex. Without any leverage, I can buy 1,000 Forex units that cost 1 (by the way, there are no Forex units but well talk about this later). How many units can I buy with 1:50 leverage If you answer if 100,000, you did something wrong. The answer is 50,000 (1,000 x 50 leverage). There you have it. One of the reasons that we are doing Forex, is because you can lose win big. Well get back to leverage when we start placing trades. There are three more exciting reasons actually that are even more awesome (dare to say awesomer). Forex (almost) never sleeps. The markets are open ALL DAY, six days per week. To be more exact, there is not one market but four and they are overlapping providing the all day effect. Forex is very volatile and there are tons of money moving around (more than 5 trillion per day ). Crazy right No fees on trades. You dont pay 10 per trade like you are doing with stocks. Here you pay the spread which is just a fraction of a cent (again, well talk about this in another post). All these reasons (leverage, all-day, volatility, fees) make Forex the most exciting platform to build and deploy your algorithms. Coming up next, Forex brokers. How not to be scammed before even writing a line of code. If you have more feedback, ping me at jonromero or signup to the newsletter. Legal outro. This is an engineering tutorial on how to build an algotrading platform for experimentation and FUN. Any suggestions here are not financial advices. If you lose any (or all) you money because you followed any trading advices or deployed this system in production, you cannot blame this random blog (andor me). Enjoy at your own risk. Det er det. Every week, I get at least 10 DMs on twitter asking on how to experiment with algotrading, Forex and portfolio analysis and Ive decided that its time to do something about it. Update: Find the posts here . So, I am planning to cover the basics of how to build your own trading platform, write your own strategies and go on vacations while electrons are making you money. Or zeroing your account. Either way, it is going to be fun The majority of the examples are going to be in Python even though there might be parts in Erlang and Ill try to keep it as easy as it can be. Lets talk now about what the final product will look like. We are building a system where you will be able to: Simulate your strategy (this is called backtesting ) Execute your strategy without supervision Alert you via smsemail for trades and errors Be scalable and trivial to deploy new updates Being able to run even from your home (from a raspberrypi for example) I assume this is going to be a total of 20 chapters, give or take. That is a system similar to the one that I am running the last year and includes a UI, sms alerts, backtesting pipeline, continuous delivery and all the cool stuff that us geeks love. All code will be on github and if everything goes well, Ill wrap it up in a book for everyone to enjoy. I have like three chapters almost done, so if you want early access just ping me at - jonromero . These are all the post that have been written up until now. I may addremove post as I get more feedback. I love Forex because: It has enormous amount of data (volume) These data are coming extremely fast (velocity) You need to consider multiple resources when you are building your strategy (variety) My definition of BigData is that you have volume-velocity-variety information and you need to react on it right now (realtime). It is one of the main reasons why I dont like Hadoop (ok, the other is because I dont like Java:). Forex is the best place if you want to start playing with BigData. You have (at least) one data channel, hitting you with data, you need to keep running algorithms on this stream (sometimes doing correlations up to a week) and you need be able to respond very fast. If a garbage collector kicks in or if you need to grab data from a database (even if this DB is in memory - long live Redis) then you will have issues. Thats the reason why most of the trading databases have all their data in the same memory space and have custom languages doing the analysis (like Kdb ). That was the inspiration for LDB. Millions of data sources (mobile phones), hitting your database and calculatingupdating for each one of the requests thousands of counters and running all sorts of algorithms. Per request. In realtime. But lets face it. The vast majority of userscompanies will never have millions (or even thousands) of requests hitting their servers. Thats why I started a new opensource database with codename: HybrisDB. HDB has the following characteristics: Simple to install (no moving parts) Simple to use (pre-defined dashboards) It will be perfect for the 99 of userscompanies but not for the 1 like Facebook or Google (sacrificing Enterprise features) The concept is to have a dashboard, to watch indicators going onoff and then (maybe) connect to a system to place an order. Sounds like an interesting cool hobby project and I still try to decide between using Erlang or Clojure for this. Ping me on twitter if you have any ideas One of my new years resolution was study one of your habits each month and I decided to focus on what activities I am spending my online time. So, I installed RescueTime which is a very cool app that sits on the background and creates reports about which apps and sites you are using the most. And no, it is not sending that info to NSA (you are not that important). Even though I spent most of my time working, writing and communicating, I also spent around 2 hours on average on Facebook (gasp). No biggie. What I hated was that for the majority of times I was scrollingrefreshing for new updates. Like opening your refrigirator every two minutes even though you know it is empty Damn you habits So, spending 2 hours every day (sometimes more) on Facebook, means 60 hours per month or 7 working days . 7 freaking working days each month. 7 days, each day with 8 full hours, to sleep, go out, exercise, write a book, learn something new. What I did was installing StayFocused. a free plugin for your browser that doesnt let you spent more than 10 minutes on specific sites everyday. And guess what. The I am just using facebook to communicate is such a lame excuse as I had no problem communicating with my friends, even by using facebook for 10 minutes. Now, give it a shot and tell me what you built in your spare timeReal Volume Indicator I coded some indicators in the python programming language, which scrape retail-sentiment data from different sources and put them into MT4. It is like an OrderBook in realtime, where at the current price and history all positions were shown. Have a look at the picture to know what I mean. Attached Image (click to enlarge) The first indicator is the overall sentiment and the second shows the sum of all orders (shortlong) at the corresponding candle. Here is the problem Im facing: One of my tradepeer told me, if I would make this stuff public the sentiment would be changing and the indicators become useless and would have impact to my own trading success. What is your opinion about that What should I do Take it please as a real discussion and sorry FF-staff if it is the wrong board. Thank you in advance Hello Trader-Community, I coded some indicators in the python programming language, which scrape retail-sentiment data from different sources and put them into MT4. It is like an OrderBook in realtime, where at the current price and history all positions were shown. Have a look at the picture to know what I mean. The first indicator is the overall sentiment and the second shows the sum of all orders (shortlong) at the corresponding candle. Here is the problem Im facing: One of my tradepeer told me, if I would make this stuff public the. Nice work here, but I would like to ask you if you know anything about the On Balance Volume(OBV) Its how you define consistent that is key. I have followed sentiment for awhile and even though it might not always give clear direction, it seems to be able to give very consistent points where the market is about to make big moves, and that alone can improve someones trading enormously. The rest is up to the traders RR, and experience but information like this are good for timing. Being a trader is lonely, but being a great trader is lonelier still Joined Dec 2013 Status: Member 546 Posts To think retail market players change the market is pretty funny. There is so many different ways the markets moves. To think one idea is gonna change the market is to funny. I follow a trader who took 100 positions in under a minute with 10 Lot contracts. Thats 1000 contracts. In the minute she made those trades the market moved from 1.13010 to 1.13017. Then over the next hour price went up 190 points (not pips). The candle close with a big push up and she close all her positions. Didnt change a thing. Yea she made 118K, I have been following her for some time. Very good trader edit: found this posted in August 25th, 2014. lol edit: as for REAL VOLUME these are similiar, they only cost money. but remeber it takes money to make money Members must have at least 0 vouchers to post in this thread. 0 handelsmenn ser nå Forex Factoryreg er et registrert varemerke.
Comments
Post a Comment