Grunderna för algoritmisk handel: Begrepp och exempel En algoritm är en specifik uppsättning tydliga instruktioner som syftar till att utföra en uppgift eller process. Algoritmisk handel (automatiserad handel, blackbox trading eller helt enkelt algo-trading) är processen med att använda datorer som är programmerade att följa en definierad uppsättning instruktioner för att placera en handel för att generera vinst med en hastighet och frekvens som är omöjligt för en mänsklig näringsidkare. De definierade reglerna baseras på tid, pris, kvantitet eller någon matematisk modell. Bortsett från vinstmöjligheter för näringsidkaren gör algo-trading marknaderna mer likvida och gör handel mer systematisk genom att utesluta emotionella mänskliga effekter på handelsverksamheten. Antag att en näringsidkare följer dessa enkla handelsvillkor: Köp 50 aktier i ett lager när dess 50-dagars glidande medelvärde går över 200-dagars glidande genomsnitt Säljer aktier i aktierna när dess 50-dagars glidande medelvärde går under det 200-dagars glidande genomsnittet Med hjälp av denna uppsättning av två enkla instruktioner är det enkelt att skriva ett datorprogram som automatiskt kommer att övervaka aktiekursen (och de glidande medelindikatorerna) och placera köp - och säljordern när de definierade villkoren är uppfyllda. Näringsidkaren behöver inte längre hålla koll på levande priser och grafer eller lägga in orderen manuellt. Det algoritmiska handelssystemet gör det automatiskt för honom genom att korrekt identifiera handelsmöjligheten. (För mer om glidande medelvärden, se: Enkla rörliga genomsnittsvärden gör trenden uppe.) Algo-trading ger följande fördelar: Handlar utförda till bästa möjliga priser. Instant och exakt orderingång (därmed höga chanser att genomföras på önskade nivåer). tidsbestämd korrekt och omedelbart för att undvika betydande prisförändringar. Minskade transaktionskostnader (se exempel på genomförandebrist nedan). Samtidig automatiserad kontroll av flera marknadsförhållanden. Minskad risk för manuella fel vid placering av handel. Backtest algoritmen baserat på tillgänglig historisk och realtidsdata. möjligheter till misstag av mänskliga handlare baserade på känslomässiga och psykologiska faktorer Den största delen av dagens algohandel är HFT (High Frequency Trading), som försöker kapitalisera att placera ett stort antal order med mycket snabba hastigheter över flera marknader och flera beslut parametrar, baserat på förprogrammerade instruktioner. (För mer om handel med högfrekventa handelar, se: Strategier och hemligheter hos högfrekvenshandeln). Algo-trading används i många former av handels - och investeringsverksamhet, bland annat: Mid till långfristiga investerare eller köpsidor (pensionsfonder , fonder, försäkringsbolag) som köper aktier i stora mängder men inte vill påverka lagerpriserna med diskreta investeringar i stor volym. Kortfristiga näringsidkare och sälja sidodeltagare (marknadsmäklare, spekulanter och arbitrageurs) dra nytta av automatiserad handelstillverkning och allmäna handelshjälpmedel för att skapa tillräcklig likviditet för säljare på marknaden. Systematiska handlare (trendföljare, parhandlare, hedgefonder etc.) finner det mycket effektivare att programmera sina handelsregler och låta programmet handla automatiskt. Algoritmisk handel ger ett mer systematiskt tillvägagångssätt för aktiv handel än metoder baserade på en mänsklig handlare intuition eller instinkt. Algoritmiska handelsstrategier Alla strategier för algoritmisk handel kräver en identifierad möjlighet som är lönsam när det gäller förbättrat resultat eller kostnadsminskning. Följande är vanliga handelsstrategier som används i algo-trading: De vanligaste algoritmiska handelsstrategierna följer trender i glidande medelvärden. kanalbrytningar. prisnivå rörelser och relaterade tekniska indikatorer. Dessa är de enklaste och enklaste strategierna för att genomföra genom algoritmisk handel, eftersom dessa strategier inte innebär att man gör några förutsägelser eller prisprognoser. Trader initieras baserat på förekomsten av önskvärda trender. som är enkla och raka att implementera genom algoritmer utan att komma in i komplexiteten av prediktiv analys. Ovanstående exempel på 50 och 200 dagars glidande medelvärde är en populär trendstrategi. (För mer om strategier för trendhandel, se: Enkla strategier för att kapitalisera på trender.) Att köpa ett dubbelt noterat lager till ett lägre pris på en marknad och samtidigt sälja det till ett högre pris på en annan marknad ger prisskillnaden som riskfri vinst eller arbitrage. Samma operation kan replikeras för aktier kontra futuresinstrument, eftersom prisskillnaderna existerar från tid till annan. Genomföra en algoritm för att identifiera sådana prisskillnader och placera orderna möjliggör lönsamma möjligheter på ett effektivt sätt. Indexfonder har definierat perioder av ombalansering för att få sina innehav i nivå med sina respektive referensindex. Detta skapar lönsamma möjligheter för algoritmiska handlare, som utnyttjar förväntad handel som erbjuder 20-80 basispoäng vinst beroende på antalet aktier i indexfonden, precis innan indexfonden ombalanseras. Sådana branscher initieras via algoritmiska handelssystem för snabb genomförande och bästa priser. Många bevisade matematiska modeller, som den delta-neutrala handelsstrategin, som tillåter handel på kombination av alternativ och dess underliggande säkerhet. där handeln placeras för att kompensera positiva och negativa delta så att portföljen delta hålls noll. Medelåtervändningsstrategin bygger på idén att de höga och låga priserna på en tillgång är ett temporärt fenomen som regelbundet återgår till deras medelvärde. Att identifiera och definiera ett prisklass och en implementeringsalgoritm baserad på det gör det möjligt att placera affärer automatiskt när priset på tillgången bryter in och ut ur sitt definierade intervall. Volymvägd genomsnittsprisstrategi bryter upp en stor order och släpper dynamiskt bestämda mindre bitar av ordern till marknaden med hjälp av aktiespecifika historiska volymprofiler. Syftet är att genomföra ordern nära Volymvägd Medelpris (VWAP) och därigenom dra nytta av genomsnittspriset. Tidsvägd genomsnittsprisstrategi bryter upp en stor order och släpper dynamiskt bestämda mindre bitar av ordern till marknaden med jämnt fördelade tidsluckor mellan start - och sluttid. Syftet är att genomföra ordern nära genomsnittskursen mellan start - och sluttiderna och därigenom minimera marknadseffekterna. Till dess att ordern är fullt fylld fortsätter denna algoritm att skicka delbeställningar, enligt det definierade deltagandekvoten och enligt volymen på marknaden. Den relaterade stegstrategin skickar order till en användardefinierad procentandel av marknadsvolymer och ökar eller minskar denna delaktighet när aktiekursen når användardefinierade nivåer. Strategin för genomförandet av underskottet syftar till att minimera genomförandekostnaden för en order genom att handla i realtidsmarknaden och därigenom spara på beställningskostnaden och dra nytta av möjlighetskostnaden för försenat genomförande. Strategin kommer att öka den riktade delaktighetsgraden när aktiekursen rör sig positivt och sänker den när aktiekursen rör sig negativt. Det finns några speciella klasser av algoritmer som försöker identifiera händelser på andra sidan. Dessa sniffningsalgoritmer, som till exempel används av en försäljningssida-marknadsförare, har den inbyggda intelligensen för att identifiera existensen av några algoritmer på köpsidan av en stor order. Sådan upptäckt genom algoritmer kommer att hjälpa marknadsmakaren att identifiera stora ordermöjligheter och möjliggöra för honom att dra nytta av att fylla orderna till ett högre pris. Detta identifieras ibland som high-tech front-running. (För mer om högfrekvent handel och bedrägliga rutiner, se: Om du köper aktier online, är du involverad i HFT.) Tekniska krav för algoritmisk handel Genomföra algoritmen med ett datorprogram är den sista delen, klubbad med backtesting. Utmaningen är att omvandla den identifierade strategin till en integrerad datoriserad process som har tillgång till ett handelskonto för beställning. Följande behövs: Datorprogrammeringskunskap för att programmera den nödvändiga handelsstrategin, anställda programmörer eller färdiga handelsprogramvaror Nätverksanslutning och tillgång till handelsplattformar för orderingång Tillgång till marknadsdata feeds som kommer att övervakas av algoritmen för möjligheter att placera order Förmågan och infrastrukturen att backtest systemet en gång byggt innan den går live på reala marknader Tillgängliga historiska data för backtesting, beroende på komplexiteten av regler som implementeras i algoritmen Här är ett omfattande exempel: Royal Dutch Shell (RDS) är listat på Amsterdam Fondbörs (AEX) och London Stock Exchange (LSE). Låter bygga en algoritm för att identifiera arbitrage möjligheter. Här är några intressanta observationer: AEX handlar i euro, medan LSE handlar i Sterling Pounds På grund av en timmes tidsskillnad öppnar AEX en timme tidigare än LSE, följt av att båda börserna handlar samtidigt för de närmaste timmarna och sedan endast handlar i LSE under Den sista timmen när AEX stängs Kan vi undersöka möjligheten till arbitragehandel på Royal Dutch Shell-börsen som är listad på dessa två marknader i två olika valutor Ett datorprogram som kan läsa aktuella marknadspriser Prismatningar från både LSE och AEX A-valutahastighet för GBP-EUR-växelkurs Beställa placeringsförmåga som kan styra ordern till rätt utbyte Backtestningskapacitet på historiska prismatningar Dataprogrammet ska utföra följande: Läs det inkommande prismatningen av RDS-lager från båda börserna Använda tillgängliga valutakurser . konvertera priset på en valuta till andra Om det finns en tillräckligt stor prissammanhang (diskontering av mäklarkostnaderna) som leder till ett lönsamt tillfälle, placerar du köpsordern på lägre prissättning och säljarorder på högre prissättning. Om beställningarna utförs som Önskad, arbitrage vinsten kommer att följa Enkel och lätt Men övningen av algoritmisk handel är inte så enkelt att underhålla och genomföra. Kom ihåg, om du kan placera en algo-genererad handel, så kan andra marknadsaktörer. Följaktligen fluktuerar priserna i milli - och till och med mikrosekunder. I det ovanstående exemplet, vad händer om din köphandel blir verkställd, men sälja handel, eftersom försäljningspriserna ändras när din order träffar marknaden. Du kommer att sluta sitta med en öppen position. göra din arbitrage strategi värdelös. Det finns ytterligare risker och utmaningar: till exempel riskerar systemfel, nätverksanslutningsfel, tidsintervaller mellan handelsorder och utförande, och viktigast av allt, ofullkomliga algoritmer. Ju mer komplexa en algoritm krävs, desto strängare backtesting behövs innan den tas i bruk. Kvantitativ analys av algoritmernas prestanda spelar en viktig roll och bör granskas kritiskt. Det är spännande att gå till automation med hjälp av datorer med en uppfattning att tjäna pengar utan problem. Men man måste se till att systemet är noggrant testat och att gränserna är nödvändiga. Analytiska handlare bör överväga att lära sig programmering och byggsystem på egen hand, för att vara övertygade om att implementera rätt strategier på idiotsäkert sätt. Försiktig användning och noggrann testning av algo-handel kan skapa lönsamma möjligheter. En typ av ersättningsstruktur som hedgefondsförvaltare brukar använda i vilken del av ersättningen prestationsbaserad. Ett skydd mot inkomstförlust som skulle uppstå om den försäkrade gick bort. Den namngivna mottagaren tar emot. Ett mått på förhållandet mellan en förändring i den mängd som krävdes av ett visst gott och en förändring i dess pris. Pris. Det totala dollarns marknadsvärde för alla bolagets utestående aktier. Marknadsvärdet beräknas genom att multiplicera. Frexit kort för quotFrench exitquot är en fransk spinoff av termen Brexit, som uppstod när Storbritannien röstade till. En order placerad med en mäklare som kombinerar funktionerna i stopporder med de i en gränsvärde. En stopporderorder kommer. Hur du sätter upp din egen högfrekventa handelsoperation Förra veckan hade vi privilegiet att sitta ner med Mike Felix och doktor Lawrence Hansen från Lime Brokerage. en New York City-baserad byråmäklare som specialiserat sig på högfrekvens. låg latenshandel. Den viktigaste takeaway. De som tycker om hastigheterna är oacceptabla, bättre vänja sig på det eftersom de är här för att stanna och det kommer bara att bli snabbare härifrån. Vi frågade dem hur man skulle gå om att inrätta sin egen högfrekventa handelsoperation på en amatörnivå. Efter att ha naglat ner exakt vad definitionen av högfrekvent handel är. Vi gick över de steg du behöver ta för att få det att hända. Visa som: En sida SlidesDetta inlägg beskriver vad jag gjorde för att göra ca. 500k från högfrekvent handel från 2009 till 2010. Sedan jag handlade helt självständigt och inte längre kör mitt program Irsquom glad att berätta allt. Min handel var främst i Russel 2000 och DAX futures kontrakt. Nyckeln till min framgång, tror jag, var inte i en sofistikerad ekonomisk ekvation utan snarare i den övergripande algoritmdesignen som sammanfogade många enkla komponenter och använde maskininlärning för att optimera för maximal lönsamhet. Du behöver inte veta någon sofistikerad terminologi här, för när jag satte in mitt program var det allt baserat på intuition. (Andrew Ngrsquos fantastiska maskininlärningskurs var ännu inte tillgänglig - btw om du klickar på den länken dinsquoll ska tas till mitt aktuella projekt: CourseTalk, en granskningsplats för MOOCs) Först vill jag bara visa att min framgång inte bara var resultatet av tur. Mitt program gjorde 1000-4000 trades per dag (halv lång, halv kort) och kom aldrig i positioner på mer än ett fåtal kontrakt i taget. Detta innebar att slumpmässig lycka från någon enskild handel var ganska snygg ut. Resultatet var att jag aldrig förlorade mer än 2000 på en dag och aldrig haft en förlorande månad: (REDIGERA. Dessa siffror är efter betalningsuppdrag) Och herersquos ett diagram för att ge dig en känsla av den dagliga variationen. Observera detta utesluter de senaste 7 månaderna eftersom - eftersom siffrorna slutade gå upp - förlorade jag min motivation att komma in i dem. Min handelsbakgrund Innan jag startat mitt automatiserade handelsprogram hade Irsquod 2 års erfarenhet som en ldquomanualrdquo-dag näringsidkare. Detta var tillbaka 2001 - det var de första dagarna med elektronisk handel och det fanns möjligheter för ldquoscalpersrdquo att tjäna bra pengar. Jag kan bara beskriva vad jag gjorde när jag spelade ett videospel med en förmodad kant. Att vara framgångsrik menade att vara snabb, vara disciplinerad och ha ett bra intuitivt mönsterigenkänningsförmåga. Jag kunde göra runt 250k, betala min studielån och få pengar kvar. Vinn Under de närmaste fem åren skulle jag starta två nystartade program och hämta vissa programmeringsförmågor på vägen. Det skulle inte vara förrän i slutet av 2008 att jag skulle komma tillbaka till handeln. Med pengar som låg låg från försäljningen av min första uppstart, erbjöd handel hopp om några snabba pengar medan jag tänkte ut mitt nästa drag. Under 2008 var jag ldquomanuallyrdquo day trading futures med programvara som heter T4. Irsquod ville ha några anpassade orderinmatnings snabbtangenter, så efter att ha upptäckt att T4 hade ett API tog jag utmaningen att lära C (det programmeringsspråk som krävs för att använda API) och fortsatte och byggde själv några snabbtangenter. Efter att få mina fötter blöt med API hade jag snart större förväntningar: Jag ville lära mig att datorn skulle handla för mig. API gav både en ström av marknadsdata och ett enkelt sätt att skicka order till utbytet - allt jag behövde var att skapa logiken i mitten. Nedan följer en skärmdump av ett T4-handelsfönster. Vad som var coolt är att när jag fick mitt program, kunde jag titta på datahandeln på exakt samma gränssnitt. Titta på riktiga order som poppade in och ut (i sig med mina riktiga pengar) var både spännande och läskigt. Utformningen av min algoritm Från början var mitt mål att installera ett system så att jag kunde vara ganska säker på att Irsquod tjäna pengar innan han någonsin gjorde några levande affärer. För att uppnå detta behövde jag bygga en handelssimuleringsram som skulle - så noggrant som möjligt - simulera levande handel. Medan handel i live-läge krävde bearbetnings marknadsuppdateringar som streamades genom API, krävde simuleringsläget att läsa marknadsuppdateringar från en datafil. För att samla in dessa data ställer jag in den första versionen av mitt program för att enkelt ansluta till API: n och registrera marknadsuppdateringar med tidsstämplar. Jag slutade använda 4 veckor värda av de senaste marknadsdata för att träna och testa mitt system på. Med en grundläggande ram på plats hade jag fortfarande uppgiften att räkna ut hur man gör ett lönsamt handelssystem. Som det visar sig skulle min algoritm bryta ner i två distinkta komponenter som Irsquoll utforskar i sin tur: Att förutse prisrörelser och göra lönsamma affärer Att förutse prisrörelser Kanske är en uppenbar del av något handelssystem att kunna förutse var priserna kommer att röra sig. Och mitt var inget undantag. Jag definierade det aktuella priset som genomsnittet av insidan och inbjudandet och jag satte målet att förutsäga var priset skulle vara de närmaste 10 sekunderna. Min algoritm skulle behöva komma upp med denna förutsägelse moment för stund under handelsdagen. Skapa amp-optimeringsindikatorer Jag skapade en handfull indikatorer som visade sig ha en meningsfull förmåga att förutsäga kortvariga prisrörelser. Varje indikator producerade ett tal som var antingen positivt eller negativt. En indikator var användbar om oftare än inte ett positivt tal motsvarade marknadens uppgång och ett negativt tal motsvarade marknadens nedgång. Mitt system gjorde det möjligt för mig att snabbt bestämma hur mycket prediktiv förmåga någon indikator hade så att jag kunde experimentera med många olika indikatorer för att se vad som fungerade. Många av indikatorerna hade variabler i formlerna som producerade dem och jag kunde hitta de optimala värdena för dessa variabler genom att göra sida vid sida jämförelser av resultat uppnådda med olika värden. De indikatorer som var mest användbara var alla relativt enkla och baserade på de senaste händelserna på marknaden som jag handlade såväl som marknaderna för korrelerade värdepapper. Att göra exakta prisförskjutningar Med indikatorer som bara förutsagde en upp - eller nedprisrörelse var det inte tillräckligt. Jag behövde veta exakt hur mycket prisrörelsen förutspåddes av varje möjligt värde för varje indikator. Jag behövde en formel som skulle konvertera ett indikatorvärde till en prissats. För att uppnå detta spårade jag förutspådda prisflyttningar i 50 hinkar som berodde på det område som indikatorvärdet föll in. Detta gav unika förutsägelser för varje hink som jag då kunde grafera i Excel. Som du kan se ökar den förväntade prisförändringen som indikatorns värde ökar. Baserat på ett diagram som det här kunde jag göra en formel för att passa kurvan. I början gjorde jag denna ldquocurve fittingrdquo manuellt men jag skrev snart upp en kod för att automatisera denna process. Observera att inte alla indikatorkurvorna hade samma form. Observera också att skoporna var logaritmiska fördelade för att sprida datapunkterna jämnt. Slutligen notera att negativa indikatorvärden (och deras motsvarande nedåtgående prisspecifikationer) vändes och kombineras med de positiva värdena. (Min algoritm behandlas upp och ner exakt densamma.) Kombinera indikatorer för en enda förutsägelse En viktig sak att tänka på var att varje indikator inte var helt oberoende. Jag kunde inte bara lägga upp alla förutsägelser som varje indikator gjorde individuellt. Nyckeln var att räkna ut det extra prediktiva värdet som varje indikator hade bortom vad som redan förutspåddes. Detta var inte svårt att genomföra men det menade att om jag var ldquocurve fittingrdquo flera indikatorer samtidigt måste jag vara försiktig med att ändra en skulle påverka förutspårningarna av en annan. För att ldquocurve fitrdquo alla indikatorerna samtidigt ställer jag upp optimiseraren för att bara kliva 30 på vägen mot de nya förutsägelsekurvorna med varje pass. Med detta 30 hoppa fann jag att förutsägelsekurvorna skulle stabilisera inom några pass. Med varje indikator som nu ger oss itrsquos ytterligare prissättning kan jag helt enkelt lägga till dem för att producera en enda förutsägelse av var marknaden skulle vara på 10 sekunder. Varför förutse priserna är inte nog Du kanske tror att med denna kant på marknaden var jag gyllene. Men du måste komma ihåg att marknaden består av bud och erbjudanden - det är inte bara ett marknadspris. Framgång i högfrekvent handel kommer till att få bra priser och itrsquos inte så lätt. Följande faktorer gör det svårt att skapa ett lönsamt system: Med varje handel fick jag betala provisioner till både min mäklare och utbytet. Spridningen (skillnaden mellan högsta bud och lägsta erbjudande) innebar att om jag bara skulle köpa och sälja slumpmässigt Irsquod skulle förlora en massa pengar. Merparten av marknadsvolymen var andra bots som bara skulle utföra en handel med mig om de trodde att de hade någon statistisk kant. Att se ett erbjudande garanterade inte att jag kunde köpa den. När köpsordern kom till börsen var det mycket möjligt att det erbjudandet hade blivit avbrutet. Som en liten marknadsaktör fanns det inget sätt att jag kunde tävla om ensam hastighet. Bygga upp en fullständig handelssimulering Så jag hade en ram som gjorde det möjligt för mig att backtest och optimera indikatorer. Men jag var tvungen att gå bortom detta - jag behövde en ram som skulle göra det möjligt för mig att backtest och optimera ett fullständigt handelssystem en där jag skickade beställningar och kom i positioner. I detta fall optimerar Irsquod för total PampL och till viss del genomsnittlig PampL per handel. Detta skulle vara svårare och på något sätt omöjligt att modellera exakt men jag gjorde så gott som möjligt. Här är några av de problem som jag var tvungen att hantera: När en order skickades till marknaden i simulering var jag tvungen att modellera fördröjningstiden. Det faktum att mitt system såg ett erbjudande innebar inte att det kunde köpa det genast. Systemet skulle skicka ordern, vänta ca 20 millisekunder och då bara om erbjudandet var kvar där ansågs det som en exekverad handel. Detta var otillräckligt eftersom den verkliga fördröjningstiden var inkonsekvent och orapporterad. När jag ställde bud eller erbjudanden fick jag titta på handelsexekveringsflödet (tillhandahållet av API) och använda dem för att mäta när min order skulle ha blivit verkställd mot. För att göra det rätt var jag tvungen att spåra positionen för min order i köen. (Itrsquos ett första in-först-ut-system.) Återigen kunde jag inte göra det här perfekt men jag gjorde en bästa approximation. För att förfina min orderexekveringsimulering gjorde jag mina loggfiler från live trading via API: n och jämför dem med loggfiler som produceras genom simulerad handel från exakt samma tidsperiod. Jag kunde få min simulering till den punkten att det var ganska noggrant och för de delar som var omöjliga att modellera exakt så visade jag mig åtminstone att producera resultat som var statistiskt likartade (i de mätvärden som jag trodde var viktiga). Att göra lönsamma affärer Med en order simuleringsmodell på plats kunde jag nu skicka order i simuleringsläge och se en simulerad PampL. Men hur skulle mitt system veta när och var du ska köpa och sälja? Prissättningsutsikterna var en utgångspunkt men inte hela historien. Vad jag gjorde var att skapa ett poängsystem för var och en av fem prisnivåer på bud och erbjudande. Dessa inkluderade en nivå ovanför insidan bud (för en köporder) och en nivå under inbjudan (för en säljorder). Om poängen till en given prisnivå översteg ett visst tröskelvärde skulle det innebära att mitt system borde ha en aktiv erbjudande där - under tröskeln skulle eventuella aktiva order avbrytas. Baserat på detta var det inte ovanligt att mitt system skulle blinka ett bud på marknaden och sedan omedelbart avbryta det. (Även om jag försökte minimera detta eftersom det är irriterande för alla som tittar på skärmen med mänskliga ögon - inklusive mig.) Prisnivåvärdena beräknades utifrån följande faktorer: Prisförskjutningen (som vi diskuterade tidigare). Den aktuella prisnivån. (Inre nivåer menade att större prisförskjutningar krävdes.) Antalet kontrakt framför min order i köen. (Mindre var bättre.) Antalet kontrakt bakom min order i köen. (Mer var bättre.) I huvudsak tjänade dessa faktorer att identifiera ldquosaferdquo platser till budoffer. Prisförskjutningen i sig var inte tillräcklig eftersom den inte tog hänsyn till det faktum att jag inte fyllde automatiskt när jag skickade ett bud. Jag blev bara fylld om någon sålde till mig där. Verkligheten var att det faktum att någon säljer till mig till ett visst pris ändrade statistiska odds för handeln. De variabler som användes i detta steg var alla föremål för optimering. Detta gjordes på exakt samma sätt som jag optimerade variabler i prisflyttindikatorerna, utom i det här fallet optimerade jag för bottom line PampL. Vad mitt program ignoreras När vi handlar som människor har vi ofta kraftfulla känslor och fördomar som kan leda till mindre än optimala beslut. Klart vill jag inte kodifiera dessa fördomar. Här är några faktorer som mina system ignorerades: Det pris som en position infördes - I ett handelskontor är det ganska vanligt att höra konversation om det pris som någon är lång eller kort som om det skulle påverka deras framtida beslutsfattande. Även om detta har viss giltighet som en del av en strategi för riskreducering har det verkligen ingen betydelse för framtida händelser på marknaden. Därför ignorerade mitt program fullständigt denna information. Itrsquos samma koncept som ignorerar sjunkna kostnader. Går kort och lämnar en lång position - Vanligtvis skulle en näringsidkare ha olika kriterier som bestämmer var man ska sälja en lång position gentemot var man ska gå kort. Men från mitt algoritmperspektiv var det ingen anledning att göra skillnad. Om min algoritm förväntade sig en nedåtgående flyttförsäljning var en bra idé, oavsett om det för närvarande var länge, kort eller platt. En ldquodoubling uprdquo-strategi - Det här är en gemensam strategi där näringsidkare kommer att köpa mer lager i händelse av att den ursprungliga handeln går emot dem. Detta resulterar i att ditt genomsnittliga inköpspris är lägre och det betyder när (eller om) lagret vänder sig runt din saldo blir inställd för att göra pengarna tillbaka på nolltid. Enligt min åsikt är det här verkligen en hemsk strategi om inte din Warren Buffet. Yoursquore lurade på att du trivs bra eftersom de flesta av dina affärer blir vinnare. Problemet är när du förlorar dig förlorar stort. Den andra effekten är att det gör det svårt att bedöma om du verkligen har en kant på marknaden eller bara blir lycklig. Att kunna övervaka och bekräfta att mitt program faktiskt hade en kant var ett viktigt mål. Eftersom min algoritm fattade beslut på samma sätt, oavsett var det gick in i handeln eller om det för tillfället var långt eller kortt, var det ibland en del förlorande affärer (förutom några stora vinnande affärer). Men du borde inte tro att det inte fanns någon riskhantering. För att hantera risken förverkligade jag en maximal positionsstorlek på 2 kontrakt i taget och stötte ibland på högvolymdagar. Jag hade också en maximal daglig förlustgräns för att skydda mot eventuella oväntade marknadsförhållanden eller en bugg i min programvara. Dessa gränser har verkställts i min kod men också i backend genom min mäklare. Som det hände fick jag aldrig några stora problem. Köra algoritmen Från det ögonblick som jag började jobba på mitt program tog det mig ungefär 6 månader innan jag fick det till lönsamhet och började springa live. Även om det var rättvist, var det en betydande tid att lära sig ett nytt programmeringsspråk. När jag arbetade för att förbättra programmet såg jag ökad vinst för var och en av de närmaste fyra månaderna. Varje vecka skulle jag omskolera mitt system baserat på de föregående 4 veckorna värda data. Jag hittade detta slog rätt balans mellan att fånga nya marknadsbeteendeutvecklingar och att försäkra min algoritm hade tillräckligt med data för att skapa meningsfulla mönster. När träningen började ta mer och mer delade jag ut det så att det kunde utföras av 8 virtuella maskiner med Amazon EC2. Resultaten sammanfördes sedan på min lokala maskin. Höjdpunkten för min handel var oktober 2009 när jag gjorde nästan 100k. Efter detta fortsatte jag att spendera de närmaste fyra månaderna och försökte förbättra mitt program trots minskad vinst varje månad. Tyvärr vid denna punkt antar jag att Irsquod implementerade alla mina bästa idéer eftersom ingenting jag försökte verkade hjälpa till mycket. Med frustrationen att inte kunna göra förbättringar och inte ha en känsla av tillväxt började jag tänka på en ny riktning. Jag mailade 6 olika högfrekventa handelsföretag för att se om theyrsquod är intresserad av att köpa min programvara och anställa mig för att arbeta för dem. Ingen svarade. Jag hade några nya uppstartsidéer som jag ville jobba på så jag följde aldrig upp. UPPDATERING - Jag publicerade detta på Hacker News och det har fått mycket uppmärksamhet. Jag vill bara säga att jag inte förespråkar någon som försöker göra något så här själv nu. Du skulle behöva ett team av riktigt smarta människor med en rad erfarenheter för att ha något hopp om att tävla. Även när jag gjorde det tror jag att det var väldigt sällsynt för individer att uppnå framgång (även om jag hade hört talas om andra.) Det finns en kommentar högst upp på sidan som nämner manipulerad statistik och refererar till mig som en ldquoretail investorrdquo som quants skulle ldquogleefully välja offrdquo. Detta är en ganska olycklig kommentar thatrsquos helt enkelt inte baserad i verkligheten. Inställning som åt sidan therersquos några intressanta kommentarer: news. ycombinatoritemid4748624 UPDATE 2 - Irsquove publicerade en uppföljning FAQ som svarar på några vanliga frågor Irsquove mottagen från handlare om detta inlägg.
No comments:
Post a Comment