Trading System In C #


Handelssystem Vad är ett handelssystem. Ett handelssystem är helt enkelt en grupp specifika regler eller parametrar som bestämmer inmatnings - och utgångspunkter för en given egenkapacitet. Dessa punkter, så kallade signaler, markeras ofta på ett diagram i realtid och snabb Den omedelbara utförandet av en handel. Här är några av de vanligaste tekniska analysverktygen som används för att konstruera parametrarna för handelssystem. Medelvärdena MA. Relativ styrka. Bollinger Bands. Often, två eller flera av dessa indikatorer kommer att kombineras i Skapandet av en regel Till exempel använder MA crossover systemet två glidande medelparametrar på lång sikt och på kort sikt för att skapa en regelköp när kortsiktiga kors över lång sikt och säljer när motsatsen är Sant I andra fall använder en regel endast en indikator Till exempel kan ett system ha en regel som förbjuder köp, såvida inte den relativa styrkan överstiger en viss nivå Men det är en kombination av alla dessa typer av regler som gör ett handelssystem. MSFT Flyttande medelvärdeöverföringssystem med hjälp av 5 och 20 rörliga medelvärden. Eftersom framgången för det övergripande systemet beror på hur väl reglerna utför, spenderar systemhandlare tidoptimering för att hantera riskerna öka det uppnådda beloppet per handel och uppnå långsiktig stabilitet Detta görs genom att ändra olika parametrar inom varje regel. För att optimera MA crossover-systemet skulle en näringsidkare testa för att se vilka rörliga medelvärden som 10 dagar, 30 dagar osv fungerar bäst och sedan implementera dem. Men optimering kan förbättra resultaten Med endast en liten marginal - det är kombinationen av parametrar som används som i slutändan kommer att bestämma framgången för ett system. Advantager Så, varför kanske du vill anta ett handelssystem. Det tar alla känslor ur handel - Emotion är ofta citerat som en Av de enskilda investerarnas största brister Investerare som inte klarar av förluster andra gissar sina beslut och slutar att förlora pengar Genom att strikt följa ett förutvecklat system kan systemhandlare avstå från behovet Att fatta beslut när systemet är utvecklat och etablerat, handel är inte empirisk eftersom den är automatiserad. Genom att minska mänskliga ineffektiviteter kan systemhandlare öka vinsten. Det kan spara mycket tid. När ett effektivt system har utvecklats och optimerats lite För att ingen ansträngning krävs av näringsidkaren Datorer används ofta för att automatisera inte bara signalgenerationen utan också den faktiska handeln, så att näringsidkaren befrias från att spendera tid på analys och göra affärer. Det är enkelt om du låter andra göra det för Du - Behöver allt arbete för dig Vissa företag säljer handelssystem som de har utvecklat Andra företag kommer att ge dig de signaler som genereras av sina interna handelssystem för en månadsavgift Var försiktig, men - många av dessa företag är bedrägliga Ta en nära Titta på när resultaten de pratar om var tagna. Det är lätt att vinna tidigare. Leta efter företag som erbjuder en rättegång som låter dig testa systemet i realtid. Nackdelar Vi har tittat på de främsta fördelarna med att arbeta med ett handelssystem, men tillvägagångssättet har också dess nackdelar. Tradersystem är komplexa - det här är deras största nackdel. I utvecklingsstadierna kräver handelssystemen en solid förståelse av teknisk analys, förmågan att Göra empiriska beslut och grundlig kunskap om hur parametrar fungerar Men även om du inte utvecklar ditt eget handelssystem är det viktigt att känna till de parametrar som utgör det du använder. Att förvärva alla dessa färdigheter kan vara en utmaning. Du måste kunna göra realistiska antaganden och använda systemet effektivt. Systemhandlare måste göra realistiska antaganden om transaktionskostnader. Dessa kommer att bestå av mer än provisionskostnader. Skillnaden mellan genomförandepriset och påfyllningspriset ingår i transaktionskostnaderna Bear in Det är ofta omöjligt att testa systemen noggrant, vilket medför en viss osäkerhet när systemet lever. Problem som uppstår när Simulerade resultat skiljer sig mycket från det faktiska resultatet kallas slippa Effektivt att hantera slippa kan vara ett viktigt vägspärr för att implementera ett framgångsrikt system. Utveckling kan vara en tidskrävande uppgift - Mycket tid kan gå in på att utveckla ett handelssystem för att få det att springa Och fungera på rätt sätt Att avgöra ett systemkoncept och sätta det i praktiken innebär gott om test, vilket tar ett tag Historisk backtesting tar några minuter, men det är inte tillräckligt med backtestning. System måste också handlas i realtid för att säkerställa tillförlitligheten Slutligen Kan slippa göra det möjligt för handlare att göra flera ändringar av sina system, även efter installationen. De arbetar Det finns ett antal internet-bedrägerier relaterade till systemhandel, men det finns också många legitima, framgångsrika system. Kanske är det mest kända exemplet det som utvecklats och implementerats Av Richard Dennis och Bill Eckhardt, som är Original Turtle Traders 1983, hade dessa två tvivel om huruvida en bra t Rader är född eller skapad Så tog de några människor utanför gatan och utbildade dem baserat på deras nu kända Turtle Trading System De samlade 13 handlare och slutade göra 80 årligen de närmaste fyra åren Bill Eckhardt sa en gång, vem som helst med genomsnittlig intelligens Kan lära sig att handla Detta är inte raketvetenskap Men det är mycket lättare att lära sig vad du ska göra i handel än att göra det Handelssystemen blir alltmer populära bland professionella handlare, fondförvaltare och enskilda investerare - kanske är det här en Testamente för hur väl de jobbar. Att ta itu med bedrägerier När man vill köpa ett handelssystem kan det vara svårt att hitta ett pålitligt företag Men de flesta bedrägerier kan ses av sunt förnuft. Till exempel är en garanti på 2500 årligen klart skandalös som den lovar Att med bara 5000 kunde du göra 125 000 på ett år och sedan genom att sammansätta i fem år, 48 828 125 000 Om det var sant, skulle inte skaparen handla sin väg att bli bi Lionaire. Andra erbjudanden är dock svårare att avkoda, men ett vanligt sätt att undvika bedrägerier är att söka efter system som erbjuder en gratis provning. Således kan du testa systemet själv. Blind aldrig lita på att verksamheten skryter om. Det är också en Bra idé att kontakta andra som har använt systemet för att se om de kan bekräfta sin tillförlitlighet och lönsamhet. Slutsats Att utveckla ett effektivt handelssystem är inte på något sätt en enkel uppgift. Det kräver en god förståelse av de många tillgängliga parametrarna, förmågan att göra Realistiska antaganden och tid och dedikation att utveckla systemet Men om det utvecklas och distribueras på rätt sätt kan ett handelssystem ge många fördelar. Det kan öka effektiviteten, ledig tid och, viktigast av allt, öka din vinst. Trafiksystem Designa ditt system - Del 1.En föregående del av denna handledning tittade på de element som utgör ett handelssystem och diskuterade fördelarna och nackdelarna med att använda ett sådant system i en live tr Ademmiljö I det här avsnittet bygger vi vidare på den kunskapen genom att undersöka vilka marknader som är särskilt lämpade för systemhandel. Vi tar då en djupare titt på de olika genren av handelssystem. Försäljning i olika marknader. Marknaden är förmodligen den vanligaste marknaden för handel, särskilt bland nybörjare. På den här arenan dominerar stora aktörer som Warren Buffett och Merrill Lynch, och traditionella värde - och tillväxtinvesteringsstrategier är överlägset vanligaste. Dock har många institutioner investerat betydligt i Design, utveckling och genomförande av handelssystem Individuella investerare går med i denna trend, men långsamt. Det är några viktiga faktorer att komma ihåg när man använder handelssystem på aktiemarknaderna. Det stora antalet tillgängliga aktier gör det möjligt för handlare att testa system på många olika Typer av aktier - allt från extremt flyktiga OTC-lager till icke-flyktiga blue chips. Effektiviteten hos Handelssystem kan begränsas av vissa aktiers låga likviditet, särskilt OTC och pink sheet-emissioner kan äta i vinster genererade av framgångsrika affärer och kan öka förluster OTC och rosa arkaktier uppstår ofta extra provisionsavgifter. De viktigaste handelssystemen som används är de Som söker värde - det vill säga system som använder olika parametrar för att avgöra huruvida en säkerhet är undervärderad jämfört med tidigare prestanda, dess kamrater eller marknaden i allmänhet. Forex Exchange Markets Valutamarknaden eller forex är den största och mest Världens likvida marknad Världens regeringar, banker och andra stora institutioner handlar biljoner dollar på valutamarknaden varje dag Flertalet institutionella handlare på valutan är beroende av handelssystemen Detsamma gäller för individer i valutan, men vissa handelsbaserade På ekonomiska rapporter eller ränteutbetalningar. Här är några viktiga faktorer att komma ihåg när man använder handelssystem på valutamarknaden. Likviditeten i På grund av den stora volymen gör handelssystemen mer exakta och effektiva. Det finns inga provisioner på den här marknaden. Det sprider sig därför. Därför är det mycket lättare att göra många transaktioner utan att öka kostnadsbesparingarna till antalet aktier eller råvaror som finns tillgängliga, Antalet valutor att handla är begränsat Men på grund av tillgången på exotiska valutapar - det vill säga valutor från mindre länder - är volatilitetsintervallet inte nödvändigtvis begränsat. De viktigaste handelssystemen som används i forex är de som följer trenderna a Populärt säga på marknaden är trenden är din vän eller system som köper eller säljer på breakouts Detta beror på att ekonomiska indikatorer ofta orsakar stora prisrörelser på en gång. Futures Equity, Forex och råvarumarknader erbjuder alla futures trading Detta är en populär Fordon för systemhandel på grund av den ökade mängden hävstång som finns och ökad likviditet och volatilitet. Dessa faktorer kan dock skära båda sätten de ca N antingen förstärka dina vinster eller förstärka dina förluster Av denna anledning är användningen av terminer vanligtvis reserverad för avancerade enskilda och institutionella systemhandlare. Det beror på att handelssystem som kan kapitalisera på terminsmarknaden kräver mycket större anpassning, använder mer avancerade indikatorer och tar Mycket längre att utveckla Så, vilket är bäst Det är upp till den enskilda investeraren att bestämma vilken marknad som passar bäst för systemhandeln - var och en har sina egna fördelar och nackdelar. De flesta människor är mer bekanta med aktiemarknaderna och denna förtrogenhet gör att man utvecklar en Handelssystem lättare Forex anses emellertid vara den överlägsen plattformen för att driva handelssystem - särskilt bland mer erfarna handlare. Om en näringsidkare bestämmer sig för att kapitalisera på ökad hävstångseffekt och volatilitet är terminsalternativet alltid öppet. Slutligen ligger valet i Händerna på systemutvecklaren. Typ av handelssystem. Trend-Följande system Den vanligaste metoden av systemhandel är trend-efterföljande system I sin mest grundläggande form väntar detta system helt enkelt på en betydande prisrörelse, köper eller säljer i den riktningen. Den här typen av systembanker hoppas att dessa prisrörelser kommer att behålla trenden. Genomsnittliga system Används ofta i teknisk analys är ett rörligt medelvärde en indikator som helt enkelt visar genomsnittspriset på ett lager över en tidsperiod. Trenden med trender härrör från denna mätning. Den vanligaste sätten att bestämma inmatning och utträde är en crossover. Den logiska bakom detta är enkelt en ny trend upprättas när priset sjunker över eller under dess historiska prisgenomsnittstrenden Här är ett diagram som pryder både prisblå linjen och den 20-dagars MA röda raden av IBM. Breakout Systems Det grundläggande konceptet bakom denna typ av systemet liknar det för ett glidande medelvärde. Tanken är att när en ny hög eller låg är etablerad, är prisrörelsen sannolikt att fortsätta i bromsriktningen Eakout En indikator som kan användas vid bestämning av breakouts är ett enkelt Bollinger Band-överlag Bollinger Bands visar medelvärden av höga och låga priser och breakouts uppstår när priset möter kanterna på banden. Här är ett diagram som prissätter pris blå linje och Bollinger Bands grå Linjer av Microsoft. Nackdelar med Trend-Följande Systems. Empirical Decision-Making Required - Vid bestämning av trender finns det alltid ett empiriskt element för att överväga varaktigheten av den historiska trenden. Till exempel kan det glidande genomsnittet vara de senaste 20 dagarna eller för Under de senaste fem åren måste utvecklaren bestämma vilken som är bäst för systemet. Andra faktorer som ska bestämmas är de genomsnittliga höjderna och nedgångarna i brytningssystem. Lagring av naturen - Flyttande medelvärden och brytningssystem kommer alltid att ligga. Med andra ord kan de Aldrig träffa exakt toppen eller botten av en trend Detta leder oundvikligen till förverkande av potentiella vinster, vilket ibland kan vara betydande. Växlande effekt - Bland marknaden krafter som skadar framgången för trend-efter-system, är detta en av de vanligaste. Whipsaw-effekten uppträder när det rörliga genomsnittsvärdet genererar en falsk signal - det vill säga när genomsnittet sjunker precis i intervallet, så vrids plötsligt riktningen. Det kan leda till enorma förluster om inte effektiva stoppförluster och riskhanteringstekniker används. Säkert marknader - Trend-efter-system är av naturen kuna att tjäna pengar endast på marknader som faktiskt tränar. Men marknaderna rör sig också i sidled inom ett visst område under en längre tidsperiod. Extreme Volatility May Occur - Ibland kan trend-efterföljande system uppleva viss extrema volatilitet, men näringsidkaren måste hålla sig till sitt system. Oförmågan att göra det kommer att leda till ett försäkrat misslyckande. Countertrend Systems I grund och botten målet med motströmsystemet är att köpa på lägst lågt och sälja högst högt. Huvudskillnaden mellan detta och det trendföljande systemet är att co Untertrend-systemet är inte självkorrigerande Med andra ord finns det ingen bestämd tid för att gå ur positioner och detta leder till obegränsad nackdel. Typ av Countertrend-system Många olika systemstyper betraktas motströmsystem. Tanken här är att köpa när momentum i en riktning börjar blekna Detta beräknas oftast med hjälp av oscillatorer Exempelvis kan en signal genereras när stokastik eller andra relativa styrindikatorer faller under vissa punkter. Det finns andra typer av motsträngshandeln, men alla delar samma grundläggande mål - att köpa låga och sälja höga. Nackdelar med Countertrend Following Systems. E mpirisk beslutsfattande krävs - Till exempel, en av de faktorer som systemutvecklaren måste bestämma är punkterna där relativa styrindikatorer svävar. Extreme Volatility May Occur - Dessa system kan också uppleva viss extrem volatilitet och en oförmåga att hålla fast vid systemet trots att denna volatilitet kommer att resultera i försäkrat misslyckande. Otillräcklig nackdel - Som tidigare nämnts finns det obegränsad nackdel, eftersom systemet inte är självkorrigerande. Det finns ingen bestämd tid att avsluta positioner. Slutsats De viktigaste marknaderna för vilka handelssystemen är lämpliga är aktie-, valutamarknaden och terminsmarknaden Var och en av dessa marknader har sina fördelar och nackdelar. De två viktigaste genren i handelssystem är trenden och motverkningssystemen. Trots skillnaderna kräver båda typerna av system i utvecklingsstadierna empirisk beslutsfattande från utvecklarens sida. , dessa system är föremål för extrem volatilitet och det kan kräva en del uthållighet - det är viktigt att systemhandlaren håller fast vid sitt system under dessa tider. I följande avdelning kommer vi att titta närmare på hur man utformar ett handelssystem och diskutera en del av programvaran som systemhandlare använder för att göra sina liv enklare. Mest programmerande språk för algoritmiska handelssystem. En av t de vanligaste frågorna jag får i QS-brevlådan är Vad är det bästa programmeringsspråket för algoritmisk handel Det korta svaret är att det inte finns något bra språk Strategiparametrar, prestanda, modularitet, utveckling, elasticitet och kostnad måste alla övervägas. de nödvändiga komponenterna i en algoritmisk handelssystemarkitektur och hur beslut om implementering påverkar språkvalet. Först kommer huvudkomponenterna i ett algoritmiskt handelssystem att övervägas, såsom forskningsverktygen, portföljoptimeraren, riskhanteraren och exekveringsmotorn. olika handelsstrategier kommer att undersökas och hur de påverkar systemets utformning. I synnerhet kommer frekvensen av handel och den sannolika handelsvolymen att diskuteras. När handelsstrategin har valts är det nödvändigt att arkitektera hela systemet. Detta inkluderar val av hårdvaran, operativsystemet s och systemets elasticitet mot sällsynta, potentiella katastrofala händelser Medan arkitekturen övervägs måste man ta hänsyn till prestanda - både för forskningsverktygen och för levande exekveringsmiljö. Vad är handelssystemet som försöker göra. Innan man bestämmer sig för det bästa språket att skriva ett automatiserat handelssystem är det nödvändigt att definiera kraven Om systemet ska vara rent exekveringsbaserat Kommer systemet att kräva en riskhantering eller portföljbyggnadsmodul Ska systemet kräva en högpresterande backtester För de flesta strategier kan handelssystemet delas upp i två kategorier Forskning och signalgenerering. Forskning handlar om utvärdering av en strategisk prestanda över historiska data Processen att utvärdera en handelsstrategi över tidigare marknadsdata kallas backtesting. Datastorleken och den algoritmiska komplexiteten kommer att ha stor inverkan på beräkningsintensiteten hos Backtester CPU-hastighet och samtidighet är ofta de begränsande faktorerna vid optimering av researc h-exekveringshastigheten. Signalgenerering handlar om att generera en uppsättning handelssignaler från en algoritm och skicka sådana order till marknaden, vanligtvis via en mäklare. För vissa strategier krävs en hög prestationsnivå. IO-problem som nätverksbandbredd och latens är ofta begränsningsfaktorn för optimering av exekveringssystem Således kan valet av språk för varje komponent i hela ditt system vara ganska annorlunda. Typ, frekvens och volym av strategi. Den typ av algoritmisk strategi som används kommer att ha en betydande inverkan på systemets utformning. kommer att vara nödvändigt för att överväga att marknaderna handlas, anslutningen till externa datasäljare, frekvensen och volymen av strategin, avvägningen mellan enkel utveckling och prestandaoptimering, samt vilken anpassad hårdvara som helst, inklusive samplade anpassade servrar , GPU eller FPGA som kan vara nödvändiga. Teknologierna för en lågfrekvent amerikanska aktiestrategi kommer att vara väldigt annorlunda än de av en högfrekvent statistisk arbitrage strategi handel på terminsmarknaden Före språkvalet måste många dataleverantörer utvärderas som hänför sig till en strategi för hand. Det kommer att vara nödvändigt att överväga anslutning till leverantören, strukturen för alla API, aktualitet av data, lagringskrav och elasticitet i ansiktet av en leverantör som går offline Det är också klokt att ha snabb tillgång till flera leverantörer Olika instrument har alla sina egna lagringsegenskaper, exempel på vilka inkluderar flera tickersymboler för aktier och utgångsdatum för futures för att inte nämna några specifika OTC-data Detta måste ingå i plattformens design. Frekvensen av strategin är sannolikt en av de största drivkrafterna för hur teknikstacken kommer att definieras. Strategier som använder data oftare än minutivt eller i andra fall behöver betydande hänsyn till prestanda. En strategi som överstiger andra stavar, dvs kryssningsdata leder till en prestationsdriven design som primärt krav För högfrekventa strategier måste en betydande mängd marknadsdata lagras och utvärderas Programvara som HDF5 eller kdb används vanligtvis för dessa roller. För att kunna bearbeta de omfattande datamängderna som behövs för HFT-applikationer, en omfattande optimerad backtester och exekveringssystem måste användas CC möjligen med vissa assembler är sannolikt den starkaste språkkandidaten Ultrahögfrekvensstrategier kommer nästan säkert att kräva anpassad hårdvara som FPGA, utbyte samlokalisering och kärnanätverksgränssnittstunning. Resursystem. Resursystem involverar vanligtvis en blandning av interaktiv utveckling och automatiserad skript. Den tidigare sker ofta inom en IDE som Visual Studio, MatLab eller R Studio. Den senare innefattar omfattande numeriska beräkningar över många parametrar och datapunkter. Detta leder till ett språkval som ger en enkel miljö till testkod, men ger också tillräcklig prestanda för att utvärdera te-strategier över flera parameterdimensioner. Typiska IDEs i detta utrymme inkluderar Microsoft Visual CC, som innehåller omfattande felsökningsverktyg, kodfärdighetsfunktioner via Intellisense och enkla översikter över hela projektstapeln via databasen ORM, LINQ MatLab som är konstruerad för omfattande numerisk linjär algebra och vektoriserade operationer, men på ett interaktivt konsol sätt R Studio som sveper R-statistikkonsolen i en fulländad IDE Eclipse IDE för Linux Java och C och semi-proprietary IDEs som Enthought Canopy for Python, som inkluderar databaser för databehandling som NumPy SciPy scikit-lär och pandor i en enda interaktiv konsolmiljö. För numerisk backtesting är alla ovanstående språk lämpliga, även om det inte är nödvändigt att använda ett GUI IDE, eftersom koden kommer att utföras i bakgrunden. i detta skede är det av körningshastighet Ett sammanställt språk som C är ofta användbart om ba cktesting parameter dimensioner är stora Kom ihåg att det är nödvändigt att vara försiktig med sådana system om så är fallet. Interpreterade språk som Python använder ofta högpresterande bibliotek som NumPy pandor för backtesting-steget, för att upprätthålla en rimlig grad av konkurrenskraft med kompilerade ekvivalenter I slutändan kommer det språk som valts för backtesting att bestämmas av specifika algoritmiska behov samt utbudet av bibliotek tillgängliga på språket mer nedan. Men det språk som används för backtester och forskningsmiljöer kan vara helt oberoende av dem som används i portföljkonstruktion, riskhantering och exekveringskomponenter, vilket kommer att ses. Portföljkonstruktion och riskhantering. Portföljkonstruktion och riskhanteringskomponenter är ofta förbisedda av detaljhandelalgoritmiska handlare Detta är nästan alltid ett misstag Dessa verktyg tillhandahåller mekanismen med vilket kapital kommer att bevaras De försöker inte bara att lura eliminera antalet riskabla satsningar, men minimera även churnen i branschen, vilket minskar transaktionskostnaderna. Sofistikerade versioner av dessa komponenter kan få en betydande inverkan på lönsamhetens kvalitet och konsistens Det är enkelt att skapa en stabil strategi som portföljkonstruktionen mekanism och riskhanterare kan enkelt modifieras för att hantera flera system Således bör de betraktas som väsentliga komponenter vid början av utformningen av ett algoritmiskt handelssystem. Syftet med portföljkonstruktionssystemet är att ta en uppsättning önskvärda affärer och producera uppsättningen av verkliga verksamheter som minimerar klyftan, behåller exponeringar mot olika faktorer som sektorer, tillgångsklasser, volatilitet mm och optimerar fördelningen av kapital till olika strategier i en portfölj. Portföljkonstruktion reduceras ofta till ett linjärt algebraproblem, såsom en matrisfaktorisering och därmed prestanda är högt beroende av effektiviteten hos den numeriska linjära algebraen imp lementation tillgänglig Gemensamma bibliotek innehåller uBLAS LAPACK och NAG för C MatLab har också omfattande optimerade matrisoperationer Python använder NumPy SciPy för sådana beräkningar En ofta återbalanserad portfölj kräver ett kompilerat och väloptimerat matrisbibliotek för att utföra detta steg för att inte flaskhalsa Riskostyrning är en annan extremt viktig del av ett algoritmiskt handelssystem. Risken kan komma i många former. Ökad volatilitet, även om det här kan ses som önskvärt för vissa strategier, ökad korrelation mellan tillgångsklasser, motpartsstandard, servernsavbrott, svarta svan händelser och oupptäckta fel i handelskoden för att nämna några. Risk ledningskomponenter försöker förutse effekterna av överdriven volatilitet och korrelation mellan tillgångsklasser och deras efterföljande effekter s på handelskapital. Detta minskar ofta till en uppsättning statistiska beräkningar som Monte Carlo stresstester Detta är väldigt lik den beräkningsmässiga behov av en derivat prissättning motor och som sådan kommer att vara CPU-bundna Dessa simuleringar är mycket parallelliserbara se nedan och i viss mån är det möjligt att kasta hårdvara på problemet. Execution Systems. The utförandet av utförandet systemet är att ta emot filtrerade handelssignaler från portföljkonstruktion och riskhanteringskomponenter och vidarebefordra dem till mäklare eller annat sätt för marknadstillträde. För de flesta detaljhandeln algoritmiska handelsstrategier innebär detta en API eller FIX-anslutning till en mäklare såsom Interactive Brokers. De primära övervägandena när Att bestämma ett språk inkluderar API: s kvalitet, tillgänglighet för språkpaket för ett API, exekveringsfrekvens och förväntad glidning. Kvaliteten på API: n refererar till hur väl dokumenterad det är, vilken typ av prestanda det ger, oavsett om det behöver fristående programvara att nås eller om en gateway kan etableras på ett huvudlöst sätt, dvs ingen GUI. När det gäller interaktiva mäklare, handlar Trader W orkStation-verktyget måste köras i en GUI-miljö för att kunna komma åt deras API. Jag hade en gång varit tvungen att installera en Desktop Ubuntu-utgåva på en Amazon Cloud-server för att få tillgång till Interactive Brokers på distans, helt av den anledningen. De flesta API-er kommer att ge en C och eller Java gränssnitt Det är vanligtvis upp till samhället att utveckla språkspecifika wrappers för C, Python, R, Excel och MatLab. Observera att med varje extra plugin som används speciellt API wrappers finns det utrymme för buggar att krypa in i systemet. Testa alltid pluggar av detta slag och se till att de hålls aktivt. En värdefull mätare är att se hur många nya uppdateringar av en kodbas har gjorts under de senaste månaderna. Utökningsfrekvensen är av största vikt i körningsalgoritmen. Observera att hundratals beställningar kan skickas varje minut och som sådan prestanda är kritisk Slippage kommer att uppstå genom ett dåligt fungerande exekveringssystem och detta kommer att ha en dramatisk inverkan på lönsamheten. Statiskt typade språk se nedan h eftersom C Java generellt är optimalt för körning men det finns ett kompromiss i utvecklingstid, testning och enkel underhåll. Dynamiskt typade språk, som Python och Perl, är nu i allmänhet snabba nog. Se alltid till att komponenterna är konstruerade i en modulär mode se nedan så att de kan bytas ut som systemet vågar. Arkitekturplanering och utvecklingsprocess. Komponenterna i ett handelssystem, dess frekvens - och volymkrav har diskuterats ovan men systeminfrastruktur har ännu inte täcks. De fungerar som en näringsidkare eller arbeta i en liten fond kommer sannolikt att ha på sig många hattar. Det kommer att vara nödvändigt att täcka alfamodellen, riskhanterings - och exekveringsparametrarna och även den slutliga implementeringen av systemet. Innan du deltar i specifika språk utformar du ett optimalt Systemarkitektur kommer att diskuteras. Avskiljning av oro. En av de viktigaste besluten som måste fattas i början är hur man separerar bekymmerna för ett handelssystem I mjukvaruutveckling innebär detta i huvudsak hur man bryter upp de olika aspekterna av handelssystemet i separata modulära komponenter. Genom att exponera gränssnitt för var och en av komponenterna är det enkelt att byta ut delar av systemet för andra versioner som stöder prestanda , tillförlitlighet eller underhåll utan att ändra externt beroendeskod Det här är den bästa praxisen för sådana system För strategier vid lägre frekvenser rekommenderas sådana metoder. För ultrahögfrekvenshandel kan regelboken ignoreras på bekostnad av att tweaking systemet för ännu mer prestanda Ett mer tätt kopplat system kan vara önskvärt. Att skapa en komponentkarta av ett algoritmiskt handelssystem är värt en artikel i sig. Det är dock ett optimalt tillvägagångssätt att se till att det finns separata komponenter för de historiska och realtidsdataindata, data lagring, dataåtkomst API, backtester, strategiparametrar, portföljkonstruktion, riskhantering och automatiserad körning s ystems. For exempelvis om den datalagring som används är för närvarande underpresterande, även vid betydande optimeringsnivåer, kan den bytas ut med minimala omskrivningar till datainnehållet eller dataåtkomst-API. Så långt som backtester och efterföljande komponenter berörs, Det finns ingen skillnad. En annan fördel med separerade komponenter är att det tillåter en mängd olika programmeringsspråk att användas i det övergripande systemet. Det finns ingen anledning att vara begränsad till ett enda språk om kommunikationsmetoden för komponenterna är språkoberoende fallet om de kommunicerar via TCP IP, ZeroMQ eller något annat språkoberoende protokoll. Som ett konkret exempel, överväga att ett backtesting system skrivs i C för nummerbristande prestanda, medan portföljhanteraren och exekveringssystemen skrivs in Python använder SciPy och IBPy. Performance Considerations. Performance är ett viktigt övervägande för de flesta handelsstrategier För högre frekvensstrate Gies det är den viktigaste faktorn Prestanda täcker ett brett spektrum av problem, som algoritmisk exekveringshastighet, nätverks latens, bandbredd, data IO, parallell parallellitet och skalning. Var och en av dessa områden omfattas individuellt av stora läroböcker, så den här artikeln kommer bara att skrapa ytan av varje ämne Arkitektur och språkval kommer nu att diskuteras med avseende på deras effekter på prestanda. Den rådande visdomen som framgår av Donald Knuth, en av datorerna för datavetenskap, är att för tidig optimering är grunden till allt ont. Det här är nästan alltid fallet - förutom när man bygger en högfrekvent handelsalgoritm För dem som är intresserade av lägre frekvensstrategier är ett gemensamt förhållningssätt att bygga ett system på det enklaste sättet och bara optimera när flaskhalsar börjar visas. Profilverktyg används för att bestämma där flaskhalsar uppstår Profiler kan göras för alla ovanstående faktorer, antingen i en MS Windows - eller Linux-miljö. Det finns många operativsystem och språkverktyg som finns tillgängliga, samt tredje part verktyg Språkvalet kommer nu att diskuteras i samband med performance. C, Java, Python, R och MatLab innehåller alla högpresterande bibliotek antingen som en del av deras standard eller externt för grundläggande datastruktur och algoritmiska arbeten C-fartyg med standardmallabiblioteket medan Python innehåller NumPy SciPy Vanliga matematiska uppgifter finns i dessa bibliotek och det är sällan bra att skriva en ny implementering. Ett undantag är om mycket anpassad hårdvaruarkitektur krävs och en algoritm gör omfattande användning av egna extensions såsom anpassade cachar. Men ofta återuppfinning av hjulavfallet som skulle kunna användas bättre utveckla och optimera andra delar av handelsinfrastrukturen. Utvecklingstiden är extremt dyrbar, särskilt i samband med sål developers. Latency är ofta ett problem med exekveringssystemet eftersom forskningsverktygen oftast är placerade d på samma maskin För den förra kan latens uppträda vid flera punkter längs exekveringsvägen Databaser måste höras disknätets latentitet, signaler måste genereras operativsystem, kernal messaging latens, handelssignaler som skickas NIC-latens och orderbehandlade växlingssystemens interna latens . För högre frekvensoperationer är det nödvändigt att bli noggrant bekant med kärnoptimering samt optimering av nätverksöverföring Detta är ett djupt område och ligger betydligt längre än artikelns räckvidd men om en UHFT-algoritm är önskad, var då medveten om djupet av Krav som krävs. Caching är mycket användbar i verktygsverktyget för en kvantitativ handelsutvecklare. Caching hänvisar till begreppet lagring av ofta åtkomlig data på ett sätt som möjliggör högre prestanda, på bekostnad av dataens potentiella stavhet. Ett vanligt fall uppstår i webbutveckling när du tar data från en diskbaserad relationsdatabas och lägger den i minnet. Eventuellt efterföljande förfrågningar om uppgifterna behöver inte slå databasen och så kan prestationsvinsterna vara betydande. För handelssituationer kan caching vara mycket fördelaktig. Till exempel kan nuvarande status för en strategiportfölj lagras i en cache tills den är ombalanserad, så att listan behöver inte regenereras på varje slinga i handelsalgoritmen. Sådan regenerering är sannolikt att vara en hög CPU - eller disk-IO-operation. Dock är caching inte utan sina egna problem. Regenerering av cacherdata på en gång, på grund av volatilie Cache-lagringens natur kan ge en betydande efterfrågan på infrastruktur. Ett annat problem är hundpiling där flera generationer av en ny cache-kopia utförs under extremt hög belastning, vilket leder till kaskadfel. Dynamisk minnesallokering är en dyr operation vid programkörning Det är absolut nödvändigt att applikationer med högre prestandahandel är väl medvetna om hur minnet fördelas och fördelas under programflödet. Nya språkstandarder som sådana som Java, C och Python utför alla automatiska sopor som hänför sig till deallokering av dynamiskt tilldelat minne när objekt går ur räckvidd. Säkerhetssamling är extremt användbar under utveckling eftersom det minskar fel och hjälpmedelläsbarhet. Det är emellertid ofta suboptimalt för vissa högfrekventa handelsstrategier Anpassad skräpsamling är ofta önskad för dessa fall I Java, till exempel genom att ställa in sopkollektor och högkonfiguration, är det möjligt att skaffa hög prestanda för HFT-strategier. C tillhandahåller inte en inbyggd sophämtare och så det är nödvändig för att hantera all minnesallokering avallokering som en del av ett objekt s implementering Medan potentiellt felproblem kan leda till danglingpekare är det extremt användbart att ha finkorrigerad kontroll över hur föremål förekommer i högen för vissa applikationer. När du väljer ett språk, se till att att studera hur sopsamlare fungerar och om det kan modifieras för att optimera för en viss användningsfall. Många operationer i algoritmiska handelssystem är acceptabla för parallellisering. Det här avser begreppet att utföra flera programmatiska operationer samtidigt, dvs parallellt. Så kallade embarassingly parallella algoritmer inkluderar steg som kan beräknas helt oberoende av andra steg Vissa statistiska operationer, som Monte Carlo-simuleringar, är ett bra exempel på embarassingly parallella algoritmer eftersom varje slumpmässig teckning och efterföljande banoperation kan beräknas utan kännedom om andra banor. Övriga algoritmer är endast delvis parallella. Fluiddynamik simuleringar är ett exempel där Beräkningsdomänen kan delas upp men i slutändan måste dessa domäner kommunicera med varandra och således är operationerna delvis sekventiella. Parallelliserbara algoritmer är föremål för Amdahls lag som ger en teoretisk övre gräns för prestationsökningen av en parallelliserad algoritm när den är underkastad N separat bearbetar t. ex. på en CPU-kärna eller tråd. Parallellisering har blivit allt viktigare som ett sätt att optimera eftersom processorns klockhastigheter har stagnerat, eftersom nyare processorer innehåller många kärnor för att utföra parallella beräkningar. Ökningen av konsumentgrafikhårdvara som främst för videospel har lett till utvecklingen av grafisk Processenheter GPU: er, som innehåller hundratals kärnor för mycket samtidiga operationer. Sådana GPU: er är nu mycket överkomliga. Högnivåramar, till exempel Nvidia s CUDA, har lett till omfattande adoption i akademier och finanser. Såsom GPU-hårdvara är i allmänhet endast lämplig för forskningsaspekten av kvantitativ finansiering, medan andra mer specialiserade hårdvaror inklusive Fältprogrammerbara Gate Arrays - FPGAs används för U HFT Numera stöder de flesta moderna långauges en grad av samtidighet multithreading Således är det enkelt att optimera en backtester eftersom alla beräkningar är generellt oberoende av others. Scaling i mjukvaruutveckling och verksamhet hänvisar för systemets förmåga att hantera konsekvent ökande belastningar i form av större förfrågningar, högre processoranvändning och mer minnesallokering. I algoritmisk handel kan en strategi skala om den kan acceptera större mängder kapital och fortfarande ge konsekvent avkastning. Handelstekniken stapelvågar om det kan tåla större handelsvolymer och ökad latens utan flaskhalsning. Även om system måste utformas för att skala, är det ofta svårt att förutsäga i förväg där en flaskhals kommer att uppstå. Fast loggning, testning, profilering och övervakning kommer att bidra till att en system att skala Språk själva beskrivs ofta som oskalbart Detta är vanligen ett resultat av felaktig information, snarare än hårdfakta Det är den totala tekniken stacken som bör fastställas för skalbarhet, inte språket. Tydligen vissa språk har större prestanda än andra i synnerhet användarfall , men ett språk är aldrig bättre än någon annan i alla avseenden. Ett sätt att managera För att ytterligare införa förmågan att hantera spikar i systemet, dvs plötslig volatilitet som utlöser en flotta affärer, är det användbart att skapa en meddelandekurarkitektur. Det innebär helt enkelt att placera ett meddelandekössystem mellan komponenter så att beställningar staplas upp om en viss komponent inte kan hantera många förfrågningar. I stället för att förfrågningar förloras hålls de helt enkelt i en stapel tills meddelandet hanteras. Detta är särskilt användbart för att skicka handlar till en exekveringsmotor. Om motorn lider under tung latens då kommer det att säkerhetskopiera affärer En kö mellan handelssignalgenerern och körnings API kommer att lindra denna fråga på bekostnad av potentiell handelsladdning. En väl respekterad öppen källkodsmeddelare är RabbitMQ. Hardware och operativsystem. Hårdvaran som kör din strategi kan ha en betydande inverkan på lönsamheten för din algoritm. Detta är inte ett problem begränsat till hög f fordonshandlare antingen Ett dåligt val i hårdvaru och operativsystem kan leda till maskinkrasch eller omstart vid det mest oupphörliga ögonblicket Således är det nödvändigt att överväga var din ansökan kommer att ligga. Valet är generellt mellan en personlig skrivbordsmaskin, en fjärrserver, en molnleverantör eller en utbytessamlokaliserad server. Dessktopmaskiner är enkla att installera och administrera, särskilt med nyare användarvänliga operativsystem som Windows 7 8, Mac OSX och Ubuntu Desktop-system har vissa signifikanta nackdelar. Det främsta är att versioner av operativsystem som är designade för skrivbordsmaskiner kommer sannolikt att kräva omstart av patching och ofta i värsta tider. De utnyttjar också mer beräkningsresurser i kraft av att man behöver grafiskt användargränssnitt. Användning av hårdvara i ett hem eller en lokal kontorsmiljö kan leda till internetanslutning och strömupptidsproblem Den största fördelen med ett skrivbordssystem är den betydande beräkningshästen makt kan köpas för bråkdelen av kostnaden för en fjärrstyrd dedikerad server eller ett molnbaserat system med jämförbar hastighet. En dedikerad server eller molnbaserad maskin, som ofta är dyrare än ett skrivbordsmöjlighet, möjliggör större infrastruktur för redundans, t. ex. automatiserade datasäkerhetskopiering, möjligheten att mer enkelt försäkra upptid och fjärrövervakning. De är svårare att administrera eftersom de kräver möjligheten att använda fjärranslutna inloggningsmöjligheter i operativsystemet. I Windows är det vanligtvis via GUI Remote Desktop Protocol RDP I Unix-baserade system kommandoraden Secure SHell SSH används Unix-baserad serverinfrastruktur är nästan alltid kommandoradsbaserad, vilket gör att GUI-baserade programmeringsverktyg som MatLab eller Excel omedelbart inte kan användas. En samlokaliserad server, som uttrycket används på kapitalmarknaderna är helt enkelt en dedikerad server som ligger inom en utbyte för att minska latens för handelsalgoritmen. Detta är absolut nödvändigt f eller vissa högfristiga handelsstrategier som bygger på låg latens för att generera alfa. Den sista aspekten till hårdvaruval och valet av programmeringsspråk är plattformsoberoende. Är det nödvändigt att koden går över flera olika operativsystem. kod som är utformad för att köras på en viss typ av processorarkitektur, till exempel Intel x86 x64 eller kommer det att kunna utföras på RISC-processorer som de som tillverkas av ARM. Dessa problem kommer att vara starkt beroende av frekvensen och typen av strategi som implementeras. Resilience and Testing. One av de bästa sätten att förlora mycket pengar på algoritmisk handel är att skapa ett system med ingen elasticitet. Detta hänvisar till systemets hållbarhet när det är föremål för sällsynta händelser, såsom mäklare konkurser, plötsligt överskott av volatilitet, regionsteglös driftstopp för en molnleverantörsleverantör eller oavsiktlig borttagning av en hel handelsdatabas Års vinst kan elimineras inom sekunder med dåligt de signerad arkitektur Det är absolut nödvändigt att överväga problem som debuggng, testning, loggar, säkerhetskopiering, hög tillgänglighet och övervakning som kärnkomponenter i ditt system. Det är troligt att i någon rimligt komplicerad kundanpassad kvantitativ handelsansökan kommer minst 50 utvecklings tid att användas för debugging, testning och underhåll. Nästan alla programmeringsspråk skickas antingen med en tillhörande debugger eller har väl respekterade tredjepartsalternativ. I huvudsak tillåter en debugger att exekvera ett program med inmatning av godtyckliga brytpunkter i kodbanan, vilket avbryta tillfälligt utförandet för att undersöka systemets tillstånd Den främsta fördelen med felsökning är att det är möjligt att undersöka kodens beteende före en känd kraschpunkt. Buggning är en viktig del i verktygslådan för att analysera programmeringsfel. Men de används mer i kompilerade språk som C eller Java, eftersom tolkade språk som Python är ofta easi att debugga på grund av färre LOC och mindre verbose uttalanden Trots denna tendens skickar Python med pdb vilket är ett sofistikerat felsökningsverktyg. Microsoft Visual C IDE har omfattande GUI-felsökningsverktyg, medan Linux-programmeraren för kommandoradsen innehåller gdb-debugger. Testing i mjukvaruutveckling hänför sig till processen att tillämpa kända parametrar och resultat på specifika funktioner, metoder och objekt inom en kodbas för att simulera beteende och utvärdera flera kodbanor, vilket hjälper till att säkerställa att ett system beter sig som det borde. Det senaste paradigmet är känt som testdriven utveckling TDD, där testkoden är utvecklad mot ett visst gränssnitt utan genomförande. Före slutförandet av den faktiska kodbasen kommer alla test att misslyckas. Eftersom koden är skriven för att fylla i ämnena kommer testen så småningom att passera , vid vilken tidpunkt utveckling bör upphöra. TDD kräver omfattande specifikationer för design och en sund disciplin i ord Er att utföra framgångsrikt I C ger Boost en enhetstestrama I Java finns JUnit-biblioteket för att uppfylla samma syfte. Python har också den unittest modulen som en del av standardbiblioteket Många andra språk har enhetstestramar och ofta finns det flera alternativ. I en produktionsmiljö är sofistikerad loggning absolut nödvändigt. Logging avser processen att skriva ut meddelanden med olika grader av svårighetsgrad när det gäller utförandegraden för ett system till en platt fil eller databas. Loggar är en första attacklinje när man letar efter oväntat program runtime beteende Tyvärr är bristerna i ett loggningssystem vanligtvis bara att upptäckas efter det faktum. Som med säkerhetskopierade diskussioner nedan bör ett loggningssystem ges med vederbörlig hänsyn innan ett system är utformat. Men Microsoft Windows och Linux kommer med omfattande systemloggningskapacitet och Programmeringsspråk tenderar att levereras med standardloggningsbibliotek som täcker de flesta användningsfall ofta klokt att centralisera loggningsinformation för att kunna analysera det senare, eftersom det ofta kan leda till idéer om förbättring av prestanda eller felsökning. Det kommer nästan säkert att ha en positiv inverkan på din trading returns. While logging av ett system kommer att ge information om vad som har hänt tidigare, kommer övervakning av en applikation att ge insikt om vad som händer just nu. Alla aspekter av systemet bör övervägas för övervakning Systemnivåvärden, såsom diskanvändning, tillgängligt minne, nätverksbandbredd och CPU-användning, ger grundläggande load information. Trading metrics such as abnormal prices volume, sudden rapid drawdowns and account exposure for different sectors markets should also be continuously monitored Further, a threshold system should be instigated that provides notification when certain metrics are breached, elevating the notification method email, SMS , automated phone call depending upon the severity of the metric. System monitoring is often the domain of the system administrator or operations manager However, as a sole trading developer, these metrics must be established as part of the larger design Many solutions for monitoring exist proprietary, hosted and open source, which allow extensive customisation of metrics for a particular use case. Backups and high availability should be prime concerns of a trading system Consider the following two questions 1 If an entire production database of market data and trading history was deleted without backups how would the research and execution algorithm be affected 2 If the trading system suffers an outage for an extended period with open positions how would account equity and ongoing profitability be affected The answers to both of these questions are often sobering. It is imperative to put in place a system for backing up data and also for testing the restoration of such data Many individuals do not test a restore strategy If recovery from a crash has not been tested in a s afe environment, what guarantees exist that restoration will be available at the worst possible moment. Similarly, high availability needs to be baked in from the start Redundant infrastructure even at additional expense must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems I won t delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system. Choosing a Language. Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system The next stage is to discuss how programming languages are generally categorised. Type Systems. When choosing a language for a trading stack it is necessary to consider the type system The languages which are of interest for algorithmic trading are either statically - or dynamically-typed A statically-typed language performs checks of the types e g integers, floats, custom classes etc during the compilation process Such languages include C and Java A dynamically-typed language performs the majority of its type-checking at runtime Such languages include Python, Perl and JavaScript. For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors However, type-checking doesn t catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations Dynamic languages i e those that are dynamically-typed can often lead to run-time errors that would otherwise be caught with a compilation-time type-check For this reason, the concept of TDD see above and unit testing arose which, when carried out correctly, often provides more safety than compile-time checking alone. Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the type and thus memory requirements are known at compile-time In fact, part of the inefficiency of many dynamically-typed languages stems from the fact that certain objects must be type-inspected at run-time and this carries a performance hit Libraries for dynamic languages, such as NumPy SciPy alleviate this issue due to enforcing a type within arrays. Open Source or Proprietary. One of the biggest choices available to an algorithmic trading developer is whether to use proprietary commercial or open source technologies There are advantages and disadvantages to both approaches It is necessary to consider how well a language is supported, the activity of the community surrounding a language, ease of installation and maintenance, quality of the documentation and any licensing maintenance costs. The Microsoft stack including Visual C , Visual C and MathWorks MatLab are two of the larger pro prietary choices for developing custom algorithmic trading software Both tools have had significant battle testing in the financial space, with the former making up the predominant software stack for investment banking trading infrastructure and the latter being heavily used for quantitative trading research within investment funds. Microsoft and MathWorks both provide extensive high quality documentation for their products Further, the communities surrounding each tool are very large with active web forums for both The software allows cohesive integration with multiple languages such as C , C and VB, as well as easy linkage to other Microsoft products such as the SQL Server database via LINQ MatLab also has many plugins libraries some free, some commercial for nearly any quantitative research domain. There are also drawbacks With either piece of software the costs are not insignificant for a lone trader although Microsoft does provide entry-level version of Visual Studio for free Micros oft tools play well with each other, but integrate less well with external code Visual Studio must also be executed on Microsoft Windows, which is arguably far less performant than an equivalent Linux server which is optimally tuned. MatLab also lacks a few key plugins such as a good wrapper around the Interactive Brokers API, one of the few brokers amenable to high-performance algorithmic trading The main issue with proprietary products is the lack of availability of the source code This means that if ultra performance is truly required, both of these tools will be far less attractive. Open source tools have been industry grade for sometime Much of the alternative asset space makes extensive use of open-source Linux, MySQL PostgreSQL, Python, R, C and Java in high-performance production roles However, they are far from restricted to this domain Python and R, in particular, contain a wealth of extensive numerical libraries for performing nearly any type of data analysis imaginable, often at execution speeds comparable to compiled languages, with certain caveats. The main benefit of using interpreted languages is the speed of development time Python and R require far fewer lines of code LOC to achieve similar functionality, principally due to the extensive libraries Further, they often allow interactive console based development, rapidly reducing the iterative development process. Given that time as a developer is extremely valuable, and execution speed often less so unless in the HFT space , it is worth giving extensive consideration to an open source technology stack Python and R possess significant development communities and are extremely well supported, due to their popularity Documentation is excellent and bugs at least for core libraries remain scarce. Open source tools often suffer from a lack of a dedicated commercial support contract and run optimally on systems with less-forgiving user interfaces A typical Linux server such as Ubuntu will often be fully command - line oriented In addition, Python and R can be slow for certain execution tasks There are mechanisms for integrating with C in order to improve execution speeds, but it requires some experience in multi-language programming. While proprietary software is not immune from dependency versioning issues it is far less common to have to deal with incorrect library versions in such environments Open source operating systems such as Linux can be trickier to administer. I will venture my personal opinion here and state that I build all of my trading tools with open source technologies In particular I use Ubuntu, MySQL, Python, C and R The maturity, community size, ability to dig deep if problems occur and lower total cost ownership TCO far outweigh the simplicity of proprietary GUIs and easier installations Having said that, Microsoft Visual Studio especially for C is a fantastic Integrated Development Environment IDE which I would also highly recommend. Batteries Included. The header of this sect ion refers to the out of the box capabilities of the language - what libraries does it contain and how good are they This is where mature languages have an advantage over newer variants C , Java and Python all now possess extensive libraries for network programming, operating system interaction, GUIs, regular expressions regex , iteration and basic algorithms. C is famed for its Standard Template Library STL which contains a wealth of high performance data structures and algorithms for free Python is known for being able to communicate with nearly any other type of system protocol especially the web , mostly through its own standard library R has a wealth of statistical and econometric tools built in, while MatLab is extremely optimised for any numerical linear algebra code which can be found in portfolio optimisation and derivatives pricing, for instance. Outside of the standard libraries, C makes use of the Boost library, which fills in the missing parts of the standard library In fact , many parts of Boost made it into the TR1 standard and subsequently are available in the C 11 spec, including native support for lambda expressions and concurrency. Python has the high performance NumPy SciPy Pandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research Further, high-performance plugins exist for access to the main relational databases, such as MySQL MySQL C , JDBC Java MatLab , MySQLdb MySQL Python and psychopg2 PostgreSQL Python Python can even communicate with R via the RPy plugin. An often overlooked aspect of a trading system while in the initial research and design stage is the connectivity to a broker API Most APIs natively support C and Java, but some also support C and Python, either directly or with community-provided wrapper code to the C APIs In particular, Interactive Brokers can be connected to via the IBPy plugin If high-performance is required, brokerages will support the FIX protocol. As is now evident, the choice of programming language s for an algorithmic trading system is not straightforward and requires deep thought The main considerations are performance, ease of development, resiliency and testing, separation of concerns, familiarity, maintenance, source code availability, licensing costs and maturity of libraries. The benefit of a separated architecture is that it allows languages to be plugged in for different aspects of a trading stack, as and when requirements change A trading system is an evolving tool and it is likely that any language choices will evolve along with it. Just Getting Started with Quantitative Trading.

Comments

Popular Posts