Monday 18 September 2017

Automatisoitu Kaupankäynnin System In C ++


Automaattisten kaupankäyntijärjestelmien luominen interaktiivisten välittäjien avulla Automaattinen kaupankäynti interaktiivisilla välittäjillä. Interactive Brokersin kaupankäyntialusta itse ei tarjoa automaattista kaupankäyntiä. Jotkut ratkaisut ovat kuitenkin käytettävissä kauppiaille, jotka haluavat automatisoida kaupankäyntijärjestelmiä IB Trader Workstation TSW - alustan avulla. Party-sovellusliittymät. Konsulttien ohjelmointi. Kolmannen osapuolen sovellusliittymät Sovellusohjelmointirajapinta API on kieliformaatti, jota sovellusohjelma käyttää kommunikointiin muiden järjestelmäsovellusten kanssa. Sovellusliittymä toimii rajapintana tai välikappaleena, joka mahdollistaa koodin kommunikoinnin IB-kauppapaikan kanssa Kolmannen osapuolen toimittajat tarjoavat useita omia sovellusliittymiä, jotka tarjoavat muokattavissa olevia, valmiita algoritmeja ja plug-and-play-kaupankäyntisovelluksia, jotka on suunniteltu toimimaan yhdessä IB: n Trader Workstation TWS-kauppapaikan kanssa. Kolmannen osan API: n luettelo on saatavilla IB-kotisivulta napsauta Koulutus-otsikkoa ja valitse Marketplace IB Re Anna vastuuvapauslauseke ja hyväksyykö ehdot, napsauta Hyväksyntäehdotus Hyväksy napsauttamalla tätä Napsauta Ohjelmistotyökalut-välilehteä ja alaotsikon Tilaus-hallintaohjelmistoa nähdäksesi kuvassa 1 esitetyt palveluntarjoajat ja tuotteet. Kuva 1 - Valitse Marketplace IB: n Ohjelmistotyökalut-välilehti kolmannen osapuolen toimittajien tarkastelemiseksi. Konsulttien ohjelmointi Markkinoilla IB on kaupallisesti saatavilla olevien sovellusliittymien lisäksi myös linkki ohjelmointikohteisiin, jotka voivat auttaa kauppiaita ja sijoittajia kehittämään omia indikaattoreita ja strategioita Käytetään automaattisessa kaupankäynnissä Konsultit tarjoavat koodauksen useilla eri kielillä, kuten Java, C, Visual Basic, SQL, Perl, Matlab sekä muut kauppapaikkakohtaiset kielet, joita voidaan käyttää IB: n kanssa. Muista, että ohjelmoijat voivat ohjelmoida Ehdoton säännöt eivätkä ne yleensä tarjoa ehdotuksia järjestelmän kannattavuuden parantamiseksi - vain koodin suorituskykyä Ennen kuin työskentelet Ohjelmoija, on tärkeää pystyä määrittelemään kaikki kaupankäyntijärjestelmän sisääntulo-, poistumis - ja hallintalogiikka. Jos se voidaan määritellä, se voidaan todennäköisesti koodata. Ohjelmointi IB-sovellusohjelmien kanssa Kolmas ratkaisu on sellaisille kauppiaille, joilla on taitoja tai halukkuutta Oppia omien API-ohjelmiensa suunnitteluun Interactive Brokers tarjoaa useita sovellusliittymiä, joita kauppiaat voivat käyttää yhteyden muodostamiseen joko TWS: n tai IB-yhdyskäytävän kautta. Yhteyden muodostaminen TWS: n kautta edellyttää, että sovellus on käynnissä, mutta antaa kauppiaille mahdollisuuden testata ja vahvistaa API-tilausten toimivuuden Yhdistäminen IB-yhdyskäytävän kautta toisaalta ei tarjoa käyttöliittymää testausta ja vahvistusta varten, mutta sallii API: n toimivan ilman suurta käyttöliittymäsovellusta käynnissä. Jos kolmannen osapuolen sovellusliittymät tarjoavat muokattavissa olevia, valmiita algoritmeja, IB API Ohjelmointiympäristö on olennaisesti raaka-aine IB tarjoaa laitteiston ja komponentit, ja käyttäjä tekee kaikki ohjelmointiohjelmat Käyttäjät voivat ohjelmoida eri kielillä, mukaan lukien C , Java-, ActiveX - tai DDE-Excelille Excelissa on useita API-asetuksia, joita kauppiaat voivat määrittää, kuvassa 2. IB API - oppaassa, joka on saatavilla Interactive Brokers - Web-sivuston haussa API-käyttöoppaassa, on myös yleiskatsaus Kuten eri ohjelmointikieliä koskevat ohjeet. Kuva 2 - Sovellusasetusten määrittäminen TWS: ssä. Yhteenveto Traders, jotka haluavat toteuttaa automatisoituja kaupankäyntijärjestelmiä Interactive Brokers - alustan kautta, on monenlaisia ​​vaihtoehtoja. Ei-ohjelmoijat voivat haluta tutkia kolmannen osapuolen API Toimittajat, jotka tarjoavat erilaisia ​​muokattavissa olevia tai plug-and-play-vaihtoehtoja Ainutlaatuisia ideoita myyvät kauppiaat voivat työskennellä pätevän ohjelmoinnin konsultin kanssa Ohjelmointikielellä tai ohjelmointikielen oppimisajankohdalla voi olla IB API - ratkaisuja kehitettäessä automaattisia kaupankäyntijärjestelmiä. Senior C Automated Trading System Developer. Getting innostunut kehittää automatisoituja kaupankäyntijärjestelmät C Oletko, kuten kehittäjä, haastoi b Y monimutkaiset tekniset ongelmat nopeasti dynaamisessa ympäristössä Voitko käyttää uusimpia tekniikoita näiden ongelmien kääntämiseksi tyylikkäiksi teknisiksi ratkaisuiksi Jos sinulla on vähintään 5 vuoden kokemus C: n kanssa, voit olla Senior C Automated Trading System Kehittäjä, jota etsimme. Kuka me olemme Olemme Optiver, kansainvälinen kauppayhtiö, jonka pääkonttori sijaitsee Amsterdamissa. Yli 700 työntekijää neljässä maanosassa tarjoamme jatkuvasti reiluja ja erittäin kilpailukykyisiä hintoja osakkeiden, joukkovelkakirjojen, optioiden ja futuurien ostoon ja myyntiin. , ETF jne. Sitä kutsutaan markkinoiden luomiseksi Rakennamme markkinoita ja tarjoamme likviditeettiä kansainvälisille pörsseille Euroopassa, USA: ssa ja Aasiassa. Rahoitusmarkkinat ovat oikeudenmukaisia, avoimia ja luotettavia. Emme vain kaupankäyntiä, kun meistä tuntuu. Näkymämme on kirkas, mutta 24 tuntia vuorokaudessa Millä tavalla markkinat menevät, olemme aina omalla vastuullamme, käytämme omaa pääomaamme Arvo ero erottuu täysin It Selittää pähkinänkuoressa mitä me teemme joka päivä. Se myös kehottaa sinua tutkimaan, miten toimimme eri tavoin. Olemme arvostelleet tätä eroa vuodesta 1986 lähtien, kun aloitimme Amsterdamin Eurooppa-vaihtoehdon kanssa yhdellä lattiakaupalla. Tänään me olemme yksi Dynaamisimmat, innovatiiviset ja menestyksekkäimmät yritykset Hollannissa ja muualla. IT: ssä Optiverissä Koska kaupankäynti lattialla muuttui näyttösuunnitteluksi, tarvitsemme jatkuvasti kehittyneimmän teknologian, kaupankäynnin ohjelmistoja ja yhteyksiä markkinoille. Lyhyesti sanottuna tarvitsemme parhaamme IT-ammattilaiset kehittävät, optimoivat ja tukevat järjestelmäämme ja työkaluihimme Ilmapiiri, jota toimimme, on nopea, mutta jännittävä Tämä tekee Optiveristä suuren haasteen, jossa asiantuntemus, innovaatio ja hauskuus kulkevat käsi kädessä joka päivä. Kaupankäyntijärjestelmäkehittäjä on vastuussa nopeiden automaattisten kaupankäyntijärjestelmien kehittämisestä C-käyttöjärjestelmässä C työskentelemällä tiiviissä yhteistyössä muiden kehittäjien kanssa kauppiaiden kanssa Voit vastata monimutkaisiin pyyntöihin tyylikkäillä teknisillä ratkaisuilla uusimpien teknologioiden avulla. Vahvojen objektiivisten C-taitojen avulla pystyt suunnittelemaan ja toteuttamaan uusia kannattavia kaupankäyntistrategioita samalla, kun hallitset selkeitä odotuksia sisäisiin sidosryhmiisi jakamalla laajat tietosi Tiimisi jäsenet ja ohjaavat juniorien kollegioita teknisissä päätöksissä, tuette kehitystyötä ymmärtämään liiketoiminnan monimutkaisuuden. A Tietojenkäsittelytieteen, tietotekniikan tai tietojärjestelmän maisterin tutkinto vähintään viiden vuoden työkokemus C: n ohjelmistokehittäjä, jolla on erinomainen kokemus STL: stä, Boostista ja muista suosituista avoimen lähdekoodin C-kirjastoista. Ymmärrät UNIX - ja Linux-käyttöjärjestelmät. Tietämys korkean suorituskyvyn tietotekniikasta, matala latenssi ja reaaliaikainen kehitys. Kokemus Jossa monisäikeinen C. strongin tuntemus rahoitusmarkkinoilta ja johdannaiskaupasta. Etupäässä 2 vuotta o F työkokemus automatisoidun kaupankäynnin kehittämisen valtakunnassa. Kunnianhimo kehittää itseäsi jatkuvasti koulutuksen ja työpaikan kehittämisen avulla. Syvällinen ymmärtäminen C 11 on plus. a taustalla matematiikan ja työkokemus algoritmeja on plus. be Joukkueen pelaaja ja kommunikaattori, joka nauttii luovasta vapaudesta ja riippumattomuudesta. Mitä saat Optiver on ennen kaikkea mielen tila Olemme etsimässä sinua, kun uskomme päivittäiseen parannukseen, kun haluat olla vakavasti palkittu suorituksestasi ja kun helposti sopeutat Muuttaa ja nauttia huumoria ja hauskaa Jotta voisimme olla konkreettinen, tarjoamme sinulle erinomaisen korvauksen Mutta tarjoamme myös suuria toissijaisia ​​etuja, kuten täysin maksetut ensiluokkaiset työmatkakulut, maksuton eläke, houkutteleva voitonjaon rakenne, siirtopaketit, Koulutusmahdollisuudet, sairausvakuutuksen alennukset, aamiais - ja lounaspalvelut, urheilu - ja vapaa-ajan aktiviteetit, perjantai-iltapäiväjuomat ja jopa viikoittainen omakotitalo ma Ssages. Interested Olemme 350 korkeasti koulutettua ammattilaista yli 30 eri maasta, jotka työskentelevät Optiverissä Amsterdamissa Pyrimme olemaan vertaansa vailla teollisuutemme, olemalla lahjakkaita, luovia ja tuloksellisimpia. Ei ole väliä kuinka pukeudumme tai mitä uskomme , Niin kauan kuin ylitämme toistensa ja toistensa odotukset. Jos olet valmis hakemaan, ja toivomme, että olet, käytä suoraan alla olevan painikkeen kautta Senior C: n automaattisen kaupankäyntijärjestelmän kehittäjää varten. Anna meille CV ja kirje Motivaatio englanniksi Sovelluksia ilman motiivipuuta ei tarkastella Kun ajattelemme, että taikuus on siellä, kuulet meiltä ennemmin kuin odotat Jos sinulla on kysyttävää, ota yhteyttä Marlouk Stekiin 31 20 708 70 00. Arviointi On osa sovellusmenettelyä. Seuraa kokousta C. Best ohjelmointikieli algoritmisille kaupankäyntijärjestelmille. Yksi yleisimmistä kysymyksistä, joita minulla on QS-postilaukussa, on Mikä on paras ohjelmointikieli algoritille Thmic trading Lyhyt vastaus on, että ei ole olemassa parasta kieltä Strategiaparametrit, suorituskyky, modulaarisuus, kehitys, joustavuus ja kustannukset on otettava huomioon Tässä artikkelissa kuvataan algoritmisen kaupankäyntijärjestelmäarkkitehtuurin välttämättömät komponentit ja miten täytäntöönpanon päätökset vaikuttavat Algoritmisen kaupankäyntijärjestelmän tärkeimpiä osia, kuten tutkimusvälineitä, portfoliooptimointia, riskienhallintaohjelmaa ja toteutusmoottoria. Seuraavaksi tarkastellaan erilaisia ​​kaupankäyntistrategioita ja miten ne vaikuttavat järjestelmän suunnitteluun. Kaupankäynnin taajuus ja todennäköinen kaupankäyntimäärä. Sekä kaupankäynnin strategiasta on valittu, että koko järjestelmä on arkkitehtuuri. Tämä sisältää laitteiston valinnan, käyttöjärjestelmän ja järjestelmän joustavuuden harvinaisia, mahdollisesti katastrofaalisia tapahtumia vastaan. Arkkitehtuuria on harkittava, suorituskykyä on kunnioitettava - sekä tutkimustyökaluille että suoralle toteutusympäristölle. Mitä kaupankäyntijärjestelmä yrittää tehdä? Ennen kuin päätetään parhaasta kielestä, jolla kirjoitetaan automaattinen kauppajärjestelmä, on tarpeen määritellä vaatimukset. Onko järjestelmä tarkoitus Puhtaasti toteutus perustuu Järjestelmä edellyttää riskienhallintaa tai portfolion rakentamista moduuli Järjestelmä tarvitsee korkean suorituskyvyn backtester Useimmille strategioille kauppa-järjestelmä voidaan jakaa kahteen luokkaan Tutkimus - ja signaaligeneraatio. Tutkimus koskee strategian suorituskyvyn arviointia Historialliset tiedot Kaupankäyntistrategian arvioimisprosessi aikaisempien markkinatietojen perusteella tunnetaan takertelynä Tietokoko ja algoritminen monimutkaisuus vaikuttavat merkittävästi takaisinkytkimen suorittimen nopeuden laskennalliseen intensiteettiin ja samankaltaisuus ovat usein rajoittavia tekijöitä tutkimuksen toteutuksen nopeuden optimoinnissa. Signaalin generointi koskee algoritmien sarjan kaupankäyntisignaaleja M ja tällaisten tilausten lähettäminen markkinoille, yleensä välityksen kautta. Tietyissä strategioissa vaaditaan korkeaa suorituskykyä. IO-ongelmat, kuten verkon kaistanleveys ja latenssi ovat usein rajoittava tekijä optimoimalla toteutusjärjestelmiä. Koko järjestelmä voi olla varsin erilainen. Tyyppinen, taajuus ja volyymi strategia. Atyypillä algoritmisella strategialla on merkittävä vaikutus järjestelmän suunnitteluun On tarpeen pohtia markkinoita, joilla käydään kauppaa, yhteydet ulkoisiin datan myyjiin, Strategian taajuus ja volyymi, helppokäyttöisyyden ja suorituskyvyn optimoinnin välinen kompromissi sekä mahdolliset mukautetut laitteet, mukaan luettuina yhteensopivat muokatut palvelimet, GPU: t tai FPGA: t. Teknologian valinnat matalan taajuuden Yhdysvaltain osakesijoitusstrategia poikkeaa huomattavasti korkeatasoisista tilastollisista arbitraasistrategiasta kaupankäynnissä futuurimarkkinoilla. Ennen l On arvioitava, että kyseiseen strategiaan liittyy useita toimittajia. On tarpeen tarkastella liittymistä myyjään, minkä tahansa sovellusliittymän rakennetta, tietojen ajantasaisuutta, varastointivaatimuksia ja joustavuutta sen offline-tilassa olevan myyjän edessä. On myös viisasta, että niillä on nopea pääsy useille toimittajille. Erilaisilla instrumenteilla on kaikki omat varastokirjoitukset, joista esimerkkejä ovat useat ticker-symbolit osakkeista ja futuuripäivät futuurista puhumattakaan erityisistä OTC-tiedoista. Tämä on otettava huomioon alustan suunnitteluun . Strategian taajuus on todennäköisesti yksi suurimmista tekijöistä teknologiapinoa määriteltäessä. Strategiat, joissa käytetään tietoja useammin kuin minuuttia tai toisaalta palkkeja, edellyttävät suorituskyvyn kannalta merkittävää huomiota. Suorituskykyinen suunnittelu ensisijaiseksi vaatimukseksi Suurtaajuustrategioissa tarvitaan huomattava määrä markkinoita koskevia tietoja Tallennetaan ja arvioidaan Näitä rooleja käytetään usein HDF5: n tai kdb: n kaltaisten ohjelmien käsittelemiseksi. HFT-sovellusten tarvitsemien suurien määrien käsittelemiseksi on käytettävä laajasti optimoitua takaisinkytkentä - ja suoritinjärjestelmää. CC mahdollisesti jossakin kokoonpanossa todennäköisesti Voimakkaimmat kielen ehdokkaat Erittäin korkeat taajuusstrategiat vaativat melkein varmasti mukautettuja laitteistoja, kuten FPGA: t, vaihtoyhteyden sijainti ja kernal-verkkoliitännän viritys. Research Systems. Research-järjestelmät sisältävät tyypillisesti interaktiivisen kehityksen ja automaattisen komentosarjan yhdistelmän. IDE, kuten Visual Studio, MatLab tai R Studio Viimeksi mainittu sisältää laajoja numeerisia laskelmia lukuisten parametrien ja datapisteiden kautta. Tämä johtaa kielivalintaan, joka tarjoaa yksinkertaisen ympäristön koodin testaamiseen, mutta tarjoaa myös riittävän suorituskyvyn strategioiden arvioimiseksi useilla parametrijaksoilla. IDE: t tässä tilassa ovat Microsoft Visual CC, Joka sisältää laajoja virheenkorjausapuohjelmia, koodinvalmistumisominaisuuksia Intellisense-ohjelman kautta ja selkeät katsaukset koko projektin pinosta tietokannan ORM kautta LINQ MatLab, joka on suunniteltu laajaan numeeriseen lineaariseen algebraan ja vektorisoituneisiin operaatioihin, mutta vuorovaikutteisella konsolilla R Studio, joka käärii R Tilastolliseen kielikonsoliin täysipainoisessa IDE Eclipse IDE - ohjelmassa Linux Java - ja C - puhelimissa sekä semi-proprietary IDE - ohjelmissa, kuten Python-keskusteluissa, jotka sisältävät datananalyysikirjastoja, kuten NumPy SciPy - skikit-oppia ja pandoja yhdessä vuorovaikutteisessa konsoliympäristössä. Numeeriset backtesting, kaikki edellä mainitut kielet ovat sopivia, vaikka GUI IDE: n käyttäminen ei ole tarpeen, koska koodi toteutetaan taustalla. Tässä vaiheessa tärkein huomio on suorituksen nopeus. Käännetty kieli, kuten C, on usein hyödyllinen Jos takaisinkytkentäparametrin mitat ovat suuret Muista, että tällaiset järjestelmät on varottava, jos näin on Kuten esimerkiksi Python käyttävät usein korkean suorituskyvyn omaavia kirjastoja, kuten NumPy-pandaja takaisinkytkentävaiheeseen, jotta voidaan säilyttää kohtuullinen kilpailukyky ja koottu vastaavuus. Lopulta selektiiviselle kielelle määritetään kieli Algoritmiset tarpeet sekä kielellä saatavilla olevat kirjastot voivat olla enemmän kuin alla. Taustatestin ja tutkimusympäristön käyttämät kielet voivat kuitenkin olla täysin riippumattomia salkun rakentamisesta, riskienhallinnasta ja toteutuskomponenteista, kuten nähdään . Portfolioenrakentaminen ja riskienhallinta. Sähkön vähittäiskauppiaiden usein unohdetaan portfolion rakentaminen ja riskienhallinnan komponentit. Tämä on lähes aina virhe. Nämä työkalut tarjoavat mekanismin, jolla pääoma säilyy. Ne eivät ainoastaan ​​yrittäisi lieventää riskialttiiden panosten määrää, Mutta minimoivat myös kaupankäynnin kruunun, vähentäen transaktiokustannuksia S Näiden komponenttien kehittyneillä versioilla voi olla merkittävä vaikutus kannattavuuden laatuun ja johdonmukaisuuteen On helppo luoda strategioita vakaana, koska salkun rakentamismekanismi ja riskienhallinta voidaan helposti muuntaa useiden järjestelmien käsittelemiseksi. Näin ollen niitä olisi pidettävä välttämättömänä Algoritmisen kaupankäyntijärjestelmän suunnittelun alussa. Salkunrakentamisjärjestelmän tehtävänä on ottaa haluttu kauppa ja tuottaa sellaisia ​​tosiasiallisia kauppoja, jotka minimoivat kourut, ylläpitävät altistuksia eri tekijöille, kuten sektoreille, omaisuusluokille , Volatiliteetti jne. Ja optimoi pääoman jakautuminen erilaisiin salkun strategioihin. Portfolion rakentaminen usein alenee lineaariseen algebraongelmaan, kuten matriisin tekijäksi, ja siten suorituskyky riippuu suuresti numeerisen lineaarisen algebran toteutuksen tehokkuudesta. Yhteiset kirjastot sisältävät uBLAS LAPACK ja NAG C MatLabin hallussa on myös laajennus Y optimoidut matriisioperaatiot Python hyödyntää NumPy SciPy: tä tällaisiin laskelmiin Usein tasapainotettu salkku vaatii koottua ja hyvin optimoitua matriisikirjastoa, jotta tämä askel pääsee ulos, jotta kaupankäyntijärjestelmä ei olisi pullonkaulus. Riskienhallinta on toinen erittäin tärkeä osa algoritmikauppaa Riski voi tulla monilla muodoilla Lisääntynyt volatiliteetti, vaikka tätä voidaan pitää tietyissä strategioissa toivottavana, korotuksia korreloi varallisuusluokkien, vastapuolen oletusarvojen, palvelimen katkosten, mustan joutsentapahtumien ja havaitsemattomien virheiden välillä muutamia. Riskienhallintakomponentit yrittävät ennakoida liiallista volatiliteettia ja korrelaatiota varallisuusluokkien välillä ja niiden myöhemmät vaikutukset kaupankäyntivarastoon. Usein tämä vähenee joukko tilastollisia laskelmia, kuten Monte Carlo stressitestit. Tämä on hyvin samanlainen kuin johdannaisten laskennalliset tarpeet Hinnoittelukone ja sellaisenaan CPU-sidottu Nämä simulaatiot ovat hyvin rinnakkaisia Voidaan nähdä alla ja tietyssä määrin on mahdollista heittää laitteistoa ongelmaan. Exhaust Systems. Toimitusjärjestelmän tehtävänä on vastaanottaa suodatettuja kaupankäyntisignaaleja portfolion rakentamisesta ja riskienhallintakomponenteista ja lähettää ne välitysyritykselle Tai muilla markkinoillepääsyillä. Suurin osa vähittäiskaupan algoritmisista kaupankäyntistrategioista sisältää API - tai FIX-yhteyden välitykseen, kuten Interactive Brokersiin. Pääasialliset näkökohdat kielten ratkaisemisessa ovat API: n laatu, API: n kielen kääre saatavuus, Suorituskyvyn taajuus ja odotettavissa oleva luiska. API: n laatu viittaa siihen, kuinka hyvin se on dokumentoitu, millaista suorituskykyä se tarjoaa, tarvitsetko erillisiä ohjelmistoja, joita voidaan käyttää vai onko yhdyskäytävä voidaan muodostaa päätettömällä tavalla, ts. GUI In Interactive Brokersin tapauksessa Trader WorkStation - työkalun on oltava käynnissä graafisessa käyttöliittymässä, jotta voin käyttää käyttöliittymääni La Desktop Ubuntu - versio Amazon-pilvipalvelimelle Interactive Brokersin etäkäyttäjille, puhtaasti tästä syystä. Useimmat API: t tarjoavat C - ja / tai Java-käyttöliittymän. Yleensä yhteisö kehittää kielikohtaisia ​​kääreitä C-, Python-, R-, Excel ja MatLab Huomaa, että jokaisella lisäpaketilla, jota käytetään erityisesti API-kääreissä, on olemassa mahdollisuuksia vikojen liikkumiseen järjestelmään. Aina testaa tämäntyyppiset versiot ja varmista, että ne ovat aktiivisesti ylläpidettyjä. Kannattavissa oleva mittari on nähdä, kuinka monta uutta koodilaskennan päivitystä on Tehty viime kuukausina. Exit-taajuus on äärimmäisen tärkeä toteutusalgoritmissa Huomaa, että satoja tilauksia voidaan lähettää joka minuutti ja koska tällainen suorituskyky on kriittinen Slippage syntyy huonoa suorituskykyä käyttävän suoritinjärjestelmän kautta ja sillä on dramaattinen vaikutus Kannattavuudesta. Samaisesti kirjoitetut kielet kuten C Java ovat yleensä optimaalisia toteutuksessa, mutta kehitysvaiheessa Helppokäyttöisyys Dynaamisesti kirjoitetut kielet, kuten Python ja Perl, ovat nyt yleensä riittävän nopeita. Varmista aina, että komponentit on suunniteltu modulaarisesti. Katso alla olevia ohjeita, jotta ne voidaan vaihtaa ulos järjestelmässä. Arkkitehtuurisuunnittelu - ja kehitysprosessi. Kaupankäyntijärjestelmän osia, sen taajuus - ja tilavuusvaatimuksia on käsitelty edellä, mutta järjestelmän infrastruktuuria ei ole vielä käsitelty. Ne, jotka toimivat vähittäiskauppiaana tai toimivat pienessä rahastossa, todennäköisesti käyttävät monia hatuja. Alfa-malli, riskienhallinta ja toteutusparametrit sekä järjestelmän lopullinen toteutus Ennen erityiskielten selvittämistä käsitellään optimaalisen järjestelmän arkkitehtuurin suunnittelua. Asiantuntemuksen erottaminen. Yksi tärkeimmistä päätöksistä, jotka on tehtävä Alussa on se, miten erottaa kaupankäynnin ongelmat Ohjelmistokehityksessä tämä tarkoittaa olennaisesti sitä, miten jakaa eri näkökohdat Kauppajärjestelmä erillisiin moduulikomponentteihin. Jokaisen komponentin käyttöliittymät on helppo vaihtaa muihin sellaisiin versioihin, jotka edistävät suorituskykyä, luotettavuutta tai ylläpitoa, muuttamatta ulkoisia riippuvuuskoodeja. Tämä on paras käytäntö tällaisille Järjestelmät Alhaisempien taajuuksien strategioille suositellaan tällaisia ​​käytäntöjä Äärimmäisen suurtaajuista kaupankäyntiä varten sääntökäytäntöä on ehkä jätettävä huomiotta järjestelmän tehostamiseksi entistä paremman suorituskyvyn ansiosta. Tiukemmin kytketty järjestelmä voi olla toivottavaa. Algorithmisen kaupankäynnin komponenttikartan luominen Järjestelmä on itse artikkelin arvoinen. Optimaalinen lähestymistapa on kuitenkin varmistaa, että historiallisiin ja reaaliaikaisiin markkinatietopalveluihin, tietojen tallentamiseen, datan käyttöliittymän API, backtesteriin, strategiarametreihin, salkun rakentamiseen, riskinhallintaan ja automatisoituun Esimerkiksi jos käytössä oleva tietovarasto on tällä hetkellä heikosti suorituskykyinen, jopa merkittävillä tasoilla Optimointiin, se voidaan vaihtaa minimaalisilla uudelleenkirjoituksilla datan nauttimiseen tai tiedonsiirtoyhteyksiin API: ssä Sikäli kuin backtesteri ja myöhemmät komponentit ovat kyseessä, ei ole eroa. Toinen hyöty erotetuilla komponenteilla on se, että se mahdollistaa monenlaisia ​​ohjelmointikieliä Jota käytetään yleisessä järjestelmässä Ei ole tarpeen rajoittua yhteen ainoaan kieleen, jos komponenttien kommunikointimenetelmä on kielitaitoinen Tämä tapahtuu, jos ne kommunikoivat TCP IP, ZeroMQ tai jonkin muun kielten riippumattoman protokollan välityksellä. Konkreettisena esimerkkinä on, että tapaus, jossa backtesting-järjestelmä kirjoitetaan C: ssä numeroiden rypytystoiminnalle, kun taas salkunhallinta - ja toteutusjärjestelmät on kirjoitettu Python-järjestelmässä käyttäen SciPy: tä ja IBPy. Performance Considerations. Performance on merkittävä huomio useimmille kaupankäynnin strategioille Korkeammat taajuusstrategiat se on tärkein tekijä Suorituskyky kattaa monenlaiset ongelmat, kuten algoritmiset suoritukset Ioninopeus, verkon latenssi, kaistanleveys, datan IO, rinnakkaisuus rinnakkaisuus ja skaalaus Jokainen näistä aloista on erikseen katettu suurilla oppikirjoilla, joten tämä artikkeli naarmuttaa kunkin aiheen arkin Arkkitehtuuri ja kielen valinta tullaan nyt käsittelemään niiden vaikutusten perusteella Suorituskykyä. Donald Knuthin tietojenkäsittelytieteen isäksi todettu vallitseva viisaus on se, että ennenaikainen optimointi on kaikkien pahojen juuret. Tämä on lähes aina tapausta - paitsi kun rakennetaan korkeataajuisen kaupankäynnin algoritmi. Niille, jotka ovat kiinnostuneita Alemmat taajuusstrategiat, yhteinen lähestymistapa on rakentaa järjestelmä mahdollisimman yksinkertaisesti ja vain optimoida, kun pullonkaulat alkavat näkyä. Proof-työkaluja käytetään määrittämään, missä pullonkauloja syntyy. Profiileja voidaan tehdä kaikkiin yllä lueteltuihin tekijöihin joko MS Windows - tai Linux-ympäristö Käytettävissä on monia käyttöjärjestelmän ja kielen työkaluja sekä kolmansien osapuolten apuohjelmia Kielen valinta Mutta nyt on keskusteltu suorituskyvyn yhteydessä. C, Java, Python, R ja MatLab sisältävät korkean suorituskyvyn kirjastot joko standardin osana tai ulkoisesti perustietorakenteelle ja algoritmityö C toimitetaan Standard Template Library - ohjelmalla, kun taas Python Sisältää NumPy SciPy Näissä kirjastoissa löytyy tavallisia matemaattisia tehtäviä, ja on harvoin hyödyllistä kirjoittaa uusi toteutus. Eräs poikkeus on, jos tarvitaan erittäin räätälöityjä laitteistoarkkitehtuureita ja algoritmi käyttää laaja-alaisesti omia laajennuksia, kuten mukautettuja kätköjä. Usein pyörien uudelleenharkinta vie aikaa, jota voitaisiin käyttää paremmin kaupankäyntiinfrastruktuurin muiden osien kehittämiseen ja optimointiin. Kehitysajankohta on erittäin arvokas varsinkin yksittäisten kehittäjien yhteydessä. Laji on usein kysymys toteutusjärjestelmästä, sillä tutkimustyökalut ovat yleensä Samalle koneelle Edelleen, latenssi voi esiintyä useissa pisteissä Databa-suoritustiedoston pitkin Verkon latenssia, signaaleja on tuotettava käyttöjärjestelmän, viestin latenssin, kauppasignaalien lähettämällä NIC-latenssi ja käsittelemään prosessoidun vaihtojärjestelmän sisäisen latenssin. Suurtaajuusoperaatioita varten on välttämätöntä tuntea intensiivisesti kernalin optimointi sekä optimointi Verkon siirto Tämä on syvä alue ja on huomattavasti laajempi kuin artikkelin laajuus, mutta jos halutaan UHFT-algoritmi, on oltava tietoinen vaadittavasta syvyydestä. Caching on erittäin hyödyllinen kvantitatiivisen kaupankäynnin kehittäjän työkalupakkiin. Käsite tallentaa usein käytettyjä tietoja tavalla, joka mahdollistaa korkeamman suorituskyvyn pääsyn tietojen mahdollisen ikävyyteen liittyvien kustannusten vuoksi Verkkokehityksessä esiintyy yleinen käyttötapa, kun tietoja otetaan levyn tukemasta relaatiotietokannasta ja tallennetaan muistiin. Tietojen pyyntöjä ei tarvitse osua tietokantaan, joten suorituskyky voi olla merkittävä Tilanteissa välimuistiinpano voi olla erittäin hyödyllistä Esimerkiksi strategian portfolioen nykytila ​​voidaan tallentaa välimuistiin, kunnes se tasapainotetaan, niin että luetteloa ei tarvitse regeneroida kaupan algoritmin jokaisen silmukan avulla. Tällainen regenerointi todennäköisesti Olla suuri suorittimen tai levyn IO-operaatio. Kuitenkin, välimuistiin tallentaminen ei ole ilman omaa ongelmaa. Välimuistin volatiliteetin takia kerralla välimuistitietojen uudelleenkohdentaminen voi asettaa merkittävän kysynnän infrastruktuuriin. Toinen kysymys on koirapilkku, jossa useat sukupolvet Uudesta välimuistikopiosta tehdään äärimmäisen suurella kuormituksella, mikä johtaa kaskadivirheeseen. Dynamiikkamuistin allokointi on kallis toiminta ohjelmiston toteutuksessa. Näin ollen on välttämätöntä, että tehokkaamman kaupankäynnin sovellukset ovat hyvin tietoisia siitä, miten muistia jaetaan ja jaetaan Ohjelmavirran aikana Uudemmat kieliset standardit, kuten Java, C ja Python, suorittavat automaattisesti roskat, jotka viittaavat dynaamisen Y varattu muisti, kun esineet menevät pois soveltamisalasta. Garbage-kokoelma on erittäin hyödyllinen kehityksen aikana, koska se vähentää virheitä ja auttaa luettavuutta. Se on kuitenkin usein optimaalinen tietyille korkean taajuuden kaupankäynnin strategioille. Mukautettu jäte keräys on usein haluttu näissä tapauksissa Java, Esimerkiksi jättämällä keräysastia ja kasaan konfiguraatiota, on mahdollista saada korkea suorituskyky HFT-strategioille. C ei tarjoa natiiviä roskakerääjää, joten on välttämätöntä käsitellä kaikkia muistin allokoinnin jakamista osana kohteen s toteutusta. Potentiaalisesti virheetyyppinen, joka mahdollisesti johtaa heilahteleviin osoittimiin, on äärimmäisen hyödyllistä saada hienosäätöinen hallinta siitä, miten esineet näkyvät kasassa tietyissä sovelluksissa. Kun valitset kielen, varmista, että tutkitaan, miten jäte kerääjä toimii ja onko sitä mahdollista muokata optimoimalla Tietyn käyttötapauksen. Jotkut toiminnot algoritmisessa kaupankäyntijärjestelmässä ovat sovitettavissa rinnakkaisiksi Tämä viittaa th E-käsite suorittaa useita ohjelmoitavia operaatioita samanaikaisesti eli rinnakkain Ns. Embarassingly rinnakkaiset algoritmit sisältävät vaiheet, jotka voidaan laskea täysin muista vaiheista riippumatta Tietyt tilastolliset operaatiot, kuten Monte Carlo-simulaatiot, ovat hyvä esimerkki häiritsevästä rinnakkaisuudesta Algoritmeja, kun jokainen satunnaisveto ja seuraava polkuoperaatio voidaan laskea tuntematta muita polkuja. Muut algoritmit ovat vain osittain rinnakkaisia. Nestemodynamiikka-simulaatiot ovat tällainen esimerkki, jossa laskenta-ala voidaan jakaa, mutta lopulta nämä verkkotunnukset on kommunikoitava toistensa kanssa Ja näin ollen toiminnot ovat osittain peräkkäisiä. Parallelisable - algoritmeihin sovelletaan Amdahl-lakia, joka antaa teoreettisen ylärajan rinnakkaisen algoritmin suorituskyvyn kasvulle, kun sitä sovelletaan N: n erillisiin prosesseihin, esimerkiksi CPU-ytimeen tai lankaan. Parallelisation on tullut yhä tärkeämmäksi Optimointimenetelmät prosessorin clo alkaen Ck-nopeudet ovat pysähtyneet, koska uudemmissa prosessoreissa on useita ytimiä, joiden avulla voidaan suorittaa rinnakkaisia ​​laskelmia Kuluttajien grafiikkalaitteiden lisääntyminen etupäässä videopeleissä on johtanut graafisten prosessointiyksiköiden kehittämiseen. GPU: t, jotka sisältävät satoja ytimiä erittäin samanaikaisille operaatioille Tällaiset GPU: t Ovat nyt erittäin edullisia Korkean tason puitteet, kuten Nvidia s CUDA ovat johtaneet laajaan käyttöönottoon yliopistossa ja taloudessa. Nämä GPU-laitteistot soveltuvat yleensä vain kvantitatiivisen rahoituksen tutkimukseen, kun taas muita erikoistuneita laitteita, kuten Field-Programmable Gate Arrays - FPGA: t käytetään U HFT: lle Nykyään nykyaikaisimpia langaugeja tukee yhdenmukainen monitaitoprosentti. Näin ollen on helppo optimoida backtester, koska kaikki laskelmat ovat yleensä muista riippumattomia. Ohjelmistokehityksessä ja - toiminnoissa on merkitystä järjestelmän kyvyssä Käsittelemään jatkuvasti kasvavia kuormia suurempien pyyntöjen muodossa, hig Prosessorin käyttö ja muistin lisääminen Algoritmisessa kaupankäynnissä strategia voi skaalata, jos se voi hyväksyä suurempia pääomamääriä ja tuottaa edelleen johdonmukaisia ​​tuottoja Kaupankäynnin tekniikka stack-asteikot, jos se voi kestää suurempia kauppamääriä ja lisätä latenssia ilman pullonkauloja. On usein vaikea ennustaa etukäteen, missä tapahtuu pullonkaula Rigourous-puunkorjuus, testaus, profilointi ja seuranta auttavat suuresti sallien järjestelmän mittakaavassa Kielet itseään kuvataan usein epäluotettaviksi Tämä on yleensä seurausta vääristä tiedoista, Eikä kovaa tosiseikkaa Se on koko teknologiapino, joka olisi varmistettava skaalautuvuudeksi, ei kielenä. Selvästi tietyt kielet ovat parempia suorituskykyä kuin toiset tietyissä käyttötapauksissa, mutta yksi kieli ei ole millään mielessä koskaan parempi kuin toinen. On erottaa huolenaiheet, kuten edellä todettiin. Jotta voitaisiin edelleen tuoda kyky käsitellä spi Järjestelmässä, esim. Äkillistä volatiliteettia, joka laukaisee liikennetyyppien, on hyödyllistä luoda viestin jonotusarkkitehtuuri. Tämä tarkoittaa yksinkertaisesti sanomajonojärjestelmän asettamista komponenttien välillä niin, että tilaukset ovat pinottu, jos jokin osa ei kykene käsittelemään monia pyyntöjä. Sen sijaan, että pyyntöjä menetettäisiin, ne säilytetään vain pinoon, kunnes viesti käsitellään. Tämä on erityisen hyödyllistä lähetettäessä liiketapahtumia moottoriin. Jos moottori kärsii raskaassa latenssissa, se varmuuskopioi kaupankäynnin Kaupan signaaligeneraattorin ja Toteutusliittymä lieventää tätä ongelmaa mahdollisen kaupan liukenemisen kustannuksella Hyvästi arvostettu avoimen lähdekoodin sanoma-välittäjä on RabbitMQ. Hardware ja Operating Systems. Laitteistosi, jolla on käytössä strategia, voi olla merkittävä vaikutus algoritmin kannattavuuteen. Tämä ei ole Ongelma, joka rajoittuu korkeataajuisiin kauppiaisiin. Laitteiston ja käyttöjärjestelmän heikko valinta voi johtaa koneen kaatumiseen tai rynnäkköön Tarvittaessa on otettava huomioon, missä sovellussi asuu. Valinta on yleensä henkilökohtaisen työpöydän koneen, etäpalvelimen, pilvipalvelun tarjoajan tai keskitetyn palvelimen välityksellä. Työpöydän koneet ovat helppoja asentaa ja hallita , Varsinkin uudemmilla käyttäjäystävällisillä käyttöjärjestelmillä, kuten Windows 7 8, Mac OSX ja Ubuntu Desktop - järjestelmillä, on huomattavia haittapuolia, mutta tärkein on, että työpöydän koneille suunniteltujen käyttöjärjestelmien versiot edellyttävät todennäköisesti uudelleenkäynnistystä ja usein Huonoin aikoina He käyttävät myös enemmän laskennallisia resursseja sen vuoksi, että edellytetään graafista käyttöliittymää GUI. Laitteiston käyttö koti - tai paikallisissa toimistoympäristöissä voi johtaa internet-yhteyksiin ja virran käyttökatkoksiin. Pöytäkonejärjestelmän pääasiallinen hyöty on, että merkittävä laskennallinen Hevosvoimaa voidaan ostaa etäpalvelimen tai pilvipohjaisen järjestelmän etäisyydelle kustannuksista Vertailukelpoinen nopeus. Palvelimelle tai pilvipohjaiselle koneelle, joka on usein kalliimpaa kuin työpöydän vaihtoehto, mahdollistaa entistä merkittävämmän irtisanomisinfrastruktuurin, kuten automaattisten tietojen varmuuskopioiden, kyvyn selkeämmin varmistaa käytettävyyden ja etävalvonnan. Heitä on vaikeampi hallita, koska Ne edellyttävät kykyä käyttää käyttöjärjestelmän kauko-sisäänkirjautumisominaisuuksia. Windowsissa tämä on yleensä GUI Remote Desktop Protocol RDP: n avulla Unix-järjestelmissä komentoriviltä Secure SHell SSH: tä käytetään Unix-pohjainen palvelininfrastruktuuri on lähes aina komento - line based which immediately renders GUI-based programming tools such as MatLab or Excel to be unusable. A co-located server, as the phrase is used in the capital markets, is simply a dedicated server that resides within an exchange in order to reduce latency of the trading algorithm This is absolutely necessary for certain high frequency trading strategies, which rely on low latency in order to generate alpha. The fin al aspect to hardware choice and the choice of programming language is platform-independence Is there a need for the code to run across multiple different operating systems Is the code designed to be run on a particular type of processor architecture, such as the Intel x86 x64 or will it be possible to execute on RISC processors such as those manufactured by ARM These issues will be highly dependent upon the frequency and type of strategy being implemented. Resilience and Testing. One of the best ways to lose a lot of money on algorithmic trading is to create a system with no resiliency This refers to the durability of the sytem when subject to rare events, such as brokerage bankruptcies, sudden excess volatility, region-wide downtime for a cloud server provider or the accidental deletion of an entire trading database Years of profits can be eliminated within seconds with a poorly-designed architecture It is absolutely essential to consider issues such as debuggng, testing, logging, back ups, high-availability and monitoring as core components of your system. It is likely that in any reasonably complicated custom quantitative trading application at least 50 of development time will be spent on debugging, testing and maintenance. Nearly all programming languages either ship with an associated debugger or possess well-respected third-party alternatives In essence, a debugger allows execution of a program with insertion of arbitrary break points in the code path, which temporarily halt execution in order to investigate the state of the system The main benefit of debugging is that it is possible to investigate the behaviour of code prior to a known crash point. Debugging is an essential component in the toolbox for analysing programming errors However, they are more widely used in compiled languages such as C or Java, as interpreted languages such as Python are often easier to debug due to fewer LOC and less verbose statements Despite this tendency Python does ship with the p db which is a sophisticated debugging tool The Microsoft Visual C IDE possesses extensive GUI debugging utilities, while for the command line Linux C programmer, the gdb debugger exists. Testing in software development refers to the process of applying known parameters and results to specific functions, methods and objects within a codebase, in order to simulate behaviour and evaluate multiple code-paths, helping to ensure that a system behaves as it should A more recent paradigm is known as Test Driven Development TDD , where test code is developed against a specified interface with no implementation Prior to the completion of the actual codebase all tests will fail As code is written to fill in the blanks , the tests will eventually all pass, at which point development should cease. TDD requires extensive upfront specification design as well as a healthy degree of discipline in order to carry out successfully In C , Boost provides a unit testing framework In Java, the JUnit library exi sts to fulfill the same purpose Python also has the unittest module as part of the standard library Many other languages possess unit testing frameworks and often there are multiple options. In a production environment, sophisticated logging is absolutely essential Logging refers to the process of outputting messages, with various degrees of severity, regarding execution behaviour of a system to a flat file or database Logs are a first line of attack when hunting for unexpected program runtime behaviour Unfortunately the shortcomings of a logging system tend only to be discovered after the fact As with backups discussed below, a logging system should be given due consideration BEFORE a system is designed. Both Microsoft Windows and Linux come with extensive system logging capability and programming languages tend to ship with standard logging libraries that cover most use cases It is often wise to centralise logging information in order to analyse it at a later date, since it can often l ead to ideas about improving performance or error reduction, which will almost certainly have a positive impact on your trading returns. While logging of a system will provide information about what has transpired in the past, monitoring of an application will provide insight into what is happening right now All aspects of the system should be considered for monitoring System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information. Trading metrics such as abnormal prices volume, sudden rapid drawdowns and account exposure for different sectors markets should also be continuously monitored Further, a threshold system should be instigated that provides notification when certain metrics are breached, elevating the notification method email, SMS, automated phone call depending upon the severity of the metric. System monitoring is often the domain of the system administrator or operations manager However, as a sole trading developer, t hese 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. Sim ilarly, high availability needs to be baked in from the start Redundant infrastructure even at additional expense must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems I won t delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system. Choosing a Language. Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system The next stage is to discuss how programming languages are generally categorised. Type Systems. When choosing a language for a trading stack it is necessary to consider the type system The languages which are of interest for algorithmic trading are either statically - or dynamically-typed A statically-typed language performs checks of the types e g integers, floats, custom classes etc during the compilation process Such languages include C and Java A dy namically-typed language performs the majority of its type-checking at runtime Such languages include Python, Perl and JavaScript. For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors However, type-checking doesn t catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations Dynamic languages i e those that are dynamically-typed can often lead to run-time errors that would otherwise be caught with a compilation-time type-check For this reason, the concept of TDD see above and unit testing arose which, when carried out correctly, often provides more safety than compile-time checking alone. Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the t ype 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 inte rpreted 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 goo d 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, inclu ding native support for lambda expressions and concurrency. Python has the high performance NumPy SciPy Pandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research Further, high-performance plugins exist for access to the main relational databases, such as MySQL MySQL C , JDBC Java MatLab , MySQLdb MySQL Python and psychopg2 PostgreSQL Python Python can even communicate with R via the RPy plugin. An often overlooked aspect of a trading system while in the initial research and design stage is the connectivity to a broker API Most APIs natively support C and Java, but some also support C and Python, either directly or with community-provided wrapper code to the C APIs In particular, Interactive Brokers can be connected to via the IBPy plugin If high-performance is required, brokerages will support the FIX protocol. As is now evident, the choice of programming language s for an algorithmic trading system is not straightforward and require s 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.

No comments:

Post a Comment