Sunday 20 August 2017

Vb Net Trading System


Bästa programmeringsspråk för algoritmiska handelssystem. En av 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. I denna artikel beskrivs de nödvändiga komponenterna i en algoritmisk handelssystemarkitektur och hur beslut om genomförande påverkar språkvalet. Först kommer huvudkomponenterna i ett algoritmiskt handelssystem att övervägas, såsom forskningsverktygen, portföljoptimerare, riskhanterare och exekveringsmotor Därefter kommer olika handelsstrategier att undersökas och hur de påverkar systemets utformning. Speciellt kommer frekvensen av handel och den sannolika handelsvolymen att diskuteras. När handelsstrategin har valts ut är nödvändigt för att arkitektera hela systemet Detta inkluderar val av hårdvara, th e operativsystem s och systemlöshet mot sällsynta, potentiellt katastrofala händelser Medan arkitekturen övervägs måste hänsyn tas till prestanda både för forskningsverktygen och för levande exekveringsmiljö. Vad är handelssystemet som försöker göra. Innan du bestämmer dig för det bästa språket som du ska 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-hastigheten an d samtidighet är ofta de begränsande faktorerna för att optimera forskningens körhastighet. 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 den begränsande faktorn för att optimera exekveringssystem. Valet av språk för varje komponent i hela ditt system kan därför vara ganska annorlunda. Typ, frekvens och volym av strategi. Den typ av algoritmisk strategi som används kommer att ha en väsentlig inverkan på systemets utformning Det kommer att vara nödvändigt att överväga att marknaderna handlas, anslutningen till externa datasäljare, frekvensen och volymen av strategin, avvägningen mellan enkel utveckling och prestandaoptimering, liksom eventuella anpassad hårdvara, inklusive samplade anpassade servrar, GPU eller FPGA som kan vara nödvändiga. Teknologin val för en låg - frekvens USA: s strategi kommer att vara väldigt annorlunda än en högfrekvent statistisk arbitragestrategihandel på terminsmarknaden. Före språkvalet måste många dataleverantörer utvärderas som avser en strategi för hand. Det kommer att vara nödvändigt att överväga anslutning till säljaren, struktur av alla API, datauppdatering, 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 tekniken ska definieras Strategier Att använda data oftare än minutivt eller i andra hand måste kräva betydande hänsyn till prestanda. En strategi överstiger g andra streck, dvs kryssdata leder till en prestanda driven design som det primära kravet 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 volymerna av data som behövs för HFT-applikationer, en omfattande optimerad backtester och exekveringssystem måste användas. CC möjligen med en viss monterare är sannolikt den starkaste språkkandidaten. Ultrahögfrekvensstrategier kommer nästan säkert att kräva anpassad hårdvara som FPGA, lokalisering och kernal-nätverksgränssnittsinställning. Research Systems. Research Systems involverar vanligtvis en blandning av interaktiv utveckling och automatiserad scripting. Den förra äger ofta rum inom en IDE som Visual Studio, MatLab eller R Studio. Den senare innefattar omfattande numeriska beräkningar över många parametrar och data poäng Detta leder till ett språkval som ger en enkel miljö t för att testa koden, 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, 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 statistiska språkkonsolen i en fulländig IDE Eclipse IDE för Linux Java och C och semi-proprietary IDEs such som en tanke på kapaciteten 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, men det är inte nödvändigt att använda ett GUI IDE som koden kommer att utföras i bakgrunden. Den primära övervägandet på detta stadium är execu hastighet 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, t. ex. NumPy pandor för backtesting-steget för att upprätthålla en rimlig grad av konkurrenskraft med kompilerade ekvivalenter. I slutändan kommer språket 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 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 detaljhandeln algoritmiska handlare Detta är nästan alltid ett misstag Dessa verktyg ger mekanismen Med vilket kapital kommer att bevaras De försöker inte bara minska antalet riskabla satsningar, utan också minimera handelns omsättning, vilket minskar transaktionskostnaderna. Sofistikerade versioner av dessa komponenter kan ha en betydande inverkan på lönsamhetens kvalitet och konsistens. Det är enkelt att skapa stabila strategier, eftersom portföljkonstruktionsmekanismen och riskhanteraren lätt kan modifieras för att hantera flera system. Därför bör de betraktas som väsentliga komponenter vid inledningen av utformningen av ett algoritmiskt handelssystem. att ta en uppsättning av önskade affärer och producera uppsättningen av verkliga affärer som minimerar churn, behålla exponeringar mot olika faktorer som sektorer, tillgångsklasser, volatilitet mm och optimera fördelningen av kapital till olika strategier i en portfölj. Portföljkonstruktion minskar ofta till ett linjärt algebraproblem såsom en matrisfaktorisering och därmed prestanda är mycket de beroende på effektiviteten av den numeriska linjära algebraimplementeringen. 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 ett sammanställt och väloptimerat matrisbibliotek 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å handelskapital. 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 det är i viss mån möjligt att kasta hårdvara vid problemet. Utförandet Systems. Utförandet av uppdragssystemet är att ta emot filtrerade handelssignaler från portföljkonstruktion och riskhanteringskomponenter och vidarebefordra dem till mäklare eller andra 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 som interaktiv mäklare De primära övervägandena när man bestämmer sig för ett språk inkluderar kvalitet på API: n, tillgänglighet av språkomslag för ett API, exekveringsfrekvens och förväntad glidning. Kvaliteten på API: n refererar till hur väl dokumenterad det är, vad typ av prestanda det ger, oavsett om det behövs fristående programvara som ska nås eller om en gateway kan etableras i ett huvudlöst f ashion 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 komma åt deras API. Jag var en gång tvungen att installera en Desktop Ubuntu-utgåva på en Amazon Cloud-server för att få tillgång till Interactive Brokers på distans, rent av den anledningen. De flesta API-skivor kommer att ge ett C - 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-omslag finns det utrymme för att buggar ska 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. Expeditionsfrekvensen är av största vikt i exekveringsalgoritmen 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 c påverkan på lönsamheten. Statiskt typade språk se nedan, 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 noggrant 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 systeminfrastrukturen är ännu inte täckt De som handlar 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, samt den slutliga implementeringen av system Innan du deltar i specifika språk kommer designen av en optimal systemarkitektur att diskuteras. Avskiljning av oro. En av de viktigaste besluten Det som måste göras i början är hur man skiljer från ett handelssystems bekymmer. I mjukvaruutveckling betyder detta i huvudsak hur man bryter upp de olika aspekterna av handelssystemet i separata modulära komponenter. Om man utsätter gränssnitt för var och en av komponenterna är det lätt att byta ut delar av systemet för andra versioner som stöder prestanda, tillförlitlighet eller underhåll, utan att ändra externt beroendeskod. Detta ä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 måste 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 över 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 historiska och realtidsmarknadsdataingångar, datalagring, dataåtkomst API, backtester, strategiparametrar, portföljkonstruktion, riskhantering och automatiserade exekveringssystem. Till exempel, om den datalager 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 är oroliga. 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 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 talkrypningsprestanda, medan portföljhanterare och exekveringssystem skrivs i Python med SciPy och IBPy. Performance. Performance är en viktig konvertering sideration 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ätverksfördröjning, 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 på varje ämne. Arkitektur och språkval kommer nu att diskuteras med avseende på deras effekter på prestanda. Den rådande visdom som Donald Knuth säger en av datorernas datorer, är att för tidig optimering är roten 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 avgöra var flaskhalsar uppstår Profiler kan göras för alla de faktorer som anges ovan, antingen i en MS Windows-eller Linux-miljö. Det finns många operativsystem och språkverktyg tillgängliga för att göra det, såväl som tredjepartsverktyg. Språkvalet kommer nu att diskuteras i samband med performance. C, Java, Python, R och MatLab alla innehåller högpresterande bibliotek antingen som en del av sin 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 fördelaktigt att skriv en ny implementering. Ett undantag är om det krävs mycket anpassad hårdvaruarkitektur och en algoritm gör omfattande användning av egna utvidgningar, såsom anpassade cachar. Men ofta återuppfinning av hjulavfallet som skulle kunna användas bättre utveckla och optimera andra delar av handelsinfrastruktur Utvecklingstiden är extremt värdefull, särskilt i samband med ensamutvecklare. Latency är ofta ett problem av exekveringssystemet eftersom forskningsverktygen vanligen ligger på samma maskin För det första kan latens uppträda vid flera punkter längs exekveringsvägen Databaser måste höras i disknätets latentitet, signaler måste genereras operativsystem, kernal messaging latency, handelssignaler skickade NIC-latens och beställningar för bearbetade 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 utanför artikeln men om en UHFT algoritmen är önskvärd, var då medveten om djupet av kunskap som krävs. Caching är väldigt användbar i verktyget 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 potentiell Stålighet av data Ett vanligt fall faller i webbutveckling när du tar data från en disk-bac ked relationell databas och sätta den i minnet Alla efterföljande förfrågningar på data behöver inte träffas i databasen och så kan prestationsvinsterna vara signifikanta. För handelssituationer kan caching vara mycket fördelaktigt. Till exempel kan nuvarande status för en strategiportfölj lagras i en cache tills den är ombalanserad, så att listan inte behöver 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 cache-lagringens volatilie-karaktär 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 absolut nödvändigt att applikationer med högre prestandahandel är väl medvetna om hur minnet tilldelas och deallokeras under programflödet Nya språkstandarder som Java, C och Python utför alla automatiska sopor som hänför sig till deallokering av dynamiskt tilldelat minne när objekten går utom räckhåll. Säkerhetskopiering är extremt användbar under utveckling eftersom det minskar fel och hjälpmedel. , är det ofta suboptimalt för vissa högfrekventa handelsstrategier. Anpassad skräpsamling är ofta önskad för dessa fall. I Java, t. ex. genom att ställa in skräpkollektor och hålkonfiguration, är det möjligt att få hög prestanda för HFT-strategier. C gör inte t tillhandahålla en inbyggd sopsamlare och så är det nödvändigt att hantera all minnesallokering avdelningen som en del av en s s implementering. Medan potentiellt felproblem kan leda till danglingpekare är det ytterst användbart att ha finkornad kontroll över hur föremål uppträder på högen för vissa tillämpningar När du väljer ett språk, var noga med att studera hur sopsamlare fungerar och huruvida det kan modifieras för att optimera för ett visst användningsfall. Många operationer i algoritmiska handelssystem är acceptabla för parallellisering. Detta 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. Andra algoritmer är bara delvis parallelliserbara Fluiddynamysimuleringar ä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 de är föremål för 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. Förhöjningen av konsumentgrafik hårdvara främst för videospel har lett till utvecklingen av grafiska processenheter GPU: er, som innehåller hundratals kärnor för mycket samtidiga operationer. Sådana GPU: er är nu mycket prisvärda. Högnivåramar, som Nvidia s CUDA, har lett till omfattande adoption i akademin och finans. Så GPU-hårdvara är i allmänhet endast lämplig för forskningsaspekten för kvantitativ finansiering, medan andra mer specialiserade hårdvaror, inklusive Field-Programmable Gate Arrays - FPGAs, används för U HFT. Idag 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 o f de andra. Scaling 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 kapitalmängder och fortfarande producera konsekventa avkastningar. Handelsteknikstakten vågar om den 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 starkt till att tillåta ett system att skala. Språk 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 klart. vissa språk har större prestanda än andra i synnerhet användarfall, men en langu ålder är aldrig bättre än någon annan i alla avseenden. Ett sätt att hantera skalan är att skilja problem som nämnts 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 är det användbart att skapa en meddelandekurarkitektur Det här innebär helt enkelt att placera ett meddelandekössystem mellan komponenter så att orderna 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 speciellt användbar för att skicka handel till en exekveringsmotor Om motorn lider under tung latens kommer den att backa upp affärer. En kö mellan handelssignalgenerern och exekverings-API kommer att lindra denna fråga på bekostnad av potentiell handelsladdning. En väl respekterad open source message queue broker är RabbitMQ. Hardware och Operating Systems. The hårdvara som kör din strategi kan få en betydande inverkan på profita Det är inte ett problem som är begränsat till högfrekventa handlare. Ett dåligt val i hårdvaru - och operativsystem kan leda till maskinkrasch eller omstart vid det mest oupphörliga ögonblicket. Därför är det nödvändigt att överväga var din ansökan kommer att ligga. Valet är generellt mellan en personlig skrivbordsmaskin, en fjärransluten server, en molnleverantör eller en utbytessamlad 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 betydande nackdelar. Det främsta är att versionerna av operativsystem som är designade för stationära maskiner sannolikt kommer att kräva omstartar 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ända hårdvara i ett hem eller en lokal kontorsmiljö kan leda till internetanslutning och strömuppehållsproblem. Huvudet b enfit av ett skrivbordssystem är att betydande hästkrafter kan köpas för bråkdelen av kostnaden för en fjärr dedikerad server eller ett molnbaserat system med jämförbar hastighet. En dedikerad server eller molnbaserad maskin, men ofta dyrare än ett skrivbordsalternativ, möjliggör mer betydande infrastruktur för redundans, t. ex. automatisk säkerhetskopiering, möjligheten att mer enkelt uppnå uppetid 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 detta vanligtvis via GUI Remote Desktop Protocol RDP I Unix-baserade system används kommandoraden Secure SHell SSH Unix-baserad serverinfrastruktur är nästan alltid kommandoradsbaserad, vilket gör att GUI-baserade programmeringsverktyg som MatLab eller Excel omedelbart inte kan användas. - located server, eftersom frasen används på kapitalmarknaderna, är helt enkelt en dedikerad server som ligger inom en utbyte för att minska ce latency av handelsalgoritmen Detta är absolut nödvändigt för vissa högfrekventa handelsstrategier, som är beroende av låg latens för att generera alfa. Den sista aspekten till hårdvaruval och valet av programmeringsspråk är plattformsoberoende. Finns det ett behov av kod för att köra över flera olika operativsystem Är koden avsedd att köras på en viss typ av processorarkitektur, t. ex. Intel x86 x64 eller kommer det att kunna utföras på RISC-processorer som de som tillverkas av ARM Dessa problem kommer att vara högt beroende på vilken frekvens och typ av strategi som implementeras. Rörlighet och test. Ett 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ötslig överflödig volatilitet, regionomfattande driftstopp för en moln servern leverantör eller oavsiktlig borttagning av en hel handelsdatabas År av vinst kan elimineras inom några sekunder med en dåligt utformad arkitektur. Det är absolut nödvändigt att överväga frågor som debuggng, testning, loggar, säkerhetskopiering, hög tillgänglighet och övervakning som kärnkomponenter i ditt system. Det är troligt att det i alla rimliga fall komplicerad kundanpassad kvantitativ handelsansökan kommer minst 50 utvecklings tid att användas till 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 utföra ett program med inmatning av godtyckliga brytpunkter i kodbanan, som tillfälligt stoppar utförandet för att undersöka systemets tillstånd. Huvuddelen av debugging är att det är möjligt att undersöka kodens beteende före en känd kraschpunkt. Stoppning är en viktig komponent i verktygslådan för att analysera programmeringsfel. De brukar användas 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 verbose uttalanden Trots denna tendens skickar Python med pdb som är ett sofistikerat felsökningsverktyg. Microsoft Visual C IDE har omfattande GUI-felsökningsverktyg, medan för kommandoraden Linux C programmerare, finns 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 kodvägar, som hjälper till att säkerställa att ett system beter sig som det ska Ett senare paradigm är känt som Testdriven utveckling TDD, där testkoden utvecklas mot ett visst gränssnitt utan genomförande Före slutförandet av den faktiska kodbasen kommer alla test att misslyckas. Som kod skrivs att fylla i ämnena, kommer testen så småningom alla att passera, vid vilken tidpunkt utveckling ska upphöra. TDD kräver omfattande upfront spe cifiering design samt en sund disciplin för att kunna genomföras framgångsrikt I C ger Boost en enhetstestrama I Java finns JUnit-biblioteket för att uppfylla samma syfte. Python har även den unittest modulen som en del av standardbiblioteket Många Andra språk har enhetstestningsramar 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ö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 vanligen 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. Microsoft Windows och Linux levereras med omfattande systemloggning och programmeringsspråk tenderar att sh ip med standardloggningsbibliotek som täcker mest användningsfall Det är ofta klokt att centralisera loggningsinformation för att analysera det senare, eftersom det ofta kan leda till idéer om förbättring av prestanda eller felsökning, vilket nästan säkert kommer att ha en positiv inverkan När du loggar på ett system kommer 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 att övervaka systemnivåvärden såsom disk användning, tillgängligt minne, nätverksbandbredd och CPU-användning ger grundläggande belastningsinformation. Leveransmått såsom abnorm prisvolym, plötsliga snabba drawdowns och kontoexponering för olika sektorer bör också övervakas kontinuerligt. Vidare bör ett tröskelsystem initieras som meddelar när vissa mätvärden bryts, höjer meddelandemetoden e-post, sms, automatiserad telefon ca ll beroende på graden av metrisk. Systemövervakning är ofta domänen för systemadministratören eller operatörshanteraren Men som en enda handelsutvecklare måste dessa mätvärden etableras som en del av den större designen. Många lösningar för övervakning finns proprietära, värd och öppen källkod som möjliggör omfattande anpassning av mätvärden för ett visst användningsfall. Backup och hög tillgänglighet bör vara främsta problem för ett handelssystem Överväga följande två frågor 1 Om en hel produktionsdatabas med marknadsdata och handelshistorik raderades utan säkerhetskopiering, hur skulle 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 re store 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 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-t yped 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 o f 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 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 woul d 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 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 req uired, 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. Name of the Project Online Trading System Project with Source Code. Software Requirements Visual Studio, SQL Server 2005, HTML, Java Script. Project Description The main objective of developing Online Trading System Project is to provide effective trading tool over the internet This final year proj ect helps users to buy and sell company shares online This system works with the new user registration by clicking on create new user link on homepage, check the different company trading share values, buy selected company s number of shares, sell shares which already bought earlier, find out the price alerts, know about the price alerts, and user account balance details and web technologies used to create this final year project. Download Online Trading System project abstract, Project Report, project documentation, project source code, database File, project ppt. Related Projects. manali Dec 03, 2012 13 24.plz give me online dealing management document file nd software using front end nd back end my sql help me. selvam Feb 16, 2013 05 10.i want doc for online trading system. preeti Apr 21, 2013 08 00.plz tell me how run these. kepal Jul 16, 2013 10 15.i want treding managment system mini project for bca. Ashish May 02, 2016 19 34.please send me user id and password of online trading mgmt sy stem I humble requested to you. Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising If you continue browsing the site, you agree to the use of cookies on this website See our User Agreement and Privacy Policy. Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising If you continue browsing the site, you agree to the use of cookies on this website See our Privacy Policy and User Agreement for details. Explore all your favorite topics in the SlideShare app Get the SlideShare app to Save for Later even offline. Continue to the mobile site. Double tap to zoom out. A project report on online trading. Share this SlideShare. LinkedIn Corporation 2017.

No comments:

Post a Comment