Trading Strategi Matlab Kode


Bitfinex kunngjorde i dag starten på gruvedriftskontrakter som et handelsprodukt på plattformen. I alt 100 THS (terahashes per sekund) med en utløp på 3 måneder har blitt gjort tilgjengelig for handel under navnet TH1BTC. De 100 THS er en del av et større basseng på 3500 THS, slik at flere gruvekontrakter kan bli tilgjengelige i fremtiden. Interessant, dette markerer første gang at det er mulig å kortlegge en gruvekontrakt. Kortslutning av en gruvekontrakt betyr å motta en bit av Bitcoin nå (prisen vi selger den til) og deretter betale utbytte (i Bitcoin) i løpet av de neste 3 månedene til kontrakten utløper i midten av desember. Det gis en fortjeneste dersom summen av alle utbetalte utbetalinger (pluss renter vi har betalt for kort kontrakt) er mindre enn hva vi mottok i begynnelsen da vi solgte kontrakten (til noen andre selvsagt). Dette betyr at prisen på TH1BTC skal avhenge av 3 variabler (i synkende rekkefølge av betydning): Endringen av gruveproblemet til 15. desember Tiden gjenværende til 15. desember Renten (swap rate) Hvis vanskelighetsgrad øker utbyttet, blir mindre fordi 1 THS representerer en mindre brøkdel av hele nettverkshackekraften. Derfor bør prisen på en kontrakt reduseres dersom vanskeligheter øker. Jo nærmere vi kommer til utløpet, kan feberen Bitcoins være tankene med totalt 1 THS. Derfor bør prisen på en kontrakt redusere jo nærmere vi kommer til utløp og nå en pris på 0 ved utløpet. Jo høyere rentesatsen er, desto dyrere er det å inngå og holde kontrakten i løpet av 3 måneder. Bitfinex tilbyr ikke 90 dager swaps, derfor inngår en kontrakt med målet om å holde det til slutten inneholder ganske mye renterisiko fordi det til en tid må en ny bytte tas ut (med en potensielt ugunstig rente). Dette er mindre et problem når du går lenge (Bitcoin-prisene er vanligvis lave) enn når du går kort (det er bare maksimalt 100 kontrakter tilgjengelig i totalt, ingen kortslutning). For å kompensere for risikoprisene bør øke når byttehastighetene øker. Den store ukjente er selvsagt endringen i gruveproblemet i de neste 90 dagene. I den følgende figuren ser vi hvordan vanskeligheter endret seg i løpet av de foregående 6 månedene. Dataene er fra Tradeblock og viser ikke bare en grafisk fremstilling av tidligere endringer i vanskeligheten (vanskelighetsgrad endres hver 14. dag avhengig av tidligere hash rate. Mer informasjon finner du i wiki), men også noen grunnleggende oppsummeringsstatistikk. I gjennomsnitt har vanskelighetene økt 27 de siste 30 dagene og 77 de siste 60 dagene. For å anslå den rimelige prisen på en TH1BTC vil vi anta at vanskeligheten vil øke i gjennomsnitt 15 per måned i løpet av de neste 3 månedene. For tiden er prisen på å kjøpe en kontrakt verdt 1 THS 2 BTC. Bassengavgiften er 3, og vi vil ignorere renten. Fyller i all informasjonen vi får følgende resultater: Derfor dersom vi går lang en kontrakt basert på våre forutsetninger, vil vi gi et tap på ca. 0,39 Bitcoin (litt mer i realiteten siden vi starter gruvedrift i midten av september til midten i desember) fordi forventet utbytte (månedlig inntekt) ikke skal dekke våre innledende kostnader på 2 BTC før kontrakten utløper. På den annen side ville kortprisen på 2 Bitcoin ha gitt en fortjeneste på ca. 0,39 Bitcoin per kontrakt. Husk at vi ikke har inkludert swap kostnader som for tiden er rundt 1 per dag (). Det er to måter å se på resultatene. Enten kan vi si at prisene for TH1BTC er for øyeblikket overvurdert og bør være nærmere 1,5 BTC. Hvis vi antar vanskeligheter vil øke mer enn 15 per måned, bør prisene være enda lavere enn det. Eller vi kan si at markedet er effektivt og prisene er riktige, noe som innebærer at markedet forventer vanskeligheter å redusere i gjennomsnitt ca 2 per måned i løpet av de neste 90 dagene. Uansett vil resultatene bli kjent med sikkerhet på 90 dager. Kampen for å gjenopprette fra den nyeste Bitcoin flash-krasjen som oppsto på Bitfinex bare fire dager, går. Bitcoin-prisene tok et annet dykk i dag som marginhandlere fikk sine stillinger likviderte på BTC-e. Arrangementet startet klokken 13:36 (UTC1) da store salgsordrer begynte å dukke opp på den tredje største vestlige Bitcoin-utvekslingen BTC-e. Nedadgående fart økte jevnt da orderboken ble stadig tynn, krasjet prisene til en lav på USD 309 per Bitcoin klokken 1343. I de følgende minuttene gikk prisene raskt tilbake på tynt volum tilbake til rundt USD 442, da arbitragehandlere begynte å dra nytte av rabatten i forhold til andre utvekslinger. BTC-e er en av de få store børsene som tilbyr margenhandel til sine kunder via MetaTrader-plattformen siden november 2013, men detaljene til hvem som eksakt gir midler som er nødvendige for marginhandel, har vært uklare. Formen og spesielt tidspunktet for krasjpunktet peker mot at marginalhandlere blir likviderte (eller stopper bestillinger som blir utført), likt det som skjedde på Bitfinex for et par dager siden. Imidlertid, i motsetning til Bitfinex som er gjennomsiktig om åpne bytteposisjoner. BTC-e gir ikke viktige data som ville være nødvendig for å gi en grundigere analyse, og derfor kan denne siste setningen bare betraktes som et godt gjetning. I motsetning til Bitfinex, som er avhengig av en skjult algoritme i et forsøk på å kontrollere rekkefølgen. BTC-e ser ut til å ha ingen spesielle garantier for å redusere slike hendelser. Fallet under 400 skyldtes hovedsakelig mangel på bud i orderboken og ikke fordi markedet trodde at den sanne verdien var under 400, da tilbakegangen tilbake til over 440 bare noen minutter senere, viste seg i utgangspunktet. Derfor kan stoppe handel under ekstrem nedadgående volatilitet lett ha avvist blodsutgjæringen blant marginhandlere ved å gi andre markedsdeltakere mer tid til å tykke orderboken. Oppdater 4:58 PM (UTC1): BrCapoeira postet på Reddit en interessant graf basert på data fra Metatrader-plattformen: Denne grafen innebærer at en enkelt stor ordre var årsaken til denne hendelsen. Hvorvidt denne bestillingen ble opprettet på grunn av et marginalanrop, er en enkel feil, for å manipulere markedet, eller for å åpne en stor kort posisjon, uklart. Sunn fornuft vil tyde på at det sannsynligvis var et resultat av en marginalanrop av en enkelt stor handelsmann. Mitt tidligere innlegg på dette emnet har blitt tatt opp under diskusjoner i etterkant av den nyeste Bitcoin flash-krasjen. Coindesk var en av de første til å plukke den opp, og siden da begynte ulike innlegg om gjennomsiktighet og mulighet for å utveksle å aktivt administrere ordreutførelse. Som et resultat av disse hendelsene fortsatte Josh Rossi, visepresident for forretningsutvikling ved Bitfinex, Reddit å åpenbart ta opp noen av problemene opp mot utvekslingen. Fakta vi kjenner til er at det var noen store salgsordrer kort før ulykken startet, for eksempel en 500 salgsordre på Bitstamp kl 9.49 (UTC1), ca. 6 minutter før en stor salgsordre på Bitfinex utløste krasjen. Dataene forteller imidlertid ikke om det var innsidehandel, noen form for markedsmanipulering. eller en enkel feil. Faktum er at etter at Bitcoin flash-krasj var åpne bytteposisjoner redusert fra rundt 28m til 24m, noe som indikerer at 8400 marginalposisjoner ble lukket (antatt i gjennomsnitt 475) på en måte (margin call) eller en annen (stoppordre). Dataene forteller oss ikke hva forholdet er, men ifølge Josh, kun om lag 650 Bitcoins ble solgt som følge av marginsamtaler. Som korrekt påpekt av Jonathan Levin. Faktum er at det starter ca 24 timer før bitcoin-flash-krasj til selve krasjet, en ekstra 1000 bitcoins ble tatt ut i korte stillinger og ca 2500 shorts ble deretter stengt under krasj. Hvorvidt de shortsene ble åpnet for å sikre eksisterende posisjoner, som et ondsinnet forsøk på å utløse et marginalanrop, eller en måte å forutse markedet ved hjelp av privat informasjon, kan ikke fastslås ut fra tilgjengelige data (det ser merkelig ut til å være mistenkelig). Hva var uventet Personlig er det interessante poenget ikke at Bitcoin flash krasjet. Plutselige prisfluktuasjoner skjedde tidligere og vil skje i fremtiden, særlig i illikvide markeder som Bitcoin. Det interessante poenget er involvering av Bitfinex og hvordan de aktivt forvaltet rekkefølge uten å informere markedsdeltakere på forhånd. Bitfinex-matchende motor ble ikke stoppet under hele krasjen, selv om den gikk sakte (men ikke så ille som den beryktede 70 minutters ordreforsinkelsen på den nå avsluttede MtGox-utvekslingen under krasj i 2012). Men hva Bitfinex gjorde var at de introduserte noe de nå refererer til som fartboller. Hva det betyr er at de i hovedsak flagger ordrer de anser som ugyldige eller potensielt farlige, og reduserer dem forsettlig. Ved første øyekast kan dette virke som en fin ide. Hvem doesn8217t vil ha et filter for å fjerne eller bremse ondsinnede ordre. Men som så ofte med de slags ting djevelen er i detalj. Problemet er at Bitfinex ikke har (og muligens aldri vil) offentliggjøre hvordan de kategoriserer en ordre som 8220bad8221 og 8220slå det ned8221. Hvis en markedsaktør bestemmer seg for å sette opp en stor salgsordre mot en tynn ordrebok, så er det hans beslutning. Hvorvidt handlingen hans var ment eller ikke, er ikke opp til bytte for å bestemme seg. Det kan hende at denne markedsdeltageren bare var den første personen som reagerte på en større begivenhet, og er helt villig til å bære ekstra kostnader for den resulterende slippingen i påvente av en stor prisbevegelse. Det eksisterer ganske enkelt ikke en måte å nøyaktig klassifisere bestillinger a priori som 8220good8221 eller 8220bad8221 siden det ville automatisk ta kunnskap om alle umiddelbare fremtidige hendelser. Hva kan forbedres Feil (8220fat finger8221, algoritme som går ødeleggelse) skje, marginer blir ringte og folk prøver å spille systemet på alle mulige måter. Logisk må det være beskyttelsesforanstaltninger for å beskytte markedene og dets deltakere. Bitfinex var definitivt klar over potensiell toksisk rekkefølge og forberedte motforanstaltninger. Det eneste de glemte var å informere sine kunder om de skjulte sikkerhetsfunksjonene. Å gjemme de beskyttelsene fra offentligheten legger til usikkerhet til markedet (spesielt nå som vi vet at de eksisterer og noen ganger gjør noe) og legger i hovedsak alle tradere i tillit til Bitfinex. På dette tidspunktet kan en forhandler bare håpe at Bitfinex alltid vil opptre i de beste hensikterne til sine kunder. Dette håpet kan være ubrukelig skjønt, siden Bitfinex tjener penger fra handelsavgifter, uavhengig av om en handelsmann faktisk tjener penger. Man trenger ikke å tenke lenge for å realisere det skjulte potensialet for misbruk i et slikt system. Den viktigste grunnen til at Josh hvorfor Bitfinex ikke har tenkt å publisere sin algoritme, er å unngå å gi handelsmenn muligheten til å utnytte det, er falsk, og følgende viser hvorfor. De er de offisielle markedsspenningsbrytere som brukes av NASDAQ, lagt ut på nettet og helt gjennomsiktig for alle markedsdeltakere. Disse reglene er absolutt ikke perfekte, men de er enkle, gjennomsiktige og arbeider for et av verdens største aksjemarkeder. Nå har jeg stor respekt for de som jobber på Bitfinex-plattformen, men jeg tviler på at de klarte å komme opp med en algoritme som beskytter markedsdeltakere bedre enn de som brukes av en større børshandling mer enn 900 millioner aksjer per dag i gjennomsnitt . Og hvis de gjorde det, er det nå sjansen for Bitfinex å bevise det til verden og muligens skrive historie ved å lære de store guttene hvordan man skal skape en utveksling. Når det gjelder offentlig utveksling er gjennomsiktighet et must, ikke bare for Bitfinex, men for enhver utveksling. Markedsdeltakere må vite nøyaktig hva som skjer når de legger en bestilling og under ingen omstendigheter må stole på god tro alene. Sikkerhetsforanstaltninger er viktige fordi ulykker skjer og markerer krasj, men det er ikke opp til bytte for å engasjere seg i hemmelig ordensdiskriminering. Det er forskjellige måter å beskytte finansmarkeder på, og ingen av dem er perfekte. Å legge til kompleksitet øker vanligvis sjansen for utilsiktede bivirkninger, og derfor virker en enkel, gjennomsiktig tilnærming mer hensiktsmessig enn en skjult, kompleks. For to dager siden reduserte BitMEX sine handelsavgifter til 0 og feiret det ved å frigjøre en grunnleggende markedsbase på Github. BitMEX driver for tiden en handelsutfordring frem til 29. august 2014 for å markedsføre sin nye plattform. Å frigjøre en markeringsmarkering er sannsynligvis en interessant og effektiv måte å øke API-trafikken og stresstest plattformen litt. Selvfølgelig kunne jeg ikke motstå og ta en titt. Markedsfører er en forked av Liquidbot. som var originalt designet for å kjøre på den nå foreldede MtGox-utvekslingen. Det var noen mindre endringer (ny API-klasse for å koble til BitMEX, noen ekstra utskrifter til konsoll, endringer for å tilpasse for futures kontrakter, og en stor og unødvendig utskrift til konsoll ved oppstart), men ingen vesentlige endringer i handelslogikken. Algoritmen bruker REST og kontrollerer bare for endringer hvert 60 sekund. Dette diskvalificerer allerede boten fordi det er viktig for sakte å reagere på pågående endringer i bestillingsboken. BitMEX begrenser forespørsler til REST API til 150 per 5 minutter, slik at du kan prøve å redusere 60 sekunder til noe som 3, men det vannet 8217t forandre det faktum at så snart markeder begynner å bevege seg, vil du treffe grensen og bli sittende fast med åpne posisjoner. For å være rettferdig, gir BitMEX boten mer som markedsføringsstunt og uttrykker det eksplisitt at bytte til WebSocket vil være svært gunstig da det tillater oppdateringer i sanntid. Samlet sett er algoritmen solid skriftlig, teknisk fungerer og enkel å installere, men det vinner deg for å få penger i det lange løp. Hvis noen seriøst vurderer å benytte denne boten, anbefaler jeg følgende små endringer for å gjøre koden mer brukbar: 1. Endre til Websocket 2. Avslutt posisjon på tett: 3. Bygg bestillinger som starter fra midtpunktet: I tillegg vil jeg anbefale å måle volatilitet på en eller annen måte og tilpasse avstanden mellom ordrer dynamisk og størrelse. Under testingen var API alltid responsiv og nøyaktig. Volumet på utvekslingen er fortsatt lavt, men plattformens grunnleggende ser lovende ut. Denne bot er et morsomt verktøy for å introdusere brukere i verden av markedsfremstilling og algoritmisk handel, men det vinner 8217t en sjanse mot etablerte algoritmer. Merk: Hvis du vurderer å bruke denne algoritmen, husk at markedsarbeid er en heltidsjobb. Alt mindre enn full dedikasjon, rask reaksjonstid og 100 oppetid vil føre til at du mister penger. Rediger: Følg opp etterfulgt her i dag Bitcoin-prisene tok et dykk som marginhandlere på en av de største byttene Bitfinex fikk sine ordrer likvidert. For mange nærstående observatører og mer sofistikerte handelsmenn kom dette ikke som en overraskelse. Faktisk har lange stillinger bygget opp kontinuerlig de siste par månedene i påvente av en ny boble i Bitcoin-prisene og nådd så høyt som 30m i utestående bytteposisjoner på Bitfinex. Nå ville dette ikke være et problem i seg selv så lenge det er nok kapital som støtter lånet. Dessverre ble de fleste av de lange stillingene angitt rundt 600 8211 640 USDBTC, og sikkerheten ble for det meste levert i Bitcoins selv. Følgende diagram viser pent oppbyggingen av lange stillinger, toppet rundt 14. juli med nær 32m i swaps. Kjører litt rask matte basert på vedlikeholdsmarginalen på Bitfinex på 13 og antar Bitcoin som sikkerhet, finner vi at marginanrop skal begynne rundt 520 8211 540 USDBTC-merket. I går kom prisene nærmere, og i dag hoppet de endelig over klippen. Problemet er at når marginanrop er satt i, har du en cascading-effekt som rips gjennom bestillingsboken, noe som fører til at enda flere ordrer kommer til å ikke komme tilbake, og øker det nedadgående momentet ytterligere. Disse typer hendelser er ikke begrenset til Bitcoin-utveksling, men kan også forekomme ved store utvekslinger som for eksempel i 2010-krasj i USA. Årsaken til et slikt flashkrasj kan variere og går fra fettfeilfeil til programmeringsfeil til kaskad marginsamtaler. Det er interessant å se hvordan utvekslingene omhandler disse hendelsene. I USA implementerte Nasdaq markedsbrønnbrytere som vil føre til at handel stopper under slike ekstreme forhold. Bitcoin-markeder er ennå ikke så avanserte og pleier å fortsette å handle. Hvis vi ser på ordrehandlingen på Bitfinex i dag, ser vi noe veldig merkelig: Det virker (og dette er bare et gjetning da det ikke er noen offisiell kommentar fra utvekslingen) som om Bitfinex driver en algoritme for å håndtere marginanropene. Algoritmen begynner å selge, men begrenser seg til 10 dråp i løpet av 1 minutt. Hvis prisene faller mer enn 10 i 1 minutt, vil det slutte å selge og vente på kjøp bestillinger å komme inn. Når det igjen er en viss mengde bestillingsordre i ordreboken, begynner algoritmen å selge igjen til alle marginanrop er oppfylt. Rediger: LeMogawai var den første som pekte på dette i dette innlegget, og det samsvarer med min personlige observasjon på tidspunktet for arrangementet. Dette synes å være en interessant måte å håndtere cascading marginsamtaler, men kan også betraktes som grensemarkedsmanipulering fra børssiden. Ved å spre ut salgsordrer over tid reduseres nedadgående momentum, men handelsmenn ender opp med å handle mot utvekslingen selv og ikke markedet lenger. Utvekslingen har en informasjonsfordel på det tidspunktet og er derfor mer sannsynlig å tjene enn de som handler. Heldigvis holdt dette bare i ca 10 minutter, hvorefter kontrollen ble gitt tilbake til markedet. Andre børser som også tilbyr marginhandel som BTC-e og OKcoin, har nå en gunstig posisjon og kan lære av dagens arrangementer. Implementering av et system som ligner større brytere på store børser som Nasdaq, kan være et smart første trekk. Nylig jobber jeg for å få den nye handelsplattformen som går. Denne nye versjonen er basert på Python, bruker MySQL til å holde en database over alle tidsserier av forskjellige virtuelle valutaer med automatisk fylling fra BitcoinCharts og integrerer de tre store børsene MtGox, BTC-E og Bitstamp. Plattformen vil bli brukt som måte å backtest noen strategier og engasjere seg i automatisk handel. I løpet av dette bestemte jeg meg for å trekke noen data fra BTC mot USD fra BitcoinCharts og basert på ideene til et papir fra Hashem og Timmermann (1995) implementerte en enkel handelsstrategi. Tanken er å prognostisere tegnet av t1-periodens avkastning basert på en regresjon, som estimeres ved et automatisk utvalg av tekniske indikatorer i løpet av den siste n-perioden frem til t. Da, etter at t1 har skjedd, oppdaterer vi modellen og forsøker å forutsi t2 ved å bruke alle dataene som er tilgjengelige for de siste n periodene til t1 og så videre. For min bacheloroppgave undersøkte jeg fire ulike tekniske handelsregler i Forex-markeder. Den bruker MCS og SPA test for å søke etter gyldige modeller blant ulike parametere som ikke er gjenstand for datasnøring. Med tanke på realistiske transaksjonskostnader finner vi ikke noe bevis for meravkastning, noe som er i samsvar med markedseffektiviteten. Med denne koden bør du kunne se etter Bitcoin arbitrage muligheter innen BTC-e. Den bruker ideen om en pris og bruker triangulær arbitrage, med tanke på kostnader og spredning. Grunnen til at jeg legger inn dette her er til tross for at det fungerer, sjansen er at du vil være for sakte til å konkurrere med andre investorer som gjør det samme. Mulige forbedringer vil være å ta hensyn til bestillingsboksdybden og dele opp handelen dynamisk og forsøke å underby andre handelsfolk å gjøre det samme. Også å sette alt opp på en dedikert server nær den fysiske plasseringen av BTC-e-kampmotoren, bør drastisk redusere lag og gi deg en potensiell kant. Postnavigasjon Denne funksjonen utfører de klassiske parhandelsrammene i et gitt sett av priser Fra Wikipedia, den frie encyklopedi: Parhandelen ble utviklet på slutten av 1980-tallet av kvantitative analytikere og pioner av Gerald Bamberger mens han var hos Morgan Stanley. Med hjelp av andre på Morgan Stanley på den tiden, inkludert Nunzio Tartaglia, fant Bamberger at visse verdipapirer, ofte konkurrenter i samme sektor, var korrelert i deres daglige prisbevegelser. Når korrelasjonen brøt sammen, det vil si en aksje handlet opp mens den andre handlet ned, ville de selge den utmerkede aksjen og kjøpe den underpresterende, og satse på at spredningen mellom de to til slutt ville konvergere. Kilde: en. wikipedia. orgwikiPairstradeAlgorithmicpairstrading Se også den store boken Demon of Our Own Design av Richard Bookstaber, som gir en interessant bakgrunn for parhandelsstrategien. Det er mange måter du kan implementere parhandelsrammen på. For denne pakken brukte jeg et veldig enkelt sett med regler. Detaljer finner du innen koder kommentarer. Vær oppmerksom på at denne pakken har blitt utviklet gjennom årene, og det vil ikke lenger nøyaktig kopiere resultatene fra 2007-papiret mitt. Pakkenes egenskaper: - Håndterer et hvilket som helst antall eiendeler - Utfører separat plottet for total kumulativ fortjeneste fra de lange, korte og kombinerte posisjonene. - Outputs alle handler, inkludert handlede priser og tid for handler. - Gir brukeren en stor mengde inputvalg for parhandelens algoritme, inkludert: hvor mye penger som skal settes i hver posisjon (lang og kort) verdi av transaksjonskostnad (i pengeenhet) størrelse på bevegelige vindu for å finne parene over prisdata periodicity av par oppdaterer maksimalt antall dager for å beholde enhver handel (uten konvergens). verdi av terskelvariabel NATH, P. (2003) High Frequency Par Trading med amerikanske statsobligasjoner: Risiko og belønning for sikringsfond, Working Paper, London Business School. GATEV, E. GOETZMANN, W. N. ROUWENHORST, K. G. (1999) Parhandel: Utførelse av en arbitrageordning med relativ verdi, Working Paper, Yale School of Management. Tilgjengelig på SSRN: ssrnabstract141615. PERLIN, M. S. (2009) Evaluering av Par Trading Strategy på det brasilianske finansmarkedet Journal of Derivatives Amp Hedge Funds, V. 15, N. 2, s. 122-136. PERLIN, M. S. (2007b) M of a Kind: En multivariabel tilnærming ved parhandel. Arbeidspapir. tilgjengelig på SSRN: ssrnabstract952782.Real-time trading system demo Hei der Hvis du er ny her, vil du kanskje abonnere på RSS-feed eller e-post-feed for oppdateringer på Undocumented Matlab-emner. I 23. mai 2013 ga jeg en presentasjon på MATLAB Computational Finance Conference i New York. Rommet var fullpakket med nær 200 fagfolk i finansbransjen. Energien og tilbakemeldingen var enorm, det var en flott opplevelse. Hvis du kom til konferansen, takk for at du er et stort publikum. I september 19, 2013 ga jeg en variant av presentasjonen på MATLAB Computational Finance Virtual Conference. Presentasjonen (PDF-format) er gitt her. videoopptaket er tilgjengelig her. I begge tilfellene presenterte jeg en demo-applikasjon som viste hvordan Matlab kan brukes til å skape et fullstendig end-to-end handelssystem, og fremhever Matlab8217s potensial som en plattform av valg. Jeg brukte interaktive meglere til å demonstrere leveringsdata for markedsdata og kontoportefølje, samt for å sende handelsordre til markedet via IB-Matlab-kontakten: Handelsalgoritmen som brukes i demoen, er trivielt forenklet (tilfeldig). I et virkelighetssystem vil du selvsagt erstatte det med din egen proprietære algoritme. Men vær så snill å bruke denne demoen som utgangspunkt for søknaden din. Demo kildekoden er gitt her (tradingDemo. m og støttefiler). Merk at dette leveres som-er, gratis, men uten garanti eller støtte. Du vil naturligvis trenge IB-Matlab og en Interactive Brokers-konto for å kjøre den. Jeg håper vi har mulighet til å jobbe sammen på prosjektene dine. Send meg en epost hvis du vil ha hjelpen min til rådgivning, opplæring eller utviklingsarbeid. 4 Responses to Real-time trading system demo Jeg har prøvd Activex ruten før du kjøpte produktet. Det er en stor grunnleggende feil når det gjelder å bruke ActiveX med Matlab. Si, du kjører en algoritme, og du behandler en funksjon, og samtidig brenner TWS en Event. Hvis du bruker ActiveX, vil MATLAB IKKE oppdatere prisen før behandlingen av funksjonen din er fullført. Så flere hendelser vil bli savnet og prisen du vil se ville være en annen. Mens i JAVA. det er ikke noe slikt problem. Som noen tilfelle sparket vil umiddelbart bli fanget av java som kjører i bakgrunnen. Så når du ringer til GetLastPrice, får du den riktige prisen. En annen feil er selvsagt det faktum at du bare kan bruke ActiveX med WINDOWS. Mens med JAVA kan du bruke den med Windows, Mac, Linux etc. Det er IKKE en god ide å streame i Live Trades data som det kommer inn i MATLAB. Tenk deg, du har 100 symboler, som oppdaterer alle si 200 msek, så du har en handel som skjer så fort og blir tatt og lagret i Matlab. På grunn av MATLAB8217s enkeltsporede problem, vil noen Trades flått bli savnet, og vil også spise opp minnet. Så alt du vil kunne gjøre er bare å streame i data og ikke gjøre noe annet. Kenan 8211 faktisk har Java API (som brukes av IB-Matlab) mange fordeler over ActiveX API (som brukes av MathWorks8217 Trading Toolbox). En av de heldige resultatene ved å bruke Java er at IB-Matlab kan kjøre på alle plattformer som kjører Matlab (Windows, Mac, Linux), siden alle disse plattformene har både Java og en IB TWS-klient. Java-API-en er også mye raskere og mer pålitelig (ActiveX-kontakten rapporteres å være å slippe IB-hendelser nå og da). Når det gjelder forsinkelse av streaming-sitat, avhenger dette av sikkerhetsvolatiliteten, antall overvåkede verdipapirer, nettverksbåndbredde, maskinvare, andre løpende prosesser på datamaskinen og et bredt spekter av andre aspekter som kan påvirke ytelsen. På en vanlig Lenovo Thinkpad E530 bærbar datamaskin som kjører Matlab R2013a på Win7, nådde jeg strømmende latens så lav som 1-2 mSek (dvs. hundrevis av IB-hendelser per sekund). Selvfølgelig YMMV. Marco Ruijken sier: Suksessfull backtesting av algoritmiske handelsstrategier - Del I Denne artikkelen fortsetter serien om kvantitativ handel, som startet med Beginners Guide og Strategy Identification. Begge disse lengre, mer involverte artiklene har vært veldig populære, så jeg fortsetter i denne venen og gir detaljer om temaet strategi backtesting. Algoritmisk backtesting krever kunnskap om mange områder, inkludert psykologi, matematikk, statistikk, programvareutvikling og marketexchange mikrostruktur. Jeg kunne ikke håpe å dekke alle disse emnene i en artikkel, så jeg skal dele dem i to eller tre mindre biter. Hva skal vi diskutere i denne delen Jeg begynner med å definere backtesting og da vil jeg beskrive grunnleggende om hvordan det utføres. Da vil jeg belyse de forspenninger vi berørte i Beginners Guide to Quantitative Trading. Neste vil jeg presentere en sammenligning av de ulike tilgjengelige backtesting programvare alternativene. I etterfølgende artikler vil vi se nærmere på detaljer om strategibestemmelser som ofte knapt nevnes eller ignoreres. Vi vil også vurdere hvordan å gjøre backtesting prosessen mer realistisk ved å inkludere idiosyncrasies av en trading utveksling. Da vil vi diskutere transaksjonskostnader og hvordan du skal modellere dem riktig i en backtest-innstilling. Vi vil ende med en diskusjon om utførelsen av våre backtests og endelig gi et eksempel på en felles kvantstrategi, kjent som en gjennomsiktig parhandel. La oss begynne med å diskutere hva backtesting er og hvorfor vi bør utføre det i vår algoritmiske handel. Hva er Backtesting Algoritmisk handel står bortsett fra andre typer investeringsklasser fordi vi på en mer pålitelig måte kan gi forventninger om fremtidig ytelse fra tidligere resultater, som en konsekvens av rikelig datatilgjengelighet. Prosessen som dette utføres er kjent som backtesting. Enkelt sagt blir backtesting utført ved å eksponere din spesifikke strategialgoritme til en strøm av historiske økonomiske data, noe som fører til et sett med handelssignaler. Hver handel (som vi vil bety her for å være en rundtur på to signaler) vil ha en tilknyttet fortjeneste eller tap. Akkumuleringen av denne fortjenesten i løpet av strategien din vil føre til total fortjeneste og tap (også kjent som PL eller PnL). Det er essensen av ideen, selv om djevelen selvfølgelig alltid er i detaljene. Hva er hovedårsakene til backtesting av en algoritmisk strategi. Filtrering - Hvis du husker fra artikkelen om strategiidentifikasjon. Vårt mål i den første undersøkelsen var å sette opp en strategipipeline og deretter filtrere ut en strategi som ikke oppfyller visse kriterier. Backtesting gir oss en annen filtreringsmekanisme, da vi kan eliminere strategier som ikke oppfyller våre ytelsesbehov. Modellering - Backtesting gjør det mulig for oss å (trygt) teste nye modeller av bestemte markedsfenomener, for eksempel transaksjonskostnader, ordreruting, latens, likviditet eller andre markedsmiljøstrukturproblemer. Optimalisering - Selv om strategioptimalisering er full av forstyrrelser, gir backtesting oss mulighet til å øke ytelsen til en strategi ved å endre mengden eller verdiene av parametrene knyttet til den strategien og omberegne ytelsen. Verifisering - Våre strategier er ofte hentet eksternt, via vår strategipipeline. Backtesting en strategi sikrer at den ikke har blitt feil implementert. Selv om vi sjelden vil få tilgang til signaler generert av eksterne strategier, har vi ofte tilgang til resultatene som Sharpe Ratio og Drawdown egenskaper. Dermed kan vi sammenligne dem med vår egen implementering. Backtesting gir en rekke fordeler for algoritmisk handel. Det er imidlertid ikke alltid mulig å returtest en strategi. Generelt, ettersom frekvensen av strategien øker, blir det vanskeligere å korrekt modellisere markedets og børsens mikrostruktureeffekter. Dette fører til mindre pålitelige backtests og dermed en vanskeligere vurdering av en valgt strategi. Dette er et spesielt problem hvor eksekveringssystemet er nøkkelen til strategien, som med ultrahøyfrekvente algoritmer. Dessverre er backtesting fulle av forstyrrelser av alle typer. Vi har rørt noen av disse problemene i tidligere artikler, men vi vil nå diskutere dem i dybden. Forstyrrelser som påvirker strategien Backtests Det er mange forstyrrelser som kan påvirke ytelsen til en backtested strategi. Dessverre har disse forutsetningene en tendens til å oppblåse ytelsen i stedet for å forringe den. Dermed bør du alltid vurdere en backtest å være en idealisert øvre grense på den faktiske utførelsen av strategien. Det er nesten umulig å eliminere forstyrrelser fra algoritmisk handel, så det er vår jobb å minimere dem så godt vi kan for å ta informerte beslutninger om våre algoritmiske strategier. Det er fire store forstyrrelser som jeg ønsker å diskutere: Optimalisering Bias. Forsiktig Bias. Overlevelsesforstyrrelser og psykisk toleranse. Optimalisering Bias Dette er trolig den mest lumske av alle backtest-forstyrrelser. Det innebærer å justere eller introdusere ytterligere handelsparametere til strategiens ytelse på backtest datasettet er veldig attraktivt. Men når leve kan resultatene av strategien være markant annerledes. Et annet navn for denne bias er kurvepassing eller data-snooping bias. Optimeringsforstyrrelser er vanskelig å eliminere ettersom algoritmiske strategier ofte involverer mange parametere. Parametre i dette tilfellet kan være inngangskriterier, tilbakekallingsperioder, gjennomsnittsperioder (dvs. den bevegelige gjennomsnittlige utjevningsparameteren) eller volatilitetsmålingsfrekvensen. Optimaliseringsforstyrrelser kan minimeres ved å holde antall parametere til et minimum og øke mengden datapunkter i treningssettet. Faktisk må man også være forsiktig med sistnevnte, da eldre treningssteder kan bli gjenstand for et tidligere regime (for eksempel et lovgivningsmiljø) og dermed ikke er relevant for din nåværende strategi. En metode for å redusere denne bias er å utføre en følsomhetsanalyse. Dette betyr at parametrene varierer trinnvis og plotter ytelsesytelsen. Lyd, grunnleggende begrunnelse for parametervalg bør med alle andre faktorer anses å føre til en jevnere parameteroverflate. Hvis du har en veldig hoppende ytelsesflate, betyr det ofte at en parameter ikke reflekterer et fenomen og er en gjenstand for testdataene. Det er en stor litteratur om multidimensjonale optimaliseringsalgoritmer, og det er et svært aktivt forskningsområde. Jeg vil ikke dvele på det her, men hold det i bakhodet når du finner en strategi med en fantastisk backtest Look-Ahead Bias Look-ahead bias blir introdusert i et backtesting system når fremtidige data ved et uhell er inkludert i et punkt i simulering der dataene ikke ville ha vært tilgjengelige. Hvis vi kjører backtesten kronologisk, og vi når tidpunkt N, forekommer fremtidsforspenning hvis data er inkludert for noe punkt Nk, hvor k0. Look-ahead bias feil kan være utrolig subtil. Her er tre eksempler på hvordan fremtidsforstyrrelser kan innføres: Tekniske feil - Arrayvektorer i kode har ofte iteratorer eller indeksvariabler. Feilreguleringer av disse indeksene kan føre til en forutgående forspenning ved å inkorporere data ved Nk for ikke-null k. Parameterberegning - Et annet vanlig eksempel på fremtidsforspenning skjer når man beregner optimale strategiparametere, for eksempel med lineære regresjoner mellom to tidsserier. Hvis hele datasettet (inkludert fremtidige data) brukes til å beregne regresjonskoeffisientene, og dermed på en retroaktiv måte brukes til en handelsstrategi for optimalisering, blir fremtidige data innarbeidet, og en forutgående forspenning eksisterer. MaximaMinima - Visse handelsstrategier gjør bruk av ekstreme verdier i en hvilken som helst tidsperiode, for eksempel å inkorporere høye eller lave priser i OHLC-data. Men siden disse maksimalminimalverdiene bare kan beregnes i slutten av en tidsperiode, innføres en blikkprøveforventning hvis disse verdiene brukes - i løpet av den nåværende perioden. Det er alltid nødvendig å lagre highlow-verdier med minst en periode i enhver handelsstrategi som bruker dem. Som med optimaliseringsforstyrrelser, må man være ekstremt forsiktig for å unngå introduksjonen. Det er ofte den viktigste grunnen til at handelsstrategier undergraver sine backtests betydelig i live trading. Survivorship Bias Survivorship bias er et spesielt farlig fenomen og kan føre til betydelig oppblåst ytelse for bestemte strategityper. Det oppstår når strategier testes på datasett som ikke inkluderer hele universet av tidligere eiendeler som kan ha blitt valgt på et bestemt tidspunkt, men bare vurdere de som har overlevd til nåværende tid. For eksempel, vurder å teste en strategi for et tilfeldig utvalg av aksjer før og etter 2001-markedet. Noen teknologilager gikk konkurs, mens andre klarte å holde seg flytende og til og med blomstre. Hvis vi hadde begrenset denne strategien bare til aksjer som gjorde det gjennom markedsutvinningsperioden, ville vi innføre en overlevelsesforstyrrelser fordi de allerede har demonstrert deres suksess for oss. Faktisk er dette bare et annet spesifikt tilfelle av fremtidsforspenning, da fremtidig informasjon innlemmes i tidligere analyser. Det er to hovedveier for å redusere overlevelsesforstyrrelser i strategistøttene dine: Survivorship Bias Free Datasets - I tilfelle av egenkapitaldata er det mulig å kjøpe datasett som inkluderer avnoterte enheter, selv om de ikke er billige og bare pleier å bli benyttet av institusjonelle firmaer . Spesielt er Yahoo Finance-data ikke overlevert bias gratis, og dette brukes ofte av mange forhandlere av algo-handelsfolk. Man kan også handle på aktivaklasser som ikke er tilbøyelige til overlevelse, slik som visse varer (og deres fremtidige derivater). Bruk mer nylige data - For aksjer reduserer bruk av et nyere datasett muligheten for at aksjeseleksjonen er vektet til overlevende, ganske enkelt fordi det er mindre sannsynlighet for total avnotering av aksjer i kortere tidsperioder. Man kan også begynne å bygge et personlig overlevelses-bias-datasett ved å samle inn data fra nåværende punkt videre. Etter 3-4 år vil du ha et solidt overlevelses-bias-fritt sett med aksjedata for å backtest videre strategier. Vi vil nå vurdere visse psykologiske fenomener som kan påvirke din trading ytelse. Psykologisk toleranse Bias Disse spesielle fenomenene diskuteres ikke ofte i forbindelse med kvantitativ handel. Det diskuteres imidlertid mye med hensyn til mer skjønnsmessige handelsmetoder. Det har forskjellige navn, men jeg bestemte meg for å kalle det psykisk toleranseforstyrrelser fordi det fanger essensen av problemet. Når du lager backtests over en periode på 5 år eller mer, er det enkelt å se på en oppadgående egenkapitalkurve, beregne den sammensatte årlige avkastningen, Sharpe-forholdet og til og med trekkegenskaper og være fornøyd med resultatene. Som et eksempel kan strategien ha en maksimal relativ drawdown på 25 og en maksimal trekkvarighet på 4 måneder. Dette ville ikke være atypisk for en momentumstrategi. Det er greit å overbevise seg om at det er lett å tolerere slike perioder med tap fordi det generelle bildet er rosenrødt. Men i praksis er det langt vanskeligere Hvis historiske trekk på 25 eller flere forekommer i backtestene, så vil du med all sannsynlighet se perioder med tilsvarende drawdown i live trading. Disse periodene med drawdown er psykologisk vanskelig å tåle. Jeg har observert første hånd hva en utvidet drawdown kan være, i en institusjonell setting, og det er ikke hyggelig - selv om backtestene tyder på at slike perioder vil oppstå. Grunnen til at jeg har betegnet det er en forspenning er at ofte en strategi som ellers ville lykkes, blir stoppet fra handel i tider med utvidet drawdown og dermed vil føre til betydelig underprestering i forhold til en backtest. Selv om strategien er algoritmisk i naturen, kan psykologiske faktorer fremdeles ha stor innflytelse på lønnsomheten. Takeaway er å sikre at hvis du ser drawdowns av en viss prosentandel og varighet i backtestene, bør du forvente at de skal skje i live tradingmiljøer, og må fortsette for å oppnå lønnsomhet en gang til. Programvarepakker for Backtesting Programvarelandskapet for strategi backtesting er enorm. Løsninger spenner fra fullstendig integrert institusjonell sofistikert programvare til programmeringsspråk som C, Python og R, hvor nesten alt må skrives fra bunnen av (eller passende plugins oppnådd). Som kvanthandlere er vi interessert i balansen mellom å være i stand til å eie vår handelssteknologistakk versus hastigheten og påliteligheten til vår utviklingsmetode. Her er de viktigste hensynene til programvarevalg: Programmeringsevner - Valget av miljø vil i stor grad komme ned til din evne til å programmere programvare. Jeg vil hevde at å være i kontroll over den totale stabelen vil ha større effekt på din langsiktige PL enn å outsourcing så mye som mulig til leverandørprogramvare. Dette skyldes ulemperrisikoen for å ha eksterne feil eller idiosyncrasier som du ikke klarer å fikse i leverandørprogramvare, noe som ellers lett kunne løses hvis du hadde mer kontroll over din tech stack. Du vil også ha et miljø som oppnår den rette balansen mellom produktivitet, tilgjengelighet for bibliotek og utførelseshastighet. Jeg lager min egen personlige anbefaling nedenfor. Execution CapabilityBroker Interaction - Visse backtesting programvare, for eksempel Tradestation, binder direkte med en megling. Jeg er ikke en fan av denne tilnærmingen, da redusering av transaksjonskostnader ofte er en stor del av å få et høyere Sharpe-forhold. Hvis du er bundet til en bestemt megler (og Tradestation tvinger deg til å gjøre dette), vil du få en vanskeligere overgang til ny programvare (eller en ny megler) hvis behovet oppstår. Interaktive meglere gir en API som er robust, om enn med et litt stødig grensesnitt. Tilpasning - Et miljø som MATLAB eller Python gir deg stor fleksibilitet når du oppretter algo-strategier, da de gir fantastiske biblioteker til nesten alle matematiske operasjoner som er tenkelige, men tillater også omfattende tilpasning der det er nødvendig. Strategi Kompleksitet - Visse programmer bare ikke kutte ut for tunge nummer crunching eller matematisk kompleksitet. Excel er et slikt stykke programvare. Selv om det er bra for enklere strategier, kan det egentlig ikke takle mange eiendeler eller mer kompliserte algoritmer, med fart. Bias Minimization - Låner et bestemt stykke programvare eller data seg mer til handelsforstyrrelser Du må sørge for at hvis du vil lage all funksjonalitet selv, at du ikke introduserer feil som kan føre til forstyrrelser. Hastighet for utvikling - Man bør ikke bruke måneder og måneder til å implementere en backtest-motor. Prototyping bør bare ta noen uker. Pass på at programvaren din ikke hindrer fremgangen din i stor grad, bare for å få tak i noen ekstra prosentpoeng av eksekveringshastighet. C er elefanten i rommet her Utførelseshastighet - Hvis strategien din er helt avhengig av eksekveringsaktualitet (som i HFTUHFT), vil et språk som C eller C være nødvendig. Imidlertid vil du være opptatt av Linux-kjerneoptimalisering og FPGA-bruk for disse domenene, som ligger utenfor rammen av denne artikkelen. Kostnad - Mange av programvaremiljøene du kan programmere algoritmiske handelsstrategier med, er helt gratis og åpen kildekode. Faktisk gjør mange hedgefond bruk av åpen kildekode-programvare for hele algo trading stacks. I tillegg er Excel og MATLAB begge relativt billige, og det finnes til og med gratis alternativer til hver. Nå som vi har listet opp kriteriene som vi trenger å velge programvareinfrastruktur, vil jeg kjøre gjennom noen av de mer populære pakkene og hvordan de sammenligner: Merk: Jeg skal bare inkludere programvare som er tilgjengelig for de fleste forhandlere og programvareutviklere, da dette er leseren av nettstedet. Mens annen programvare er tilgjengelig, for eksempel de mer institusjonelle verktøyene, føler jeg at disse er for dyrt for å bli brukt effektivt i en detaljhandel, og jeg har ingen erfaring med dem. Backtesting Software Comparison Beskrivelse: Språk på høyt nivå designet for utviklingshastighet. Bredt utvalg av biblioteker for nesten enhver programmatisk oppgave å tenke seg. Oppnå bredere aksept i hedgefond og investeringsbank samfunn. Ikke helt så fort som CC for eksekveringshastighet. Gjennomføring: Python plugins finnes for større meglere, som Interactive Brokers. Derfor kan backtest og exekveringssystem alle være en del av samme tech stack. Tilpassing: Python har et veldig sunt utviklingssamfunn og er et modent språk. NumPySciPy gir rask vitenskapelig databehandling og statistisk analyseverktøy som er relevant for kvanthandel. Strategi Kompleksitet: Mange plugins eksisterer for de viktigste algoritmer, men ikke like stort et kvant-fellesskap som eksisterer for MATLAB. Bias Minimization: Samme bias minimeringsproblemer eksisterer som for alle høynivå språk. Trenger å være ekstremt forsiktig med testing. Utviklingshastighet: Pythons største fordel er utviklingshastighet, med robust innebygget testingskapasitet. Utføringshastighet: Ikke like rask som C, men vitenskapelige databehandlingskomponenter er optimalisert, og Python kan snakke med innfødt C-kode med visse plugins. Kostnad: FreeOpen Kilde Beskrivelse: Eldre språk på høyt nivå designet for hastighet av utførelse. Bredt utvalg av kvantitative finans - og numeriske biblioteker. Hardere å feilsøke og tar ofte lengre tid å implementere enn Python eller MATLAB. Ekstremt utbredt i både kjøp og salg. Utførelse: De fleste meglerprogrammer er skrevet i C og Java. Dermed finnes mange plugins. Tilpasning: CC gir direkte tilgang til underliggende minne, og dermed kan ultrahøyfrekvensstrategier implementeres. Strategi Kompleksitet: C STL gir et bredt utvalg av optimaliserte algoritmer. Nesten enhver spesialisert matematisk algoritme besitter en fri, åpen kildekode-CC-implementering på nettet. Bias Minimization: Forsiktig forspenning kan være vanskelig å eliminere, men ikke vanskeligere enn andre høyt språk. Gode ​​feilsøkingsverktøy, men man må være forsiktig når man arbeider med underliggende minne. Utviklingshastighet: C er ganske ordentlig i forhold til Python eller MATLAB for samme algoritme. Flere linjer av kode (LOC) fører ofte til større sannsynlighet for feil. Utføringshastighet: CC har ekstremt hurtig eksekveringshastighet og kan være godt optimalisert for spesifikke beregningsarkitekturer. Dette er hovedgrunnen til å utnytte det. Kostnad: Ulike kompilatorer: LinuxGCC er gratis, MS Visual Studio har forskjellige lisenser. Ulike strategier vil kreve forskjellige programvarepakker. HFT - og UHFT-strategier vil bli skrevet i CC (i disse dager utføres de ofte på GPUer og FPGAer), mens lavfrekvente retningsbestemte egenkapitalstrategier er enkle å implementere i TradeStation, på grunn av alt i en art av softwarebrokerage. Min personlige preferanse er for Python, da den gir riktig grad av tilpasning, utviklingshastighet, testingskapasitet og eksekveringshastighet for mine behov og strategier. Hvis jeg trenger noe raskere, kan jeg slippe inn til C direkte fra mine Python-programmer. En metode favorisert av mange kvanthandlere er å prototype deres strategier i Python og deretter konvertere de langsommere utførelseseksjonene til C på en iterativ måte. Til slutt er hele algoet skrevet i C og kan stå alene for handel. I de neste artiklene om backtesting vil vi se nærmere på noen spesielle problemer rundt implementeringen av et algoritmisk trading backtesting system, samt hvordan å innlemme effektene av handelsutveksling. Vi vil diskutere måling av strategisk ytelse og til slutt konkludere med en eksempelstrategi. Bare Komme i gang med kvantitativ handel

Comments

Popular posts from this blog

Security Trading System Er Diagram

Global Trading System Definition

Trading System Efficace