Monday, October 3, 2016

C ++ In Die Handel Stelsels

Is dit die moeite werd om te leer C ++ in diepte Net vir 'n loopbaan in 'n lae latency handel? [Gesluit] Ek stel belang in 'n ultra hoë frekwensie handel en Java is die taal wat ek die beste ken. Ek was altyd onder die indruk wat ek wil hê dat my C ++ vaardighede vervolmaak ten einde binne die ultra hoë frekwensie domein (geen woordspeling bedoel) om te werk want baie van die werk specs lyk om te vra vir hierdie. Elders op die internet Ek het gesien hoe mense kommentaar lewer dat Java eintlik verkies omdat jy Java-ontwikkelaars baie makliker kan vind. Maar, het ek gedink dit 'n slegte argument, want in terme van ultra hoë frekwensie, moet jy 'n bestelling so gou as moontlik en die ontwerp van jou stelsel wat gebaseer is op die gemak van die vind van programmeerders is nie van plan om te bereik wat jy nodig het in terme van latency gryp . So, sou jy sê ek die beste sou wees af te konsentreer op Java, of is dit onvermydelik om te spesialiseer in C ++ in orde te kry in hierdie beroep? C ++ Trading Systems Ontwikkelaars My kliënt is tans op soek na 'n hoogs gemotiveerde C ++ Trading Systems Ontwikkelaars met gedemonstreer ervaring in die ontwerp, ontwikkeling en die lewering van kern produksie sagteware oplossings in 'n missie omgewing krities handel stelsels. Groot verantwoordelikhede sluit in: * Beoordeling van sake en stelsels vereistes en die ontwikkeling van funksionele spesifikasies * Ontwerp en ontwikkel 'n hoë gehalte, hoë werkverrigting handel stelsels sagteware geskryf in C ++ te lewer tydlyne en vereistes te voldoen * Voldoening aan die ontwikkeling van sagteware lewensiklus proses / metode * Bou besigheid vlak onderwerp kundigheid in die handel stelsels funksies en verwerking * Verskaf tweede vlak ondersteuning vir produksie op 'n ad hoc-basis wanneer nodig kwalifikasies: * Vol sagteware-ontwikkeling lewensiklus ervaring in 'n missie kritieke omgewing handel stelsels 'n moet. Opsies, aandele, termynkontrakte, ens * Moet in besit uitstekende sagteware ontwerp vaardighede en kennis van gevorderde datastrukture * Moet buitengewoon sterk C ++ kennis en debugging vaardighede in 'n Linux-omgewing * Solid kennis van objekgeoriënteerde programmering konsepte 'n moet * Sterk kennis van TCP / IP multicast-en-potjie programmering vereis * Kennis van die hupstoot biblioteke en STL vereis * Moet ondervinding in die ontwikkeling van real-time programme in 'n verspreide verwerking argitektuur * Moet beskik oor uitstekende organisatoriese en kommunikasievaardighede * Moet in staat wees om doeltreffend te werk in 'n span omgewing * Sterk kennis van die logiese besigheid domein opsies of Aandele handel stelsels 'n groot pluspunt * Ondervinding kodering koppelvlak oplossings vir los, OPRA, CTA of UTP 'n groot pluspunt * Kennis van script tale soos Python, Shell en Perl n plus Opleiding en ondervinding: * Minimum van 'n B-graad of ekwivalent in IT / Rekenaarwetenskap * 7 + jaar ondervinding in C ++ ontwikkeling * 5 + jaar van gedemonstreer ervaring in die lewering van sagteware oplossings in 'n omgewing handel stelsels vir 'n Exchange of 'n Wall Street firma Eric Sultzer Pos beskrywing Op soek na 'n kundige, hands-on senior C ++ ontwikkelaar ons Trading Risiko Beheer span aan te sluit. Dit is 'n gulde geleentheid om te werk met 'n voorpunt-tegnologie stapel en leer oor elektroniese handel oor aandele, genoteerde afgeleide, krediet en tariewe. Die Trading Risiko Beheer span is in die middel van al die elektroniese handel oor die firma. Ons is verantwoordelik vir die bestuur van risikobestuur aansoeke oor gelykheid en vaste inkomste sake-eenhede. Aansoeke wat aan WVK-span koppelvlak met al handel stelsels om regulatoriese reëls en vereistes interne risiko te vervul. Dit senior tegnoloog rol is hoofsaaklik in die ontwikkeling / kodering / toets / ontplooiing van kritiese, 'n baie lae-latency handel risiko tjek stelsels in C ++. Ervaring in 'n lae-latency bediener kant proses van ontwikkeling en optimalisering tegnieke vereis. Bykomende verantwoordelikhede sluit koördineer met ander interne tegnologie spanne te bou, toets, en te implementeer opwindende nuwe funksies en aan bestaande aanleg infrastruktuur te verbeter. Sterk Engelse kommunikasievaardighede vereis. Scripting, DB SQL, KDB kennis 'n plus. Span-georiënteerde omgewing. kwalifikasies Vaardighede wat nodig is: - Deskundige C ++ programmeringstaal kennis - Understanding Kode struktuur op die CPU pyplyn - Optimizing Kode vir 'n NUMA vriendelike argitektuur - Understanding Van CPU kas lyn en organisasie van caches - Sterk Verbale en geskrewe kommunikasie en interpersoonlike vaardighede. Ons het iemand nodig wat goed in wisselwerking met die span en is gemaklik in 'n handel vloer omgewing. - UNIX / Linux vaardighede, die meerderheid van die stelsel loop op Linux - Need Om in staat wees om druk goed hanteer, ons is 'n baie besige span en produksie probleme moet vinnig vas te stel. - Die Begeerte om te leer! Vaardighede Gekose: - Scripting (Perl, Shell, ens) - Database (SQL, DB ontwerp, ens) Q-kode kennis oor KDB Senior C ++ outomatiese handel stelsel Ontwikkelaars 2015/03/01 21:50 Opgewonde oor die ontwikkeling van outomatiese handel stelsels in C ++? Is jy, as 'n ontwikkelaar, uitgedaag deur komplekse tegniese probleme binne 'n vinnige, dinamiese omgewing? Is jy in staat om die nuutste tegnologie te gebruik om hierdie probleme in elegante tegniese oplossings te vertaal? As jy ten minste 5 jaar ondervinding in die werk met C ++, kan jy die Senior C ++ outomatiese handel stelsel Ontwikkelaars ons is op soek na wees. Ons is Tam, 'n internasionale handel maatskappy, hoofkwartier in Amsterdam. Met meer as 700 kollegas oor vier vastelande bied ons voortdurend billike en hoogs mededingende pryse vir die koop en verkoop van aandele, effekte, opsies, futures, ETF's ensovoorts. Dit staan ​​bekend as 'mark maak. Ons bou markte en bied likiditeit aan internasionale handel in Europa, die VSA en Asië-Stille Oseaan. Ons maak finansiële markte billike, oop en betroubare. Ons het nie net handel wanneer ons voel. Nie net vir ons vooruitsigte is helder, maar 24 uur per dag. Ongeag hoe die markte gaan, ons is daar, altyd by ons eie risiko, met behulp van ons eie kapitaal. 'Waarde die verskil' som dit perfek. Dit verduidelik in 'n neutedop wat ons elke dag doen. Dit nooi u ook om te verken hoe ons ons werk anders te doen. Ons het daardie verskil sedert 1986 gewaardeer; die jaar het ons begin op die Amsterdam gebaseer Europese Options Exchange met 'n enkele vloer handelaar. Vandag is ons een van die mees dinamiese, innoverende en suksesvolle maatskappye in Nederland en elders. IT by Tam Sedert die saak op die vloer verander na die skerm gebaseer handel, is ons voortdurend moet die mees gevorderde tegnologie, handel sagteware en verbindings na die mark. In kort, moet ons die beste IT-professionele mense te ontwikkel, te optimaliseer en te ondersteun ons stelsels en gereedskap. Die atmosfeer is ons besig om in is vinnig, maar opwindend. Dit maak dit op Tam 'n groot uitdaging waardeur kundigheid, innovasie en pret gaan hand aan hand elke dag. Wat jy doen As 'n Senior C ++ outomatiese handel stelsel Ontwikkelaars jy sal verantwoordelik wees vir die ontwikkeling van 'n hoë-spoed outomatiese handel stelsels in C ++ vir die Linux-bedryfstelsel wees. Deur nou saam te werk met ander ontwikkelaars, handelaars en navorsers, sal jy reageer op komplekse versoeke met elegante tegniese oplossings met behulp van die nuutste tegnologie. Met jou sterk objekgeoriënteerde C ++ vaardighede wat jy in staat is om te ontwerp en te implementeer nuwe winsgewende handel strategieë, terwyl die bestuur van duidelike verwagtinge teenoor jou interne belanghebbendes. Deur die deel van jou uitgebreide kennis met jou spanlede en lei junior kollegas in tegniese besluite, sal jy die ontwikkeling span te ondersteun om 'n begrip van die kompleksiteit van die besigheid te kry. Wat jy nodig het 'n spanspeler en kommunikeerder wat kreatiewe vryheid en onafhanklikheid geniet. C ++ Trading Systems Ontwikkelaars Die MIAX Options Exchange is tans op soek na 'n hoogs gemotiveerde C ++ Trading Systems Ontwikkelaars met gedemonstreer ervaring in die ontwerp, ontwikkeling en die lewering van kern produksie sagteware oplossings in 'n missie omgewing krities handel stelsels. Princeton, NJ Organisasiestruktuur: Die ontwikkelaar sal 'n integrale deel van 'n kern ontwikkeling span wees en verslag aan die Trading System Development bestuurspan. kwalifikasies: • Volle sagteware-ontwikkeling lewensiklus ervaring in 'n omgewing missie kritieke handel stelsels 'n moet ... Options, aandele, termynkontrakte, ens • Moet in besit uitstekende sagteware ontwerp vaardighede en kennis van gevorderde datastrukture • Moet buitengewoon sterk C ++ kennis en debugging vaardighede in 'n Linux omgewing • grondige kennis van Objekgeoriënteerde programmering konsepte n moet Sterk kennis van TCP / IP multicast-en-potjie programmering • vereis • kennis van die hupstoot biblioteke en STL vereis • moet ondervinding in die ontwikkeling van real-time programme in 'n verspreide verwerking argitektuur • 'moet uitstekende organisatoriese en kommunikasievaardighede • Moet in staat wees om doeltreffend te werk in 'n span omgewing • Sterk kennis van die logiese besigheid domein opsies of Aandele handel stelsels 'n groot pluspunt • Ondervinding kodering koppelvlak oplossings vir los, OPRA, CTA of UTP 'n groot pluspunt • kennis van script tale soos Python, Shell en Perl n plus Opleiding en ondervinding: • Minimum van 'n B-graad of ekwivalent in IT / Rekenaarwetenskap • 7 + jaar ondervinding in C ++ ontwikkeling • 5 + jaar van gedemonstreer ervaring in die lewering van sagteware oplossings in 'n omgewing handel stelsels vir 'n Exchange of 'n Wall Street firma Trading Systems Ontwikkelaars Tot $ 105k verantwoordelikhede: - ontwikkeling Van real-time handel stelsel sagteware gebruik van C ++ en C #. - Gebruik Van generiese / STL, socket I / O, multi-threading, Objekgeoriënteerde Analise & amp; ontwerp. - Proven Ervaring skryf haalbare real time orde / quote / gebeurtenis verwerking bediener sagteware is 'n pluspunt. Beleef met bediener aansoek ontwikkeling in 'n omgewing vensters. Vermoë om te werk in 'n span en soliede geskrewe en verbale kommunikasie vaardighede. Vermoë om die werk van 'n hoë vlak maatskappy se behoeftes en eksterne spesifikasies vervaardig akkurate beramings en dan lewer betroubare hoë gehalte kode vir diegene skattings met toesig vereis. kwalifikasies: Beleef of kursuswerk te skryf bediener toepassings met behulp van C ++ wenslik. - Able Om te werk in 'n Windows ontwikkeling omgewing. Beleef of kursuswerk met behulp van relasionele databasisse en SQL. - Demonstrated Belangstelling in High Performance Computing. - Finansiële Bedryf kennis en ervaring wenslik. Beleef die ontwikkeling van web dienste en ander SOA dienste, en web-programme, IIS, ASP wenslik. Programmering werk in Chicago, Jobs, Chicago, C ++, C #, STL, Multithreading, handel stelsels, sagteware ontwikkelaar, Programmering, Programmer Beste Programmering taal vir Algorithmic Trading Systems? Deur Michael Saal-Moore op 26 Julie 2013 Een van die mees algemene vrae wat ek ontvang in die QS Koevert is "Wat is die beste programmeertaal vir algoritmiese handel?". Die kort antwoord is dat daar geen "beste" taal. Strategie parameters, prestasie, modulariteit, ontwikkeling, veerkragtigheid en koste moet al oorweeg. In hierdie artikel sal uiteensetting van die nodige komponente van 'n algoritmiese handel stelsel argitektuur en hoe besluite oor die implementering invloed op die keuse van taal. Eerstens, sal die belangrikste komponente van 'n algoritmiese handel stelsel in ag geneem word, soos die navorsing gereedskap, portefeulje-optimaliseerder, risikobestuurder en uitvoering enjin. Daarna sal verskillende handel strategieë ondersoek word en hoe hulle invloed op die ontwerp van die stelsel. In die besonder die frekwensie van die saak en die waarskynlike handel volume sal beide bespreek word. Sodra die handel strategie gekies is, is dit nodig om argitek die hele stelsel. Dit sluit in die keuse van hardeware, die bedryfstelsel (s) en stelsel veerkragtigheid teen seldsame, potensieel katastrofiese gebeure. Terwyl die argitektuur oorweeg word, moet daar behoorlik ag gegee word aan prestasie - beide om die navorsing gereedskap sowel as die lewendige uitvoering omgewing. Wat is die handel stelsel probeer om te doen? Voordat jy besluit op die "beste" taal waarmee 'n outomatiese handel stelsel te skryf is dit nodig om die vereistes te definieer. Is die stelsel gaan suiwer uitvoering gebaseer? Sal die stelsel vereis dat 'n risikobestuur of portefeulje konstruksie module? Sal die stelsel vereis dat 'n hoë-prestasie backtester? Vir die meeste strategieë die handel stelsel kan verdeel word in twee kategorieë: Navorsing en sein generasie. Navorsing handel oor evaluering van 'n strategie prestasie oor historiese data. Die proses van evaluering van 'n handel strategie oor data voor mark staan ​​bekend as back testing. Die grootte van data en algoritmiese kompleksiteit sal 'n groot impak op die rekenaarmatige intensiteit van die backtester het. CPU spoed en samelopendheid is dikwels die beperkende faktore in die optimalisering van uitvoering navorsing spoed. Sein generasie is gemoeid met die opwekking van 'n stel van handel seine van 'n algoritme en sulke bestellings stuur na die mark, gewoonlik deur 'n makelaar. Vir sekere strategieë 'n hoë vlak van prestasie vereis. I / O kwessies soos netwerk bandwydte en latency is dikwels die beperkende faktor in die optimalisering van die uitvoering stelsels. So die keuse van tale vir elke komponent van jou hele stelsel kan heel anders wees. Tipe, frekwensie en volume van strategie Die tipe algoritmiese strategie in diens sal 'n aansienlike impak op die ontwerp van die stelsel het. Dit sal nodig wees om te oorweeg die markte verhandel word, die konneksie na eksterne data verskaffers, die frekwensie en volume van die strategie, die kompromis tussen gemak van ontwikkeling en verbetering van die prestasie, sowel as enige persoonlike hardeware, insluitend mede geleë persoonlike bedieners, GPU's of FPGAs wat nodig mag wees. Die tegnologie keuses vir 'n lae-frekwensie Amerikaanse aandele strategie sal grootliks verskil van dié van 'n hoë-frekwensie statistiese arbitrage strategie handel oor die termynmark wees. Voor die keuse van taal baie data verskaffers moet geëvalueer alledaagse n strategie aan die hand. Dit sal nodig wees om verbinding met die verkoper, struktuur van enige APIs, tydigheid van die data, bergingsvereistes en veerkragtigheid te oorweeg in die lig van 'n ondernemer gaan af. Dit is ook wys om 'n vinnige toegang tot verskeie verskaffers in besit te neem! Verskeie instrumente almal hul eie stoor eienaardighede, voorbeelde van wat insluit verskeie ENKELE simbole vir aandele en verval datums vir Toekomsnavorsing (nie aan enige spesifieke OTC data te noem). Dit moet ingereken in die platform ontwerp. Frekwensie van strategie is waarskynlik een van die grootste oorsake van hoe die tegnologie stapel sal gedefinieer word nie. Strategieë in diens data meer dikwels as fyn of tweedens bars vereis betekenisvolle ag met betrekking tot prestasie. 'N Strategie oorskry tweedens bars (bv merk data) lei tot 'n prestasiegedrewe ontwerp as die primêre vereiste. Vir 'n hoë frekwensie strategieë 'n aansienlike bedrag van die mark data sal moet word gestoor en geëvalueer. Sagteware soos HDF5 of KDB + word algemeen gebruik vir hierdie rolle. Met die oog op die uitgebreide volumes van data wat nodig is vir HFT aansoeke te verwerk, moet 'n groot skaal new backtester en uitvoering stelsel gebruik word. C / C ++ (moontlik met 'n paar assembler) is geneig om die sterkste taal kandidaat. Ultrahoëfrekwensie strategieë sal ongetwyfeld vereis persoonlike hardeware soos FPGAs, ruil mede-plek en kernal / netwerk koppelvlak tuning. navorsing Systems Navorsing stelsels tipies behels 'n mengsel van interaktiewe ontwikkeling en outomatiese script. Die voormalige vind dikwels plaas in 'n IDE soos Visual Studio, Matlab of R Studio. Laasgenoemde behels uitgebreide numeriese berekeninge oor talle parameters en data punte. Dit lei tot 'n taalkeuse verskaffing van 'n eenvoudige omgewing te toets kode, maar bied ook voldoende prestasie om strategieë oor verskeie parameter dimensies evalueer. Tipiese Ides in hierdie ruimte sluit Microsoft Visual C ++ / C #, wat uitgebreide ontfouting nuts,-kode voltooiing vermoëns bevat (via "IntelliSense") en eenvoudige oorsigte van die hele projek stapel (via die databasis ORM, LINQ); Matlab. wat ontwerp is vir 'n uitgebreide numeriese lineêre algebra en gevectoriseerd bedrywighede, maar in 'n interaktiewe konsole wyse; R Studio. wat vou die R statistiese taal konsole in 'n volwaardige IDE; Eclipse IDE vir Linux Java en C ++; en semi-eiendom Ides soos Enthought Canopy vir Python, wat data-analise biblioteke soos Numpy sluit. Scipy. scikit-leer en pandas in 'n enkele interaktiewe (konsole) omgewing. Vir numeriese back testing, al die bogenoemde tale is geskik, maar dit is nie nodig om 'n GUI / IDE as die kode sal uitgevoer word "in die agtergrond" gebruik. Die eerste oorweging in hierdie stadium is dat van die uitvoering spoed. A saamgestel taal (soos C ++) is dikwels nuttig as die back testing parameter dimensies is groot. Onthou dat dit nodig versigtig vir sulke stelsels te wees, is as dit die geval is! Geïnterpreteer tale soos Python maak dikwels gebruik van 'n hoë-prestasie biblioteke soos Numpy / pandas vir die back testing stap, ten einde 'n redelike mate van mededingendheid met saamgestel ekwivalente handhaaf. Uiteindelik is die wat gekies is vir die back testing taal sal bepaal word deur spesifieke algoritmiese behoeftes sowel as die verskeidenheid van biblioteke beskikbaar in die taal (meer op wat hieronder). Tog kan die taal wat gebruik word vir die backtester en navorsing omgewings heeltemal onafhanklik van dié wat in die portefeulje konstruksie, risikobestuur en uitvoering komponente, soos gesien sal word. Portefeulje Konstruksie en Risikobestuur Die portefeulje konstruksie en risikobestuur komponente word dikwels oor die hoof gesien deur kleinhandel algoritmiese handelaars. Dit is byna altyd 'n fout. Hierdie gereedskap verskaf die meganisme waardeur kapitaal sal bewaar word. Hulle het nie net probeer om die aantal "riskante" verbintenis te verlig, maar ook hulself te verminder kansellasies van die ambagte, die vermindering van transaksiekoste. Gesofistikeerde weergawes van hierdie komponente kan 'n beduidende invloed op die gehalte en consistentcy van winsgewendheid het. Dit is maklik om 'n stabiele strategieë as die portefeulje konstruksie meganisme en risikobestuurder skep kan maklik aangepas word om verskeie stelsels te hanteer. So moet hulle in aanmerking kom essensiële komponente aan die begin van die ontwerp van 'n algoritmiese handel stelsel. Die werk van die portefeulje konstruksie stelsel is om 'n stel van gewenste ambagte te neem en te produseer die stel van die werklike ambagte wat kansellasies te verminder, blootstelling aan verskeie faktore (soos sektore, bateklasse, wisselvalligheid ens) in stand te hou en te optimaliseer die toekenning van kapitaal na verskeie strategieë in 'n portefeulje. Portefeulje konstruksie verminder dikwels 'n lineêre algebra probleem (soos 'n matriks faktorisering) en vandaar prestasie is hoogs afhanklik van die doeltreffendheid van die numeriese lineêre algebra implementering beskikbaar. Gemeenskaplike biblioteke sluit uBLAS. LAPACK en NAG vir C ++. MatLab beskik ook op groot skaal new matriksbewerkings. Python gebruik Numpy / Scipy vir sulke berekeninge. 'N gereeld herbalanseer portefeulje sal 'n saamgestel (en goed new!) Matriks biblioteek vereis dat hierdie stap uit te voer, sodat dit nie die handel stelsel knelpunt. Risikobestuur is 'n ander baie belangrike deel van 'n algoritmiese handel stelsel. Risiko kan kom in baie vorms: Groter wisselvalligheid (! Alhoewel dit as wenslik vir sekere strategieë kan gesien word), verhoogde korrelasies tussen bateklasse, teenparty verstek bediener kragonderbrekings, "Black Swan" gebeure en ongemerk foute in die handel kode, 'n paar te noem. Risikobestuur komponente probeer antisipeer die gevolge van oormatige wisselvalligheid en korrelasie tussen bateklasse en hul daaropvolgende effek (s) op die handel kapitaal. Dikwels is dit verminder tot 'n stel van statistiese berekeninge soos Monte Carlo "stres-toetse". Dit is baie soortgelyk aan die computational behoeftes van 'n afgeleide pryse enjin en as sodanig sal CPU-gebonde wees. Hierdie simulasies is hoogs parallelisable (sien onder), en 'n sekere mate, is dit moontlik om "gooi hardeware op die probleem". uitvoering Systems Die werk van die uitvoering stelsel is om gefiltreer handel seine van die portefeulje konstruksie en risikobestuur komponente ontvang en stuur hulle oor na 'n makelaar of 'n ander manier van toegang tot die mark. Vir die meerderheid van die kleinhandel algoritmiese handel strategieë behels dit 'n API of FIX verbinding met 'n makelaars soos Interaktiewe Brokers. Die primêre oorwegings wanneer jy moet besluit op 'n taal insluit gehalte van die API, taal-wrapper beskikbaarheid vir 'n API, uitvoering frekwensie en die verwagte glip. Die "kwaliteit" van die API verwys na hoe goed gedokumenteer is dit, watter soort prestasie dit bied, of dit moet selfstandige sagteware te verkry of 'n poort vasgestel kan word in 'n onthoofde mode (dit wil sê geen GUI). In die geval van Interaktiewe Brokers, die Trader WorkStation instrument moet hardloop in 'n GUI omgewing ten einde toegang tot hul API. Een keer het ek 'n lessenaar Ubuntu uitgawe installeer op 'n wolk bediener Amazon toegang Interaktiewe Brokers afstand, suiwer om hierdie rede! Die meeste API sal 'n C ++ en / of Java koppelvlak verskaf. Dit is gewoonlik tot die gemeenskap te taalspesifieke omhulsels vir C #, Python, R, Excel en MatLab ontwikkel. Let daarop dat met elke bykomende plugin gebruik (veral API omhulsels) is daar ruimte vir foute insluip in die stelsel. toets altyd plugins van hierdie soort en verseker dat hulle aktief in stand gehou. 'N waardevolle meter is om te sien hoeveel nuwe updates vir 'n kodebasis is gemaak in die afgelope maande. Uitvoering frekwensie is van die uiterste belang in die uitvoering algoritme. Let daarop dat honderde bestellings elke minuut kan gestuur word en as sodanig prestasie is van kritieke belang. Glip aangegaan sal word deur middel van 'n erg-presterende uitvoering stelsel en dit sal 'n dramatiese impak op winsgewendheid het. Staties-getik tale (sien onder) soos C ++ / Java is oor die algemeen 'n optimale vir uitvoering maar daar is 'n trade-off in die ontwikkeling tyd, toetsing en gemak van die onderhoud. Dinamiese-getik tale, soos Python en Perl is nou algemeen "vinnig genoeg". Maak altyd seker dat die komponente is ontwerp om in 'n modulêre wyse (sien onder), sodat hulle kan "omgeruil" uit as die stelsel skale. Argitektoniese beplanning en ontwikkelingsproses Die komponente van 'n handel stelsel, die frekwensie en volume vereistes wat hierbo bespreek is, maar stelsel infrastruktuur het nog gedek moet word. Diegene wat optree as 'n kleinhandel handelaar of besig om in 'n klein fonds sal waarskynlik "dra baie regeer". Dit sal die finale implementering van die stelsel wat nodig is om te wees wat die alfa model, risikobestuur en uitvoering parameters wees, en ook. Voordat delf in spesifieke tale die ontwerp van 'n optimale stelsel argitektuur bespreek sal word. Skeiding van Kommer Een van die belangrikste besluite wat by die begin moet word is hoe om "skei die kommer" van 'n handel stelsel. In die ontwikkeling van sagteware, beteken dit in wese hoe om op te breek die verskillende aspekte van die handel stelsel in aparte modulêre komponente. Deur bloot koppelvlakke by elk van die komponente is dit maklik om te ruil uit dele van die stelsel vir ander weergawes wat prestasie hulp, betroubaarheid of onderhoud, sonder om die wysiging enige eksterne afhanklikheid kode. Dit is die "beste praktyk" vir sulke stelsels. Vir strategieë teen laer frekwensies sulke praktyke word aangeraai. Vir ultra hoë frekwensie handel die reëlboek mag hê om dit te ignoreer ten koste van die opstel van die stelsel vir nog meer prestasie. 'N Meer styf gekoppel stelsel wat wenslik mag wees. Die skep van 'n komponent kaart van 'n algoritmiese handel stelsel is 'n artikel op sigself die moeite werd. Maar 'n optimale benadering is om seker te maak daar is afsonderlike komponente vir die historiese en real-time mark data insette, data stoor, toegang tot die inligting API, backtester, strategie parameters, portefeulje konstruksie, risikobestuur en outomatiese uitvoering stelsels. Byvoorbeeld, as die data stoor wat gebruik is tans onderpresteer, selfs teen beduidende vlakke van optimalisering, kan dit omgeruil met 'n minimale herskryf om die data inname of toegang data-API. Sover die as backtester en daaropvolgende komponente betref, is daar geen verskil. Nog 'n voordeel van vervreem komponente is dat dit kan 'n verskeidenheid van programmeertale wat gebruik word in die algehele stelsel. Daar is geen rede om te beperk tot 'n enkele taal as die kommunikasie metode van die komponente is taal onafhanklik. Dit sal die geval wees indien hulle kommunikeer via die TCP / IP, ZeroMQ of 'n ander taal-onafhanklike protokol. As 'n konkrete voorbeeld, kyk na die geval van 'n back testing stelsel in C geskryf ++ vir "verwerking van syfers" prestasie, terwyl die portefeuljebestuurder en uitvoering stelsels in Python geskryf met behulp van Scipy en IBPy. prestasie Oorwegings Prestasie is 'n belangrike oorweging vir die meeste handel strategieë. Vir hoër frekwensie strategieë is dit die belangrikste faktor. "Performance" dek 'n wye verskeidenheid van onderwerpe, soos algoritmiese uitvoering spoed, netwerk latency, bandwydte, data I / O, concurrency / parallelisme en skalering. Elkeen van hierdie gebiede word individueel gedek deur groot handboeke, so hierdie artikel sal net krap die oppervlak van elke onderwerp. Argitektuur en taalkeuse sal nou in terme van hul effek op prestasie bespreek word. Die heersende wysheid soos deur Donald Knuth. een van die vaders van Rekenaarwetenskap, is dat "voortydige optimalisering is die wortel van alle kwaad". Dit is byna altyd die geval nie - behalwe wanneer die bou van 'n hoë frekwensie handel algoritme! Vir diegene wat belangstel in die laer frekwensie strategieë is, 'n gemeenskaplike benadering is om 'n stelsel te bou in die eenvoudigste manier moontlik en net optimaliseer as knelpunte begin om te verskyn. Profilering gereedskap gebruik om te bepaal waar knelpunte ontstaan. Profiele gemaak kan word vir al die bogenoemde faktore, hetsy in 'n MS Windows of Linux-omgewing. Daar is baie bedryfstelsel en taal gereedskap wat beskikbaar is om dit te doen, sowel as nuts derde party. Taalkeuse sal nou in die konteks van prestasie bespreek word. C ++, Java, Python, R en MatLab bevat almal 'n hoë-prestasie biblioteke (hetsy as deel van hul standaard of ekstern) vir basiese datastrukture en algoritmiese werk. C ++ skepe met die Standard Sjabloon Biblioteek, terwyl Python bevat Numpy / Scipy. Gemeenskaplike wiskundige take te vinde in hierdie biblioteke en dit is selde voordelig vir 'n nuwe implementering skryf. Een uitsondering is wanneer hoogs persoonlike hardeware argitektuur vereis en 'n algoritme maak uitgebreide gebruik van eiendom uitbreidings (soos persoonlike caches). Maar dikwels "heruitvinding van die wiel" afval tyd dat 'n beter bestee kan word ontwikkel en die optimalisering van ander dele van die handel infrastruktuur. Ontwikkeling tyd is uiters kosbare veral in die konteks van uitsluitlike ontwikkelaars. Latency is dikwels 'n kwessie van die uitvoering stelsel as die navorsing gereedskap gewoonlik op dieselfde masjien. Vir die eerste keer nie kan latency voorkom by verskeie plekke langs die uitvoering pad. Databasisse moet geraadpleeg word (skyf / netwerk latency), seine moet gegenereer word (bedryfstelsel firmas, kernal boodskappe latency), handel seine gestuur (NIC latency) en bestellings verwerk (ruil stelsels interne latency). Vir hoër frekwensie bedrywighede is dit nodig om intiem vertroud is met kernal optimalisering asook die optimalisering van die netwerk oordrag geword. Dit is 'n diep gebied en is aansienlik buite die bestek van die artikel, maar as 'n UHFT algoritme verlang dan bewus wees van die diepte van kennis wat nodig is! Caching is baie nuttig in die toolkit van 'n kwantitatiewe handel ontwikkelaar. Caching verwys na die konsep van die stoor gereeld besoek data op 'n wyse wat toegang hoër-prestasie kan, ten koste van die potensiële staleness van die data. 'N Algemene gebruik geval kom voor in die web-ontwikkeling by die neem van die data van 'n skyf gerugsteun relasionele databasis en sit dit in die geheue. Enige daaropvolgende versoeke vir die data nie hoef te en so prestasie winste kan beduidend wees "die databasis getref". Vir handel situasies kan caching uiters voordelig wees. Byvoorbeeld, kan die huidige stand van 'n strategie portefeulje bewaar word in 'n kas totdat dit herbalanseer, sodanig dat die lys nie moet herskep op elke lus van die handel algoritme. Sulke wedergeboorte is geneig om 'n hoë CPU of skyf I / O werking wees. Maar kas is nie sonder sy eie sake. Herlewing van die kas data in 'n keer, as gevolg van die volatilie aard van die kas stoor, kan beduidende vraag op infrastruktuur te plaas. Nog 'n probleem is hond-hei. waar verskeie generasies van 'n nuwe kas kopie onder uiters hoë lading, wat lei tot mislukking waterval gedra. Dinamiese geheuetoekenning is 'n duur operasie in uitvoering sagteware. Dit is dus noodsaaklik vir hoër prestasie handel aansoeke om goed bewus wees hoe geheue word toegeken en deallocated tydens program vloei. Nuwer taal standaarde soos Java, C # en Python al uit te voer outomatiese vullisverwydering. wat verwys na deallocation van dinamiese toegeken geheue wanneer voorwerpe uitgaan van omvang. Vullisverwydering is baie nuttig tydens ontwikkeling as dit verminder foute en hulpmiddels leesbaarheid. Dit is egter dikwels sub-optimale vir sekere hoë frekwensie handel strategieë. Custom vullisverwydering word dikwels verlang vir hierdie gevalle. In Java, byvoorbeeld deur tuning die vullis versamelaar en hoop opset, is dit moontlik om 'n hoë werkverrigting vir HFT strategieë te verkry. C ++ verskaf nie 'n boorling vullis versamelaar en daarom is dit nodig om al geheuetoekenning / deallocation hanteer as deel van die implementering van 'n item. Terwyl potensieel vatbaar fout (potensieel lei tot hangend wysers) is dit baie nuttig om fyn beheer van hoe voorwerpe verskyn op die hoop vir sekere aansoeke het. By die keuse van 'n taal te verseker om te bestudeer hoe die vullis versamelaar werk en of dit kan verander word om te optimaliseer vir 'n spesifieke gebruik geval. Baie bedrywighede in algoritmiese handel stelsels is vatbaar vir Parallellisatie. Dit verwys na die konsep van die uitvoering van verskeie programmatiese bedrywighede op dieselfde tyd, d. w.z in "parallelle". Sogenaamde "embarassingly parallel" algoritmes sluit stappe wat ten volle onafhanklik van ander stappe kan bereken word. Sekere statistiese bedrywighede, soos Monte Carlo simulasies, is 'n goeie voorbeeld van embarassingly parallelle algoritmes soos elke ewekansige trekking en daaropvolgende operasie pad kan bereken word sonder kennis van ander paaie. Ander algoritmes is slegs gedeeltelik parallelisable. Vloeidinamika simulasies is so 'n voorbeeld, waar die domein van berekening kan onderverdeel, maar uiteindelik hierdie domeine moet met mekaar en sodoende die bedrywighede is gedeeltelik opeenvolgende kommunikeer. Parallelisable algoritmes is onderhewig aan die wet Amdahl se. Afsluiting beskrywing Die bladsy kan nie gevind word nie Die bladsy wat jy soek kan verwyder, het sy naam verander, of is tydelik nie beskikbaar nie. Probeer asseblief die volgende: Maak seker dat die webwerf adres vertoon in die adres bar van jou browser is spelfoute bevat. As jy hierdie bladsy bereik deur op 'n skakel, kontak die webwerf administrateur om hulle te waarsku dat die skakel verkeerd geformatteer. Klik op die knoppie Terug na 'n ander skakel te probeer. HTTP-fout 404 - Lêer of gids nie gevind nie. Internet Information Services (IIS) Tegniese inligting (vir ondersteuningspersoneel)


No comments:

Post a Comment