Högfrekventa handelssystem design och process management. High Frequency Trading System design och process management. Advisor Roy E Welsch. Department System Design och Management Program. Publisher Massachusetts Institute of Technology. Date utfärdat 2009.Trading företag nuförtiden är mycket beroende av data mining, datormodellering och mjukvaruutveckling Finansanalytiker utför många liknande uppgifter till dem inom mjukvaru - och tillverkningsindustrin Men finansbranschen har ännu inte helt antagit standardiserade systemtekniska ramverk och processhanteringsmetoder som har lyckats inom mjukvaru - och tillverkningsindustrin. Många av De traditionella metoderna för produktdesign, kvalitetskontroll, systematisk innovation och kontinuerlig förbättring inom teknikområdet kan tillämpas på finansfältet. Denna avhandling visar hur kunskapen som förvärvats från tekniska discipliner kan förbättra design och processhantering av högfrekventa handel s ystems Högfrekventa handelssystem är beräkningsbaserade Dessa system är automatiska eller halvautomatiska mjukvarusystem som är inherent komplexa och kräver hög grad av designprecision. Utformningen av ett högfrekvent handelssystem kopplar flera fält, inklusive kvantitativ finansiering, systemdesign och mjukvaruutveckling I finansbranschen, där matematiska teorier och handelsmodeller är relativt välskattade, är möjligheten att genomföra dessa mönster i reala handelspraxis ett av de viktigaste inslagen i ett värdepappersföretags konkurrenskraft. Möjligheten att konvertera investeringsideer till högpresterande handel Systemen kan effektivt och effektivt ge ett värdepappersföretag en stor konkurrensfördel. Denna avhandling ger en detaljerad studie som består av högfrekvent handelssystemdesign, systemmodellering och principer samt processhantering för systemutveckling. Särskild vikt läggs vid backtesting och optimering, vilket är Ansåg th e viktigaste delarna i att bygga ett handelssystem Denna forskning bygger systemtekniksmodeller som styr utvecklingsprocessen. Det använder också experimentella handelssystem för att verifiera och validera principer som behandlas i denna avhandling. Slutligen sluts i denna avhandling att systemstekniska principer och ramverk kan vara nyckeln till framgång för att genomföra högfrekventa handel eller kvantitativa investeringssystem. Tesis SM - Massachusetts Institute of Technology, System Design och Management Program, 2009 Katalogiserad från PDF-version av avhandling Inkluderar bibliografiska referenser p 78-79.Keywords System Design och Management Program. Best Programmeringsspråk för algoritmiska handelssystem. En av de vanligaste frågorna som 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 Kostnaden måste alla övervägas. Denna artikel kommer att vara o Utlämna nödvändiga komponenter 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. kommer olika handelsstrategier 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 arkitekt hela systemet. Detta inkluderar Val av hårdvara, operativsystem s och systemlöshet mot sällsynta, potentiellt katastrofala händelser. Medan arkitekturen övervägas måste hänsyn tas till prestanda - både för forskningsverktygen och för levande exekveringsmiljö. Vad är handelssystemet Försöker göra. Innan du bestämmer dig för det bästa språket som du ska skriva en automatiserad tradi på Ng-system är det nödvändigt att definiera kraven Är systemet 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 backtestern CPU-hastighet och samtidighet är ofta de begränsande faktorerna för att optimera forskningsexekveringshastigheten. 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 är en hög prestationsnivå Krävs 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 behövas 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 en högfrekvent statistisk arbitragestrategihandel på terminsmarknaden. Före språkvalet måste många dataleverantörer vara utvärderas som hänför sig till en strategi vid handen. Det kommer att vara nödvändigt att överväga anslutning till säljaren, strukturen hos alla API, aktualiteten hos d ata, 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 terminer 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 minutiöst eller i andra hand kräver betydande överväganden med Beträffande prestanda. En strategi som överstiger andra stavar, dvs kryssdata leder till en prestationsdriven design som det primära kravet. För högfrekventa strategier måste en stor mängd marknadsdata lagras och utvärderas. Programvara som HDF5 eller kdb används vanligtvis för dessa roller. För att behandla de omfattande volymerna av data som behövs för HFT-applikationer, en omfattande opti felaktig 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 av samlokalisering och kärnans nätverksgränssnitt. Tunesystem. 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 strategier över flera parameterdimensioner. Typiska IDE i detta utrymme inkluderar Microsoft Visual CC, som innehåller omfattande felsökningsverktyg, kodkompletteringsfunktioner 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 wraps R statistisk språkkonsol i en fulländig IDE Eclipse IDE för Linux Java och C och semi-proprietary IDEs som Enthought Canopy för Python, som inkluderar databehandlingsbibliotek 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 en GUI IDE som koden kommer att bli exekverad i bakgrunden Huvudbedömningen i detta skede är den av körhastigheten Ett sammanställt språk som C är ofta användbart om parametrarna för backtesting-parametrarna ä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 c ompetitiveness 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 på det nedan. Språket som används för backtester och forskningsmiljöer kan dock vara helt oberoende av de 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 detaljhandelsalgoritmiska handlare. Detta är nästan alltid ett misstag. Dessa verktyg tillhandahåller mekanismen genom vilken kapitalet kommer att bevaras De försöker inte bara minska antalet riskabla satsningar, men minimerar också churnen för affärerna själva, vilket minskar transaktionskostnaderna. Snabba versioner av dessa komponenter kan ha en betydande inverkan på lönsamhetens kvalitet och konsistens. Det är enkelt att skapa en stabil strategi som portföljbyggnadsmekanism och riskhanterare kan enkelt modifieras för att hantera flera system Således bör de betraktas som väsentliga komponenter vid inledningen 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 kapitaltilldelningen till olika strategier i en portfölj. Portföljkonstruktion reduceras ofta till ett linjärt algebraproblem, såsom en matrisfaktorisering Och därmed är prestanda mycket beroende av effektiviteten hos den numeriska linjära algebra-implementeringen 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 ombalanserad portfölj kräver en sammanställd och väl optimerad matrisbiblioteket för att bära detta Risken kan komma i många former Ökad volatilitet, även om det här kan ses som önskvärt för vissa strategier, ökade korrelationer mellan tillgångsklasser, räknare - party default, serveravbrott, svarta svanhändelser och oupptäckta fel i handelskoden för att nämna några. Riskhanteringskomponenter försöker förutse effekterna av överdriven volatilitet och korrelation mellan tillgångsklasser och deras efterföljande effekter s på handelskapitalet. Detta minskar ofta till en uppsättning statistiska beräkningar som Monte Carlo stresstester Detta liknar mycket beräkningsbehoven hos en derivatprissättningsmotor och som sådan kommer den att vara CPU-bunden. Dessa simuleringar är mycket parallelliserbara se nedan och i viss mån är det möjligt att kasta hårdvara vid problemet. Utföringssystem. Arbetet med exekveringssystemet är att ta emot filtrerade handelssignaler från t hans portföljkonstruktion och riskhanteringskomponenter och vidarebefordra dem till en mäklare eller annan marknadstillträde. För de flesta handlingsalgoritmiska handelsstrategier handlar det om en API eller FIX-anslutning till en mäklare, såsom Interactive Brokers. De primära övervägandena när man bestämmer sig för ett språk Inkludera 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 som ska nås eller huruvida en gateway kan etableras på ett huvudlöst sätt, dvs ingen GUI. När det gäller interaktiva mäklare måste Trader WorkStation-verktyget köras i en GUI-miljö för att få tillgång till deras API. Jag var en gång tvungen att installera en Desktop Ubuntu-utgåva på en Amazon Moln server för att få tillgång till Interactive Brokers på distans, rent av den här orsaken. De flesta API-er kommer att ge ett C - eller Java-gränssnitt. Det är vanligtvis upp till samhället utvecklar 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 är aktivt underhållna 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 exekveringsalgoritmen. Observera att hundratals order kan skickas varje minut och som sådan är prestanda kritisk. uppkommit genom ett dåligt fungerande exekveringssystem och detta kommer att ha en dramatisk inverkan på lönsamheten. Statiskt typade språk se nedan, såsom C Java är generellt optimalt för exekvering men det finns ett kompromiss i utvecklingstiden, 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 på ett modulärt sätt, 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 detaljhandlare eller arbetar I en liten fond kommer sannolikt att ha på sig många hattar. Det kommer att vara nödvändigt att täcka alfamodell, riskhantering och exekveringsparametrar och även den slutliga implementeringen av systemet Innan du går in i specifika språk kommer designen av en optimal systemarkitektur att diskuteras. Separation av oro. En av de viktigaste besluten som måste fattas i början är hur man skiljer sig från ett handelssystems bekymmer. I mjukvaruutveckling innebär detta i huvudsak hur man bryter upp de olika aspekterna av handelssystemet i separata modulära komponenter . Genom att utsätta 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 praxis för sådana system För strategier med 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 realtidiga marknadsdataingångarna, datalagring , Dataåtkomst-API, backtester, strategiparametrar, portföljkonstruktion, riskhantering och automatiserade exekveringssystem. Till exempel, 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 datainsamling eller dataåtkomst API Så långt som backtester och efterföljande komponenter är det ingen d Ifference. Another fördel med separerade komponenter är att det tillåter att en mängd olika programmeringsspråk används i det övergripande systemet. Det är inte nödvändigt att vara begränsad till ett enda språk om kommunikationsmetoden för komponenterna är språkoberoende. Detta kommer att vara 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 antal crunching prestanda, medan portföljhanteraren och exekveringssystemen är skrivna i Python med SciPy och IBPy. Performance Considerations. Performance är ett viktigt övervägande för de flesta handelsstrategier. För högre frekvensstrategier är det den viktigaste faktorn. Prestanda täcker ett brett spektrum av problem, så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 th e-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 datorernas datorer, är att för tidig optimering är grunden till allt ondska. 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 dyka upp. 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 tillgängliga för det, liksom tredjepartsverktyg. Språkval kommer nu att diskuteras i Kontext av 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 data sträckor Ucture och algoritmiskt arbete C-fartyg med standardmallabiblioteket, medan Python innehåller NumPy SciPy Vanliga matematiska uppgifter finns i dessa bibliotek och det är sällan fördelaktigt att skriva en ny implementering. Ett undantag är om mycket anpassad hårdvaruarkitektur krävs och en Algoritmen utnyttjar extrema användningen av egna extensions såsom anpassade cachar. Men ofta återuppbyggnad av hjulavfallet som skulle kunna användas bättre utveckla och optimera andra delar av handelsinfrastrukturen. Utvecklingstiden är extremt värdefull, särskilt i samband med ensamutvecklare. Latency är ofta en fråga om exekveringssystemet som forskningsverktygen är vanligen belägna på samma maskin För det första kan latens förekomma vid flera punkter längs exekveringsvägen Databaser måste konsulteras med disknätets latentitet, signaler måste genereras operativsystem, kernal messaging latency , Handelssignaler skickade NIC latens och order behandlade utbytessystem i ternal latens. För högre frekvensoperationer är det nödvändigt att bli väl 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 Krav på djup som krävs. Kakning är väldigt användbar i verktygsverktyget för en kvantitativ handelsutvecklare. Caching avser begreppet lagring av ofta åtkomlig data på ett sätt som möjliggör högre prestanda på bekostnad av dataens potentiella stavhet. Ett allmänt användningsfall förekommer i webbutveckling när data tas från en diskbaserad relationsdatabas och sätter den i minnet. Eventuella efterfrågningar på data behöver inte slås i databasen och prestationsvinster kan därför 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 inte gör det d att regenereras på varje slinga i handelsalgoritmen. Sådan regenerering är sannolikt en hög CPU - eller disk-IO-operation. Dock är caching inte utan sina egna problem. Regenerering av cacherdata på en gång beror på cachemagas volatilitet , Kan ge 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 Således är det nödvändigt att högre prestandahandelsapplikationer är väl medvetna om hur minnet tilldelas och fördelas under programflödet. Nya språkstandarder som Java, C och Python utför alla automatiska sopkollektioner som hänför sig till deallokering av dynamiskt tilldelat minne när objekt saknas. insamling är extremt användbar under utveckling eftersom det minskar fel och hjälpmedelläsbarhet. Det är dock ofta suboptimalt för c uppnå högfrekventa handelsstrategier Anpassad skräpsamling är ofta önskad för dessa fall I Java, t. ex. 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ändigt att hantera all allokering av minnetallokering som en del av ett objekt s implementering. Medan potentiellt felproblem kan leda till danglingpekare är det ytterst användbart att ha finkorrigerad kontroll över hur föremål förekommer i högen för vissa applikationer. När man väljer språk säkerligen att studera hur sopor samlaren fungerar och huruvida den kan modifieras för att optimera för ett visst användningsfall. Många operationer i algoritmiska handelssystem är möjliga för parallellisering. Detta avser begreppet att utföra flera programmatiska operationer samtidigt, det vill säga i parallella Så kallade embarassingly parallella algoritmer inkluderar steg som kan beräknas helt oberoende Vissa statistiska operationer, såsom Monte Carlo-simuleringar, är ett bra exempel på embarassingly parallella algoritmer eftersom varje slumpmässig rita och efterföljande banoperation kan beräknas utan kännedom om andra vägar. Övriga algoritmer är endast delvis parallella. Vätskedynamik simuleringar är sådana Ett exempel där beräkningsdomänen kan delas upp men i slutändan måste domänerna kommunicera med varandra och således är operationerna delvis sekventiella. Parallelliserbara algoritmer är föremål för Amdahl s Law som ger en teoretisk övre gräns för prestandahöjningen för en parallelliserad algoritm När det gäller N separata processer, 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. Stigningen av konsumentgrafikhårdvara Övervägande för videospel har ledt Till utvecklingen av grafiska processenheter GPU: er, som innehåller hundratals kärnor för starkt samtidiga operationer. Sådana GPU är nu mycket överkomliga Högkvalitativa ramar, såsom Nvidia s CUDA, har lett till omfattande adoption i akademi och finans. Såsom GPU-hårdvara är i allmänhet bara Lämplig för forskningsaspekten för 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 vanligtvis oberoende av de andra. Skalning i mjukvaruutveckling och operationer avser 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 producerar fortfarande konsekvent avkastning raderingsteknologi stapelvågar om det kan tåla större volymer 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 starkt i tillåter ett system att skala. Språk själva beskrivs ofta som oskalbart Detta är vanligen ett resultat av felaktig information, snarare än svårt. Det är den totala teknikstacken som bör fastställas för skalbarhet, inte språket. Tydligt vissa språk har större prestanda än andra i synnerhet Använd fall, men ett språk är aldrig bättre än någonting i alla avseenden. Ett sätt att hantera skalan är att skilja problem som anges ovan För att ytterligare införa förmågan att hantera spikar i systemet, dvs plötslig volatilitet som utlöser en flotta handel , det är användbart att skapa en meddelandekurarkitektur. Det innebär helt enkelt att placera ett meddelandekössystem mellan c omponents 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 är lider under tung latens då kommer det att säkerhetskopiera affärer En kö mellan handelssignalgenerern och körnings API kommer att lindra detta problem på bekostnad av potentiell handelsladdning. En väl respekterad öppen källkodsmeddelare är RabbitMQ. Hardware och operativsystem. Hårdvara 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ögfrekventa handlare 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, ett moln leverantö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 versionerna av operativsystem som är designade för stationära datorer 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 Internet-anslutning och strömuppehållsproblem Huvuddelen av ett skrivbordssystem är att betydande hästkrafter kan köpas för bråkdelen av kostnaden för en fjärrd dedicated server eller ett molnbaserat system med jämförbar hastighet. En dedikerad server eller molnbaserad maskin, medan ofta dyrare än ett skrivbordsalternativ, möjliggör mer betydande redundansinfrastruktur, såsom automatiserat dat en sä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 Unixbaserad 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 i 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ör vissa högfristiga handelsstrategier, som är beroende av låg latens för att generera alfa. Den sista aspekten till hårdvara Val och val av programmeringsspråk är plattformsoberoende Är det ett behov av att koden ska springa över flera olika operativsystem Är koden d Utsedda att köras på en viss typ av processorarkitektur, såsom Intel x86 x64 eller kommer det att kunna utföras på RISC-processorer som de som tillverkas av ARM. Dessa problem kommer att vara mycket beroende av frekvensen och typen av strategi som implementeras. Resilience and Testing. En av de bästa sätten att förlora mycket pengar på algoritmisk handel är att skapa ett system utan 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, region - brett nedetid för en molnservern eller oavsiktlig borttagning av en hel handelsdatabas. Vinsten kan elimineras inom några sekunder med en dåligt utformad arkitektur. Det är absolut nödvändigt att överväga problem som debuggng, testning, loggar, säkerhetskopieringar, Tillgänglighet och övervakning som kärnkomponenter i ditt system. Det är troligt att i någon rimligt komplicerad anpassad kvantitativ handelsapplikation minst 50 av utvecklingen tiden kommer att spenderas på debugging, testning och underhåll. Nästan alla programmeringsspråk skickas antingen med en tillhörande debugger eller har väl respekterade alternativ från tredje part. I huvudsak tillåter en debugger att exekvera ett program med inmatning av godtyckliga brytpunkter i kodbanan , Som tillfälligt stoppar utförandet för att undersöka systemets tillstånd Den huvudsakliga fördelen med debugging är att det är möjligt att undersöka kodens beteende före en känd kraschpunkt. Stoppning är en viktig del i verktygslådan för att analysera programmeringsfel. , används de mer i kompilerade språk som C eller Java, eftersom tolkade språk som Python ofta är enklare att felsöka på grund av färre LOC och mindre uttalade 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 kommandoraden innehåller gdb-debugger. Testning 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 bidrar till att ett system beter sig som det borde. En senare paradigm är känd 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 kod är skrivet för att fylla i ämnena, kommer testen så småningom alla att passera, Vid vilken tidpunkt bör utvecklingen upphöra. TDD kräver omfattande specifikationer för avancerad specifikation och en sund disciplin för att kunna genomföras framgångsrikt. I C tillhandahåller Boost en enhetstestningsram. I Java finns JUnit-biblioteket för att uppfylla samma syfte Python också Har den unittest modulen som en del av standardbiblioteket Många andra språk har enhetstestramar och ofta finns det flera opti ons. I en produktionsmiljö är sofistikerad loggning absolut nödvändig. Logging avser processen att skriva ut meddelanden med olika grader av svårighetsgrad när det gäller utförande av 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 skickas med standardloggningsbibliotek som täcker de flesta användningsfall Det är 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 felreduktion, vilket nästan säkert har en positiv inverkan på din trading returns. While logging av ett system kommer att ge information om vad som har skett i det förflutna 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 att övervaka systemnivåvärden som diskanvändning, tillgängligt minne, nätverksbandbredd och CPU-användning ger grundläggande belastning information. Trading-mätvärden som onormal prisvolym, plötsliga snabba drawdowns och kontoexponering för olika sektorer bör också övervakas. Vidare bör ett tröskelsystem initieras som meddelar när vissa mätvärden bryts, förhöjning av anmälningsmetoden e-post, 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 safe 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 outw eigh 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 tra ding 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-ins pected 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 proprietary 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 Microsoft 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 section 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 interact ion, 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 fo r 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. Algorithmic Trading Custom Software Development. DataArt s services have been very helpful to firms and institutions which use automated trading strategies and quantitative data analysis We help clients in building and implementation of alpha, risk, transaction cost and portfolio models. For many modern strategies which use data mining for building data driven alpha models intraday and end-of-day data availability and quality is critical for strategy success High volumes of trades could lead to delays of historical data series delivered by exchanges This often leads to losing days of algo trading. DataArt is familiar with building custom frameworks a nd systems for big volume high frequency data logging. High frequency market data signals frequency down to five milliseconds. Process up to 15,000 inputs prices, Volumes and Quotes for 5000 of US stocks per registration node. Real-time data filtering. Publishing filtered signals to enterprise message bus. Quick access to historical data series is another critical point for quantitative data mining The speed of access to data often defines how much data one can mine and quality of output results the more in-sample data is mined the better the out-of-sample strategy behavior will be DataArt is experienced in building historical tick data storing in an optimized compact format. One-second data available for a three years period, thousands of signals, regular disk space. Quick access to historical data access time is 600 ms when accessing one year of data for one signal. Ability to apply cleaning anti-spike filters and transformation to raw historical data on the fly. Data quality validation jobs missing points, duplicates, out-of-range values. Integration jobs. DataArt also helps with building fast and effective back-testing systems which allow for executing and playing back in-sample and out-of-sample tests for strategies in seconds The quality of our back-testing systems and proprietary algorithms allow matching 99 of the intra-day trades with back-tests They support the following output parameters. Cumulative profit over time. Average rate of return and Std of return over time. Predictive power. Winning trades winning time percentage. Return ratio VS Risk. Sharpe ratio. DataArt is familiar with specifics of order execution in algorithmic trading such as. Cancelling and amending orders. Hidden Visible order. Aggressive Passive execution. Order size strategy. Execution strategy. Our experience and knowledge of algo trading and data mining opens additional opportunities for those who use mathematical models and quantitative analysis for big data, web and social web mining.
No comments:
Post a Comment