Thursday, 16 November 2017

Forex python api


För att ta emot historiska data från API: n måste en användare ha marknadsdata för abonnemang på nivå 1 för det kontraktet. Historiska data finns tillgängliga i TWS-diagram för många typer av instrument utan att ha marknadsdataabonnement, men kommer inte att vara tillgängliga för API om inte alla krav på Live Market Data är uppfyllda. När du hämtar historiska data från TWS måste du vara medveten om de historiska databegränsningarna. Begär historisk data Historiska data erhålls från TWS via funktionen IBApi. EClient. reqHistoricalData. Varje förfrågan behöver: En unik identifierare som kommer att fungera för att identifiera inkommande data. IBApi. Contract du är intresserad av. Förfrågningsdatum och tid. Mängden tid (eller Giltiga varaktighetssträngenheter) för att gå tillbaka från förfrågningarna som anges slutdatum och tid. Datas granularitet eller Giltig streckstorlek Den typ av data som ska hämtas. Se historiska datatyper (whatToShow) Huruvida eller inte hämta data som genereras endast inom Regular Trading Hours (RTH) Formatet där datum för inkommande datum ska presenteras. Observera att endast yyyyMMdd-format för dagstänger är tillgängligt. Om du till exempel gör en förfrågan med ett slutdatum och en tidpunkt på 20160127 23:59:59 kommer en längdsträng på 3 D och en barstorlek på 1 timme att returnera tre dagars värde av 1 timmarsfältdata där den senaste fältet kommer att vara närmast möjligt till 20160127 23:59:59. String queryTime DateTime. Now. AddMonths (-6).ToString (quotyyyyMMdd HH: 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, null) Calendar cal Calendar. getInstance () SimpleDateFormat bildar en ny SimpleDateFormat (quotyyyyMMdd HH: mm: ssquot) Stringformaterad form. format (cal. getTime ()) client. reqHistoricalData (4001, ContractSamples. EurGbpFx (), formaterad, quot1 Mquot. quot1 dayquot. quotMIDPOINTquot. 1, 1, null) client. reqHistoricalData (4002, ContractSamples. EuropeanStock (), formaterad, quot10 Dquot. quot1 minquot. quotTRADESquot. 1, 1, null) Avbryter historiska dataförfrågningar. Dim queryTime Som strängdatumTid. 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, quotYd H: M : Squot. Timeinfo) mpClient-gtreqHistoricalData (4001, ContractSamples :: EurGbpFx (), queryTime, quot1 Mquot. 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 (quotYmd H: M: Squot) 3 160 String queryTime DateTime. Now. AddMonths (-6).ToString (quotyyyMMdd 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 Mquot. Quot1 dayquot. QuotMIDPOINTquot. 1, 1,) 8 1 60 self. reqHistoricalData (4002, ContractSamples. EuropeanStock (), queryTime, 9 160 quot10 Dquot. kvot minquot. quotTRADESquot. 1, 1,) Fråga start av historiska data För att hitta den tidigaste tillgängliga datapunkten för ett givet instrument och datatyp är en funktion i API: n som börjar i v973.02 och v963 av TWSIBG, IBApi :: EClient :: 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 resulterande huvudtidstämpeln returneras till funktionen IBApi :: Klient :: headTimestamp public class EWrapperImpl. EWrapper public void headTimestamp (int reqId, stränghuvudTimestamp) Console. WriteLine (quotHead tidsstämpel. Begäran ID:, Huvudstämpel: quot. reqId, headTimestamp) public class EWrapperImpl implementerar EWrapper public void headTimestamp (int reqId, String headTimestamp) System. out. println (quotHead tidstämpel. Req Id: quot reqId quot, headTimestamp: quot headTimestamp) Public Class EWrapperImpl Public Sub headTimestamp (requestId As Integer, timeStamp As String) Implementerar IBApi. EWrapper. headTimestamp Console. WriteLine (quotHead tidsstämpel. :, Huvudstämpel: citat requestId, timeStamp) klass TestCppClient. public EWrapper void TestCppClient :: headTimestamp (int reqId, const std :: stringamp headTimestamp) printf (quotHead tidsstämpel. ReqId: d - Huvudstämpel: s, nquot. reqId, headTimestamp. cstr ()) 1 160 klass TestWrapper. EWrapper): 1 160 def headTimestamp (self, reqId: int, headTimestamp: str): 2 160 print (quotHeadTimestamp: quot. reqId, quot. title headTimestamp) Ta emot historiska data De historiska data kommer att levereras via IBApi :: EWrapper :: historicalData metod i form av ljusstakar. När alla ljusstakar har tagits emot IBApi. EWrapper. historicalDataEnd markören kommer att skickas public class EWrapperImpl. EWrapper public virtuell void historicalData (int reqId, sträng datum, dubbel öppen, dubbel hög, dubbel låg, dubbel stäng, int volym, int räkna, dubbel WAP, bool hasGaps) Console. WriteLine (quotHistoricalData. Kvoträkning - Datum: citationstecken: öppet: citationstecken, högt: citationstecken högt, lågt: citationstecken lågt, stängt: citationstecken, volym: citationstecken, räkning: citationstecken, WAP: citationstecken, citationstecken) virtuell tomgång historicalDataEnd (int reqId, sträng startDate, sträng endDate) Console. WriteLine (quotHistoricalDataEnd - kvoträkning från quot startDate quot to quotedDate) public class EWrapperImpl implementerar EWrapper public void historicalData (int reqId, String datum, dubbel öppen, dubbel hög dubbla låga, dubbla stänga, int volym, int räkna, dubbla WAP, booleanska hasGaps) System. out. println (quotHistoricalData. quotreqdd kvm - Datum: citationstecken, öppet: citationstecken kvitto Hög : quot low quot, Stäng: quot close quot, Volym: quot vo lume citationstecken, count: citationstecken, WAP: citat WAP-kvitto, HasGaps: quot hasGaps) public void historicalDataEnd (int reqId, String startDateStr, String endDateStr) System. out. println (quotHistoricalDataEnd. Börjedatum: quot startDateStr quot, Slutdatum: quot endDateStr) Public Class EWrapperImpl Public Sub historicalData (reqId As Integer, date As String, öppna As Double, hög As Double, low As Double, stäng As Double, volym As Heltal, räknas som helhet, WAP som dubbel, harGaps som booleska) Implementerar IBApi. EWrapper. historicalData Console. WriteLine (quotHistoricalData - ReqId kvotförstärkare amp citat Datum kvot datum amp amp Citat öppet amp amp citat Hög kvot amp amp Låg kvotförstärkare låg amp amp citat volym kvot amp amp kvotot Offentlig Sub historisk data Ennd ReqId amp cc Börja kvittot start amp citat Slutkurs amp ampququot) klass TestCppClient. Public EWrapper void TestCppClient :: historicalData (TickerId reqId, const std :: stringamp datum, dubbel öppen, dubbel hög, dubbel låg, dubbel stäng, int volym, int barCount, dubbel WAP, int harGaps) printf (quotHistoricalData. ReqId: ld - Datum: s, öppet: g, hög: g, låg: g, stäng: g, volym: d, räkning: d, WAP: g, HasGaps: dnquot. ReqId, date. cstr stäng, volym, barCount, WAP, hasGaps) void TestCppClient :: historicalDataEnd (int reqId, std :: sträng startDateStr, std :: string endDateStr) std :: cout ltlt quotHistoricalDataEnd. ReqId: kvitto reqId lt ct - Startdatum: Börjatdatum: Slutdatum: Slutdatum: Slutdatum: Steg :: Endl 1 160 klass TestWrapper (wrapper. EWrapper): 1 160 def historicalData (själv, reqId: TickerId, datum : str, open: float, high: float, 2 160 low: float, close: float, volym: int, barCount: int, 3 160 WAP: float, hasGaps: int): 4 160 super ().historiskData (reqId, datum, öppet, högt, lågt, stängt, volym, 5 160 barCount, WAP, hasGaps) 6 160 print (quotHistoricalData. quot. reqId, quot. datum: quot. datum, kvot: öppet, 7 160 quotHigh: quot quotLow: quot; low, quotClose: quot. cloth, quotVolume: volym, 8 160 quotCount: quot barCount, quotWAP: quot WAP, quotHasGaps: quot. hasGaps) 1 160 def historicalDataEnd (self, reqId: int, start: str, slut: str): 2 160 super (). historisk data (reqId, start, slut) 3 160 print (quotHistoricalDataEnd. requiId, quotfromquot. start, quottoquot. end) Giltig Varaktighet Strängenheter Giltig Bar Storlekar Historiska Data Typer (whatToShow) Av ailable Data per ProductUpdate: Jag uppdaterade koden så det fungerar med Oandas nya API. Hämta det här Tiden att prata om mäklare, hur man placerar en handel programmässigt och viktigast av allt hur man inte får scammed. En mäklare är inget annat än ett företag som låter dig handla (köpa eller sälja) tillgångar på en marknad genom sin plattform. Det som är mycket viktigt för algotrading är: Mäklaren erbjuder ett API för att vi ska kunna beställa. Du kan ha ett demokonto för att köra din scenmiljö och experimentera. Spridningen är så liten som möjligt. I vårt fall bryr vi oss inte riktigt om spridning som vi inte kommer att göra High Frequency Trading när som helst snart. Trots att mäklare är reglerade har det förekommit incidenter under de senaste åren, där mäklare vika på grund av vissa villkor. Var väldigt försiktig om det inte finns några recensioner av mäklaren på internet (eller de flesta är dåliga) Om mäklaren ger dig en galen hävstångseffekt (som 1: 200) Om mäklaren verkar vara i ett mycket konstigt land Vad kan hända är att du börjar tjäna lite pengar och du inte kan dra ut dem. Allvarligt. Super stressig situation. Men vi kan byta till en lyckligare anteckning som öppnar ett konto och placerar vår första programmatiska handel. Whooha Jag använder Oanda som mäklare (jag är inte ansluten till dem) och de erbjuder ett ganska anständigt API, bibliotek på github och ett gratis demokonto. När du loggar in på ditt demokonto går du till Hantera API-åtkomst. Där kan du hitta din API-nyckel som vi ska använda i vårt system för att placera affärer. Se till att du inte delar den här nyckeln. Koden för detta är och alla andra inlägg finns på github och du kan installera det och köra det ganska enkelt. Uppdatering: Oanda släppte en ny (kickass) exekveringsmotor som heter v20 och de har släppt ett nytt (förbättrat) API. Det här inlägget har uppdaterats för att använda det nya API, men om (av någon anledning) du vill kontrollera den gamla koden, är den här. Du är lycklig med Anslutning till Oanda behöver en conf-fil - som du kan generera med ett skript som Oanda tillhandahåller här eller du kan bara skapa det själv. Varför vill du ha det Först och främst när det gäller uppgifter (och mina pengar), föredrar jag att veta allt som händer. Och jag gillar inte att behöva installera PyYAML bara för att läsa en conf-fil. Använd gärna någon metod. Förbered dig nu för att bli förvånad. Koden är rakt framåt. Vi initierar API: n och nu kan vi göra en beställning (köp 5000 enheter EURUSD). Kontrollera nuvarande pris är lika enkelt. Oroa dig inte för vad EURUSD är eller hur många enheter vi köper eller vad en marknadsordnad är. För närvarande har vi lagt vår första handel från vår bärbara dator och vi ska bygga vårt eget API för att placera affärer. Spännande saker Du kan läsa Oandas dokumentation här för att se vad du kan göra med deras API och hitta Python-biblioteket här. Exempel på exempel finns på Oandas github-sida här. Kommer upp nästa, anslutning till ett riktigt LIVE algotrading-system, som körs från min RaspberryPI hemma. Du kommer att kunna se det (nästan) slutliga programmet som körs och väl prata mer om Forex och strategier. Om du har mer feedback, ping mig på jonromero eller anmälan till nyhetsbrevet. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Det här är mer av en Hur man bygger din egen algotradingstrategi - Ethereum-upplagan och inte en snabbpengar för bloggpost. Det är också ett riktigt exempel med riktiga avkastningar (och reella produktionsfel som kostar mig pengar) där du kan se hur du identifierar möjligheter, varför algotrading är fantastisk och varför riskhanteringen kan rädda din röv. Jag får denna fråga nästan varje dag. Hur kan jag hitta en bra strategi Hur kan jag bygga min egen Behöver jag ha en doktorand i matematik Statistik Newsflash: Om jag kan skriva en strategi kan vem som helst skriva en strategi. Lita på mig på det. Det enda tricket är att leta efter en enkel. Uppdatering: Det här inlägget har skrivits om minst fem gånger (som DAO-drama eskaleras) och det är det perfekta exemplet på en strategi som gör en hel cirkel. Jag började bli involverad i Ethereum tidigt eftersom jag verkligen gillade att köra dina algoritmer på blockchain-saken. När TheDAO kom ut läste jag allt om det och älskade idén. Du behöver inte förstå vad Ethereum, theDAO, blockchain är vid denna punkt (jag lovar att jag kommer att ramla på en annan post). Samma idéer gäller för Forex, Lager även Pokemon bollar. Mitt fyra steg - kapten självklart - system Jag personligen har ett visst sätt att jag jobbar. Steg ett . Identifiera en idé. Min uppfattning är att det finns ett par utbyten som erbjuder Ethereum och DAO-symboler. Vad händer om det fanns en arbitrage mellan dessa steg två. Testa idén manuellt. Om någonting fungerar, är jag på något. Allt jag behövde är att genomföra alla steg manuellt och skriva ner eventuella avgifter, villkor eller något som ska dokumenteras. Steg tre. Automatisera Denna algoritm är inte en högfrekvent handelsalgoritm. Det finns en betydande tidrisiko (som du kan eliminera också se senare) men vad jag gjorde kunde göras manuellt. Problemet är att jag skulle behöva spendera all tid framför min dator, kontrollera om det finns ett arbitrageförhållande och om det var så var jag tvungen att agera snabbt och utan att röra sig upp. Åh och jag var tvungen att rekrytera fem av mina vänner för att skala upp det här. Lång historia kort, jag tillbringade presidentsdagen och skrev ett enkelt program som spelar upp alla mina manuella steg. Programmet skulle krascha och det var inte mer än 100 linjer kod. Detta är datainsamlingsstadiet där jag ser om det finns en fördel att algoritmer kan ge mig. Fördelar kan vara: Något som automatiseras och kör 1000 gånger per sekund eller 1000 gånger parallellt Något som tror snabbare än jag kan Något som inte har några känslor att skruva upp mitt system Om det finns minst en eller flera villkor uppfyllda, kommer jag att börja bygga och skriva om algoet. Steg fyra. Allt jag skojar och du ser lite av varför riskhanteringen är super viktig i den här verksamheten. Låt oss diskutera lite om vad denna arbitrage var. Tanken är: Jag undrar om Kraken och Shapeshift har olika priser för samma tillgångar. Detta är ett klassiskt arbitragefall (Kraken och Shapeshift är utbyten). Jag skulle kunna utbyta DAO för ETH på Kraken, överföra ETH till Shapeshift, byta ETH för DAO och skicka dem tillbaka till Kraken och på grund av prisintrång skulle jag sluta med mer DAO än jag ursprungligen började Riskfria pengar, den bästa typen pengar . Du kan tjäna pengar så länge som ETHDAO från Kraken DAOETH från ShapeShift gt 1 (avgifter gas). Mycket enkel formel, rätt Varje cykel var en 2 till 10 återkomst av min huvudstad. Efter ett tag började jag slå gränserna för Shapeshift och jag var tvungen att göra det här parallellt. Frågan är vad du skulle göra om du hade en algoritm som gör dig 10 av dina pengar var 20: e minut. Det dumaste du kan göra är att lägga massor av pengar på det. Om du inte är bekant med det grekiska ordet hybris. anser dig själv lycklig. Hybris är när du tror att du är oövervinnlig, bättre än gudar. Och det här är det största NEJ NEJ du kan göra i handel. Efter några veckor hackades theDAO. 160 miljoner dollar blev stulna (eller ska jag säga frusen) och ingen visste vad som skulle hända. För mig hände detta, 10 minuter innan du gick ombord på ett flygplan för att flyga till New York. Hybris. Eller som människor i USA säger: Fuck. Jag var smart (lycklig) nog att ha goda riskhanteringsvanor (tack Forex). Jag riskerar aldrig någonsin mer att 2 av min kapital, även om det verkar vara den bästa typen av affär. Lyckligtvis blev pengarna återställda och jag kunde dra tillbaka min DAO till Ethereum (men ja, jag köpte in-flight WiFi för att fortsätta med vad som händer). Hela denna erfarenhet är en påminnelse om att det alltid finns saker som du inte kan förutsäga. Saker som du inte kan kontrollera. Det här var en systematisk risk och jag kunde inte ha sett det som kommer. Tryckknappar och byggalgoritmer räcker inte. Korrekt riskhantering och att veta när du behöver ta ett chill-piller är vad som kan hålla dig i spelet. På nästa post lägger jag hela algoritmen och går efter rad. Jag planerar också att diskutera lite mer om theDAO och Ethereum. Om du inte vill missa något av dessa och få lite mer information, var god och registrera dig för nyhetsbrevet där jag pratar om fintech, algoritmer och marknaderna. Förresten, om du vill skapa din egen cryptocurrency och lära dig mer om Ethereum, har jag ett bra inlägg med koden som bokas här. Kommande nästa: Dykning in i ETHDAO algotrading-programmet Om du har mer feedback, ping mig på jonromero eller anmäl dig till nyhetsbrevet. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Maskininlärning och handel är ett mycket intressant ämne. Det är också ett ämne där du kan spendera massor av tid att skriva kod och läsa papper och då kan ett barn slå dig när du spelar Mario Kart. I nexts inlägg kommer vi att prata om: Optimera poster och utgångar. Detta och bara detta kan göra en massa skillnader i din bankrulle. Beräkna positionsstorlek (om du inte gillar Kelly-kriteriet) Sök eventuell korrelation mellan olika par (parhandel). Jag älskar EURUSD vs GBPJPY korrelation Beräkna stödförstärkare motståndslängder Men vad är maskinlärning Maskininlärningsalgoritmer är algoritmer där en maskin kan identifiera mönster i dina data. Ja, det är så enkelt. Hitta till exempel alla djur i detta foto och rita en låda runt dem. Nämn det djuret. Galen jag vet. För handel som du kan tänka dig är det ganska likt: För att en maskin ska kunna lära måste du lära ut vad som är rätt eller fel (övervakat lärande) eller ge det en stor dataset och låt den bli vild (obesvarad). För att identifiera objekt är detta rakt framåt men vad handlar jag om att se om det finns något maskininlärningsprogram som kan identifiera SR-linjer men till ingen nytta. Så jag bestämde mig för att skriva det första maskinprogrammet i python som identifierar stöd och motståndslinjer i Python. En annan första Hooray Men hur kan en algoritm identifiera dessa områden Hoooooow Ladies and Gents (och robotar), låt mig presentera dig för MeanShift. en oövervakad algoritm som används mest för bildigenkänning och är ganska trivial för installation och körning (men också mycket långsam). Tanken är att denna algoritm låter mig partitionera mina data (forex ticks) i områden och då kan jag använda kanterna som stöd och motståndslinjer. Cool idé men fungerar det Vi analyserar omkring 12 miljoner datapoäng av EURUSD 2014 och ett par månader från 2015. Motståndsledningarna placeras automagiskt av en maskininlärningsalgoritm. Vad som är riktigt coolt (och spöklikt) är att algoritmen nästan spikar det. NAILS det svårt. Det blir väldigt skrämmande när vi ska använda algoritmen för att identifiera mikrostrukturer och börja scalping. Systemet kan hantera alla typer av timeseries-data (aktier, forex, guld, vad som helst) och det kommer att göra ett html-interaktivt diagram (som diagrammet ovan) med dina data och den maskin som genereras SL. Koden är så så galen. Nu kan vi gå igenom koden. När du har din uppsättning data måste du läsa dem och rengöra dem. Förbered dig för några pandaer magi. Vi släpper de tomma värdena (helger) och sedan samplar vi data till 24 timmars ljusstakar (ohcl). Detta gör det mycket lättare att plotta. Gruppdata är de data som vi kommer att mata in i ml-algoritmen. Då förbereder vi de data som vi ska använda i algo. Vid nästa inlägg diskutera hur du gör det här arbetet ännu bättre, diskutera några mycket intressanta resultat (kan algoritmen faktiskt förutsäga framtiden) och börja använda den i vår egen handel. Om du vill kolla nästa artikel och läsa mer om handel och investeringar med hjälp av algoritmer, anmäl dig till nyhetsbrevet. Komma upp nästa: Maskininlärning Gone Wild - Använda koden Om du har mer feedback, ping mig på jonromero eller anmäl dig till nyhetsbrevet. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Uppdatering: Maskininlärningsinsatsen kommer att vara episk men det tar så mycket tid att göra koden presentabel. Bär med mig, coola saker kommer (som du läste på nyhetsbrevet) Ansvarsbegränsning: DETTA ÄR INTE SKATTANAD. Det som verkligen förvånar är att majoriteten av förfrågningarna i nyhetsbrevet är: Använd verktyg för att hjälpa Trading Machine Learning att optimera affärer Skatter De två första kan jag förstå. Alla vill bli en bättre näringsidkare. Jag fattar. Men skatter SKATTER Det här är din lyckodag. Forex skatt är super lätt. Allvarligt. Som standard (detta kallas avsnitt 988) kommer alla dina förluster att kompensera dina inkomstskatter utan gränsen på 3k per år. Detta är mycket bättre än aktiehandel där förluster kompenserar dina kapitalvinster. Men vad händer med vinster Varför tar du hand om varför Majoriteten av Forex-handlarna förlorar pengar (jag kallar det att betala undervisning) det första året, så du är bättre att hålla det enkelt tills du har en beprövad och konsekvent strategi. Med detta sagt, om du faktiskt gör en vinst, beskattas du på den kortsiktiga kapitalvinsten (ibland upp till 40). Lösningarna när du börjar tjäna pengar är att välja mellan avsnitt 988 och beskattas enligt avsnitt 1256 där 60 av vinsten beskattas som långsiktiga realisationsvinster och 40 på kort sikt (men nu kan förluster inte kompensera din inkomst). Det här är väldigt bra när du tjänar pengar, väldigt dåligt när du inte gör det. Starta en LLC För människor som just börjat experimentera med Forex och Algotrading, föreslår jag alltid att de stannar med avsnitt 988 (standard) och när de börjar tjäna lite pengar (konsekvent) eller de vill gå på heltid, prata med mig :) Allvarligt finns det så många saker att du kommer att börja göra annorlunda när du går från hobbystadiet till andra inkomster till heltidsjobb som det inte finns någon anledning att överoptimera detta. Kommer upp nästa: Maskininlärning Gone Wild Om du har mer feedback, ping mig på jonromero eller anmäl dig till nyhetsbrevet. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Förra gången pratade vi om The for-looper backtester (som jag älskar att kalla dem). Nu är det dags att se någon kod Vi sa att vi har något liknande: python för varje element i readhistoricaldata (): applystrategy () howourstrategydid () Sweet, laddar laddar vår strategi, laddar lite historisk data, kör vår algoritm och skriver ut några resultat Jag föredrar att ha mina strategier i ett JSON-format som innehåller namnet på strategin och vissa specifikationer (som hur många pips för stoploss eller takeprofit etc). På det sättet, när vi väl börjar använda en händelsebaserad backtester, kan vi överföra strategin genom en maskininlärningsalgoritm och försöka optimera den. Nästa rad laddar in våra data. Jag vet att folk inte gillar pickle och det finns andra sätt att ladda data (och vi kommer att prata om BColz vid någon tidpunkt) men för nu bara nakna med mig. Nästa rad är självklarande. Vi skickar historiska data till vårt algo och vi får tillbaka statistik att skriva ut. Lets fokusera på algoritmen lite och vi kan diskutera plotting etc vid en senare tidpunkt. Det magiska av det enkla backtesting systemet Förbered dig för att bli förvånad över hur löjligt lätt att göra detta. Korta följder Vad händer med denna typ av backtesting är det 1. du kommer förmodligen göra misstag när du vill använda exakt samma algoritm 2. Du kan inte skriva en mycket komplex strategi (åtminstone så lätt) 3. Mycket svår att skala (jämfört med händelsebaserad) 4. Du måste ha din simulering och körning på samma språk, men kom ihåg att detta är det bästa och snabbaste sättet att börja ut och ta reda på hur alla dessa saker fungerar. Komma fram nästa, med hjälp av andra kända backtestrar i Python och lägga till egna bilder Om du har mer feedback, ping mig på jonromero eller anmäl dig till nyhetsbrevet. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Vad är ett bra algotrading-system utan några snygga strategier att distribuera Nedan finns en lista över strategier som jag hittade online (eller skickad till mig av handlare som finns på nyhetsbrevet). Jag planerar att uppdatera listan som jag fortsätter att komma över till nya idéer. Konceptet är att när vi fortsätter att dyka mer och mer in i vårt algotrading-system, kommer jag att visa dig hur du kodar och distribuerar dessa strategier. Jag vet säkert att de flesta arbetar med minimala förändringar. Värsta fallet scenario, du har ett system för att testa dina antaganden. Här är listan (och skicka mig någon annan strategi som du tycker att den ska inkluderas): Komma upp nästa, dela och diskutera min enklaste (men mest framgångsrika) backtester Om du har mer feedback, ping mig på jonromero eller registrerar dig på nyhetsbrev. Legal outro. Detta är en teknikhandledning om hur man bygger en algotrading-plattform för experiment och FUN. Några förslag här är inte ekonomiska råd. Om du förlorar några (eller alla) pengar på grund av att du följde några handelsråd eller distribuerat detta system i produktion, kan du inte skylla på den här slumpmässiga bloggen (orör mig). Njut på egen risk. Att bygga ett backtest-system är faktiskt ganska enkelt. Lätt att skruva upp menar jag. Även om det finns massor av utmärkta bibliotek där ute (och väl gå igenom dem vid någon tidpunkt), gillar jag alltid att göra det själv för att finjustera det. Från alla backtesting-system som jag har sett kan vi anta att det finns två kategorier: The-loopers Event-generatorer Idag pratar vi väl om för-loopers. För-loopers är min favorit typ av backtesters. De är triviala att skriva och super kul att expandera men de har några viktiga flöden och tyvärr är de flesta backtestrarna där ute för loopers (ps: Jag behöver hitta ett bättre namn för detta). Hur för-loopers fungerar Använda en för loop (som du kanske har gissat). Det är något som här: Mycket enkelt rätt Så här fungerar ett backtesting system som driver en momentumstrategi: Så, vilket är problemet Mycket svårt att skala (horisontellt) Behöver mycket arbete för att hålla din applicationstrategy () som arbetar med backtesting och produktion Du måste ha allt på samma programmeringsspråk Låt oss dyka in i dessa, en efter en. Skalbarhet Jag experimenterade ett par för några veckor sedan med en bergklättringsalgoritm för att optimera en av mina strategier. Det kör fortfarande. Efter två veckor. Och jag bygger uber-skalbara system för att leva. Varför kör det fortfarande Du kan använda multiprocessing. Disko. producenten (med hjälp av ZeroMQ) eller bara trådar för att påskynda detta men vissa problem är inte pinsamt parallellt (ja det här är en faktisk term, inte en av mina färdiga ord). Mängden arbete att skala en backtester så här (speciellt när du vill göra samma maskininlärning ovanpå det) är enormt. Du kan göra det men det är fel sätt. Produktion och backtesting i sync Detta. De gånger jag har blivit biten av detta. Jag kan komma ihåg de förlorade affärer där jag var hm, varför jag gick in i den här handeln eller min gamla tid favorit VARFÖR TRAILING STOP WAS APPLIED NU. Story time: Jag hade en idé för att optimera min strategi, att köra en backtester för att se vad som skulle hända om jag kunde lägga ett efterföljande stopp efter att handeln var lönsam för att alltid säkra vinster. Backtesting fungerade som en charm vid en 13 ökning av vinst och produktion förlorade varje enskild handel. Jag tänkte ut det efter att min algo förlorat 3400 på ett par timmar (en mycket dyr lektion). Att hålla ansökningsstrategin i synkronisering är mycket svår och blir nästan omöjlig när du vill göra det på ett distribuerat sätt. Och du vill inte ha två versioner av din strategi som är nästan identiska. Om du inte har 3400 att spendera. Använda olika språk Jag älskar Python. Och Erlang. Och Clojure. Och J. Och C. Och R. Och Ruby (nej jag hatar verkligen Ruby). Jag vill kunna utnyttja styrkan på andra språk i mitt system. Jag vill prova strategier i R där det finns mycket välprövade bibliotek och det finns ett stort samhälle bakom det. Jag vill ha Erlang att skala min kod och C för att krossa data. Om du vill vara framgångsrik (inte bara i handel) måste du kunna använda alla tillgängliga resurser utan fördomar. Jag har lärt mig massor av att hänga med R-utvecklare om hur du kan delta i hedgeobligationer och visualisera dem eller varför Sharpe-förhållandet kan vara en lögn. Varje språk har en annan folkmassa och du vill att så många människor häller idéer in i ditt system. Om du försöker ha applicationstrategy på olika språk så lycka till med (2). Är du övertygad nu Tja, jag försöker inte övertyga dig som för-loopers är ett bra sätt att köra dina första tester. Det är hur jag började och för många strategier skickar jag dem inte ner till 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 är allt. 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 handlare tittar nu Forex Factoryreg är ett registrerat varumärke.

No comments:

Post a Comment