Bitfinex tillkännagav idag starten av gruvkontrakt som en handelsprodukt på sin plattform. Totalt 100 THS (terahashes per sekund) med en utgång på 3 månader har gjorts tillgängliga för handel under namnet TH1BTC. De 100 THSna ingår i en större pool på 3500 THS så att fler gruvkontrakt kan bli tillgängliga i framtiden. Intressant, detta markerar första gången att det är möjligt att korta ett gruvkontrakt. Kortslutning av ett gruvkontrakt innebär att vi nu får ett belopp av Bitcoin (det pris vi säljer det till) och betalar därefter utdelning (i Bitcoin) under följande 3 månader tills avtalet löper ut i mitten av december. En vinst görs om summan av alla utdelningar som betalats ut (plus räntan vi betalat för att korta kontraktet) är mindre än vad vi fick i början när vi sålde kontraktet (till någon annan självklart). Detta innebär att priset för TH1BTC ska bero på 3 variabler (i minskande ordning av betydelse): Förändringen av gruvproblemet fram till den 15 december. Återstående tid till 15 december. Räntan (swap rate) Om svårigheter ökar utdelningsbetalningarna blir mindre eftersom 1 THS representerar en mindre del av hela nätverkshackmakten. Därför bör priset på ett kontrakt minska om svårigheten ökar. Ju närmare vi kommer till utgången, kan feber Bitcoins vara uppriktigt med totalt 1 THS. Därför bör priset på ett kontrakt minska ju närmare vi når utgången och nå ett pris på 0 vid utgången. Ju högre ränta desto dyrare är det att ange och hålla kontraktet över hela längden på 3 månader. Bitfinex erbjuder inte 90 dagars swappar. Därför ingår ett kontrakt med målet att hålla det tills slutet innehåller en del ränterisk eftersom någon gång måste en ny byte tas ut (med en potentiellt ogynnsam ränta). Detta är mindre av ett problem när du går lång (Bitcoin-priser är vanligtvis låga) än när du går kort (det finns bara högst 100 kontrakt tillgängliga totalt, ingen kortslutning). För att kompensera bör riskpriserna öka när växelkurserna ökar. Den stora okända är naturligtvis förändringen i minskruvproblemet under de närmaste 90 dagarna. I följande figur ser vi hur svårigheter förändrats under föregående 6 månader. Uppgifterna är från Tradeblock och det visar inte bara en grafisk representation av tidigare förändringar i svårigheten (svårigheten ändras var 14: e dag beroende på tidigare hash-hastighet. Mer information finns på wikien) men också en del grundläggande sammanfattningsstatistik. I genomsnitt har svårigheten ökat 27 under de senaste 30 dagarna och 77 under de senaste 60 dagarna. För att uppskatta det rimliga priset på en TH1BTC antar vi att svårigheten ökar i genomsnitt 15 per månad under de kommande tre månaderna. För närvarande är priset för att köpa ett kontrakt värt 1 THS 2 BTC. Poolavgiften är 3 och vi kommer att ignorera räntorna. Om vi fyller i all information får vi följande resultat: Om vi så länge följer ett kontrakt baserat på våra antaganden skulle vi göra en förlust på cirka 0,39 Bitcoin (lite mer i verkligheten sedan vi börjar gruva i mitten av september till mitten i december) eftersom de förväntade utdelningarna (månadsintäkter) inte kommer att täcka våra initiala kostnader för 2 BTC innan kontraktet löper ut. Å andra sidan skulle korta till ett pris av 2 Bitcoin ha genererat en vinst på cirka 0,39 Bitcoin per kontrakt. Tänk på att vi inte omfattade swapkostnader som för närvarande ligger runt 1 per dag (). Det finns två sätt att titta på resultaten. Antingen kan vi säga att priserna för TH1BTC för närvarande är övervärderade och borde vara närmare cirka 1,5 BTC. Om vi antar svårigheter kommer att öka mer än 15 per månad så bör priserna vara ännu lägre än det. Eller vi kan säga att marknaden är effektiv och priserna är korrekta, vilket skulle innebära att marknaden förväntar sig svårigheter att minska i genomsnitt ca 2 per månad under de närmaste 90 dagarna. Hur som helst kommer resultaten att vara kända med säkerhet på 90 dagar. Kämpar för att återhämta sig från den senaste Bitcoin Flash-kraschen som härstammar från Bitfinex bara fyra dagar. Bitcoin-priserna tog ett annat dyk idag eftersom marginalhandlare fick sina positioner likvida på BTC-e. Händelsen startade klockan 1:36 (UTC1) när stora försäljningsorder började dyka upp på den tredje största västliga Bitcoin-utbytet BTC-e. Nedåtgående fart ökade stadigt, eftersom orderboken blev alltmer tunn, kraschade priser till en låg av USD 309 per Bitcoin klockan 13.43. Under de följande minuterna återhämtade priserna snabbt på tunn volym till cirka 442 USD, eftersom arbitragehandlare började utnyttja rabatten i förhållande till andra börser. BTC-e är en av de få stora börserna som erbjuder marginhandel till sina kunder via MetaTrader-plattformen sedan november 2013, men detaljerna om vem som exakt tillhandahåller de medel som behövs för marginalhandel har varit oklara. Formen och speciellt tidpunkten för kraschen pekar mot att marginalhandlare är likvida (eller stoppa order som utförs), som liknar vad som hände på Bitfinex för några dagar sedan. Men till skillnad från Bitfinex som är transparent om öppna byta positioner. BTC-e tillhandahåller inte viktiga data som skulle behövas för att ge en mer noggrann analys och så kan detta senaste uttalande endast betraktas som en bra gissning. Till skillnad från Bitfinex, som bygger på en dold algoritm i ett försök att styra orderflödet. BTC-e verkar inte ha några speciella skyddsåtgärder för att mildra sådana händelser. Fallet under 400 berodde främst på brist på bud i orderboken och inte på grund av att marknaden trodde att det verkliga värdet var under 400, eftersom återstoden tillbaka till över 440 bara några minuter senare visade sig i grunden. Att stoppa handeln under extremt nedåtgående volatilitet kunde därför lätt avvärja blodsutgjutningen bland marginhandlare genom att ge andra marknadsaktörer mer tid att tjocka upp orderboken. Uppdatering 4:58 PM (UTC1): BrCapoeira publicerade på Reddit ett intressant diagram baserat på data från Metatrader-plattformen: Denna graf innebär att en enda stor order var orsaken till denna händelse. Huruvida den här ordern skapades på grund av ett marginalanrop, är ett enkelt misstag, att manipulera marknaden eller att öppna en stor kort position oklart. Sunt förnuft skulle föreslå att det troligen var resultatet av en marginalanrop av en enda stor näringsidkare. Mitt tidigare inlägg på detta ämne har tagits upp under diskussioner i efterdyningarna av den senaste Bitcoin flash-kraschen. Coindesk var en av de första som tog upp den och sedan dess började olika inlägg om öppenhet och eventuellt ansvar för utbyten för att aktivt hantera orderutförande visas. Som ett resultat av dessa händelser fortsatte Josh Rossi, vice vd för affärsutveckling vid Bitfinex, att Reddit öppet tog upp några av de problem som väcktes mot utbytet. Fakta som vi vet är att det fanns några stora försäljningsorder kort före kraschen påbörjades, till exempel en 500-säljorder på Bitstamp kl 9.49 (UTC1), cirka 6 minuter innan en stor säljorder på Bitfinex utlöste kraschen. Uppgifterna berättar emellertid inte om det var insiderhandel, någon form av marknadsmanipulation. eller ett enkelt misstag. Faktum är att efter Bitcoin-flashkraschen minskade öppna växlingspositioner från cirka 28m till 24m vilket indikerar att 8400 marginella positioner stängdes (antagande i genomsnitt 475) på ett sätt (marginalanrop) eller en annan (stopporderträff). Uppgifterna berättar inte för oss vad förhållandet är men enligt Josh endast ca 650 Bitcoins såldes som ett resultat av marginalanrop. Som korrekt påpekad av Jonathan Levin. Faktum är att det börjar ungefär 24 timmar innan bitcoin-flashkraschen fram till själva kraschen ytterligare 1000 bitcoins togs ut i korta positioner och ca 2500 shorts stängdes därefter under kraschen. Huruvida dessa shorts öppnades för att säkra befintliga positioner, som ett skadligt försök att utlösa ett marginalanrop eller ett sätt att förutse marknaden med hjälp av privat information kan inte bestämmas av tillgängliga data (det ser emellertid ut märkligt misstänkt). Vad var oväntat Personligen är den intressanta punkten inte att Bitcoin flash kraschade. Plötsliga prisfluktuationer hände tidigare och kommer att hända i framtiden, särskilt i illikvida marknader som Bitcoin. Den intressanta punkten är Bitfinex medverkan och hur de aktivt hanterade orderkörning utan att informera marknadsaktörerna i förväg. Bitfinex-matchningsmotorn stoppades inte under hela kraschen, men den saktade ned (men ingenstans så illa som den ökända 70-minuters orderlagringen på den nuvarande MtGox-utbytet under kraschen år 2012). Men vad Bitfinex gjorde var att de introducerade någonting som de nu hänvisar till som hastighetsstötar. Vad det betyder är att de i huvudsak flaggar order de anser vara ogiltiga eller potentiellt farliga och sakta ner dem avsiktligt. Vid första anblicken kan det tyckas som en bra idé. Vem vill inte att ett filter ska ta bort eller sakta ner onda order, men som så ofta med sådana saker är djävulen i detalj. Problemet är att Bitfinex inte (och eventuellt aldrig kommer) offentliggöra hur exakt de kategoriserar en order som 8220bad8221 och 8220slow it down8221. Om en marknadsaktör bestämmer sig för att lägga upp en stor försäljningsorder mot en tunn orderbok, då fattas hans beslut. Huruvida hans åtgärd var avsedd eller inte, är det inte upp till bytet att bestämma. Det kan vara att denna marknadsaktör helt enkelt var den första personen som reagerade på en stor händelse och är helt villig att bära de extra kostnaderna för den resulterande slippningen i väntan på en stor prisrörelse. Det finns helt enkelt inte ett sätt att noggrant klassificera order a priori som 8220good8221 eller 8220bad8221 eftersom det automatiskt skulle ta del av alla framtida händelser. Vad kan förbättras Misstag (8220fat finger8221, algoritm som går till havs) händer, marginaler blir kallade och människor försöker spela systemet på alla möjliga sätt. Logiskt måste det finnas skyddsåtgärder för att skydda marknaderna och dess deltagare. Bitfinex var definitivt medveten om potentiellt giftigt orderflöde och beredda motåtgärder. Det enda de glömde var att informera sina kunder om de dolda säkerhetsfunktionerna. Att dölja dessa skyddsåtgärder från allmänheten ger osäkerhet på marknaden (särskilt nu när vi vet att de existerar och ibland gör någonting) och lägger i grunden alla aktörers tillit till Bitfinex händer. Vid denna tidpunkt kan en näringsidkare bara hoppas att Bitfinex alltid kommer att agera i sina kunders bästa avsikter. Detta hopp kan vara meningslöst, eftersom Bitfinex gör pengar från handelsavgifter, oberoende av om en näringsidkare faktiskt gör några pengar. Man behöver inte tänka länge för att inse den dolda potentialen för missbruk i ett sådant system. Den viktigaste anledningen till att Josh varför Bitfinex inte avser att publicera sin algoritm är att undvika att ge handlare möjligheten att utnyttja det är falskt och följande visar varför. Det är de officiella marknadsbreddbrytare som används av NASDAQ, publiceras online och helt transparent för alla marknadsaktörer. Dessa regler är verkligen inte perfekta men de är enkla, transparenta och arbetar för en av världens största aktiemarknader. Nu har jag stor respekt för de personer som arbetar på Bitfinex-plattformen, men jag tvivlar på att de lyckades komma fram med en algoritm som skyddar marknadsaktörerna bättre än de som används av en större börshandel med mer än 900 miljoner aktier per dag i genomsnitt . Och om de gjorde det är nu chansen för Bitfinex att bevisa det för världen och eventuellt skriva historia genom att lära de stora pojkarna hur man ska driva en utbyte. När det gäller offentliga utbyten är öppenhet ett måste, inte bara för Bitfinex utan för varje utbyte. Marknadsaktörerna måste veta exakt vad som händer när de lägger order och borde under inga omständigheter behöva förlita sig på god tro ensam. Skyddsåtgärder är viktiga för att olyckor inträffar och marknadskrasch men det är inte upp till utbytet att engagera sig i sekretessdiskriminering. Det finns olika sätt att skydda finansmarknaderna och ingen av dem är perfekta. Att lägga till komplexitet ökar vanligtvis chansen för oavsiktliga biverkningar och därför verkar ett enkelt, öppet tillvägagångssätt mer lämpligt än en dold, komplex. För två dagar sedan reducerade BitMEX sina handelsavgifter till 0 och firade det genom att släppa en grundläggande marknad som gjorde bot på Github. BitMEX driver för närvarande en handelsutmaning till den 29 augusti 2014 för att marknadsföra sin nya plattform. Att frigöra en markeringsmarkering är förmodligen ett intressant och effektivt sätt att öka API-trafiken och stresstest plattformen lite. Självklart kunde jag inte motstå och ta en titt. Marknadsförare är en gaffel av Liquidbot. som var original utformad för att köra på den nu föråldrade MtGox-utbytet. Det fanns några mindre förändringar (ny API-klass för att ansluta till BitMEX, några ytterligare utskrifter till konsol, ändringar för anpassning för terminskontrakt och ett stort och onödigt utskrift till konsolen vid start) men inga signifikanta förändringar i handelslogiken. Algoritmen använder REST och kontrollerar endast för ändringar var 60: e sekund. Detta diskvalificerar redan boten eftersom det är viktigt för långsamt att reagera på pågående förändringar i orderboken. BitMEX begränsar begäran till REST API till 150 per 5 minuter så att du kan försöka minska 60 sekunder till något som 3 men det vann8217t ändra det faktum att så snart marknaderna börjar röra sig kommer du att träffa gränsen och fastna med öppna positioner. För att vara rättvis ger BitMEX boten mer som en marknadsföringsstunt och uttrycker uttryckligen att byte till WebSocket kommer att vara mycket fördelaktigt eftersom det tillåter uppdateringar i realtid. Sammantaget är algoritmen solid skriftlig, tekniskt fungerar och är lätt att installera, men det vann dig att tjäna pengar på lång sikt. Om någon ser allvarligt på att använda denna bot rekommenderar jag följande små ändringar för att göra koden mer användbar: 1. Byt till Webbplats 2. Avsluta position på nära håll: 3. Bygga order som börjar från mittpunkten: Dessutom rekommenderar jag att man mäter volatilitet på något sätt och anpassa avståndet mellan order dynamiskt och storlek. Under testningen var API alltid responsivt och korrekt. Volymen på utbytet är fortfarande låg men plattformens grunder ser lovande ut. Denna bot är ett roligt verktyg för att introducera användare till världen av marknadstillverkning och algoritmisk handel men det won8217t står en chans mot etablerade algoritmer. Obs! Om du funderar på att använda denna algoritm, kom ihåg att marknadsföring är ett heltidsjobb. Något mindre än fullständigt engagemang, snabb reaktionstid och 100 oppetid leder till att du förlorar pengar. Redigera: Följ upp efterkanten här Idag tog Bitcoin-priserna ett dyk som marginhandlare på en av de största börserna Bitfinex fick sina order likviderade. För många nära marknadsobservatörer och mer sofistikerade handlare kom det inte som en överraskning. I själva verket har långa positioner byggt upp kontinuerligt under de senaste månaderna i avvaktan på en ny bubbla i Bitcoin-priserna och uppnådde så mycket som 30 miljoner i utestående byta positioner på Bitfinex. Nu skulle detta inte vara ett problem helt själv så länge som det finns tillräckligt med kapital som stöder lånet. Tyvärr var de flesta av dessa långa positioner angivna runt 600 8211 640 USDBTC och säkerheten lämnades oftast i Bitcoins själv. Nedanstående diagram visar snyggt uppbyggnaden av långa positioner, toppande runt den 14 juli med nära 32 miljoner i swappar. När du kör lite snabb matte baserat på underhållsmarginalen för Bitfinex på 13 och med Bitcoin som säkerhet ser vi att marginalsamtal bör börja runt 520 8211 540 USDBTC-märket. I går kom priserna nära och idag hoppade de äntligen över klippan. Problemet är att när marginalsamtal har ställts in har du en kaskad effekt som rippar genom orderboken, vilket gör att ännu fler order kommer att nå punkten utan återgång och ökar det nedåtgående momentet ytterligare. Sådana händelser är inte begränsade till Bitcoin-utbyten men kan också uppstå vid större utbyten, t. ex. under 2010-kraschen i USA. Orsaket till en sådan flashkrasch kan variera och går från fetfelfel till programmeringsfel till kaskad marginalanrop. Det är intressant att se hur utbytet hanterar dessa händelser. I USA implementerade Nasdaq marknadslåda brytare som gör att handeln stannar under sådana extrema omständigheter. Bitcoinmarknaderna är ännu inte så avancerade och brukar fortsätta att handla. Om vi tittar på orderåtgärden på Bitfinex idag ser vi något väldigt märkligt: Det verkar (och det här är bara ett giss eftersom det inte finns någon officiell kommentar från utbytet) som om Bitfinex kör en algoritm för att hantera marginalanrop. Algoritmen börjar sälja men begränsar sig till 10 prisminskningar inom 1 minut. Om priserna sjunker mer än 10 i 1 minut kommer det att sluta sälja och vänta på att köporder ska komma in. När en gång återkommer en viss mängd beställningar i orderboken börjar algoritmen sälja igen tills alla marginalanrop är uppfyllda. Redigera: LeMogawai var den första som pekade ut det här i det här inlägget och matchar min personliga observation vid tidpunkten för evenemanget. Detta verkar vara ett intressant sätt att ta itu med cascading margin calls men kan också betraktas som gränsöverskridande marknadsmanipulation från utbytessidan. Genom att sprida ut försäljningsorderna över tiden reduceras nedåtgående moment, men handlare hamnar ihop mot utbytet självt och inte på marknaden längre. Utbytet har en informationsfördel vid den tiden och är därför mer sannolikt att vinst än de handlare. Lyckligtvis varade detta bara i ca 10 minuter, varefter kontrollen gavs tillbaka till marknaden. Andra börser som också erbjuder marginhandel som BTC-e och OKcoin har nu en bra position och kan lära av dagens händelser. Genomförandet av ett system som mer liknar brytare av stora börser som Nasdaq kan vara ett smart första drag. Nyligen jobbar jag med att få min nya handelsplattform på väg. Den här nya versionen bygger på Python, använder MySQL för att hålla en databas över alla tidsserier av olika virtuella valutor med automatisk återfyllning från BitcoinCharts och integrerar de tre stora börserna MtGox, BTC-E och Bitstamp. Plattformen kommer att användas som sätt att backtest vissa strategier och engagera sig i automatisk handel. Under det att jag bestämde mig för att dra några data från BTC mot USD från BitcoinCharts och baserat på idéerna i ett papper från Hashem och Timmermann (1995) infördes en enkel handelsstrategi. Tanken är att förutse tecknet för t1-periodens avkastning baserat på en regression, som beräknas på ett automatiskt val av tekniska indikatorer under den sista n-perioden fram till t. Sedan, efter att t1 hänt, uppdaterar vi modellen och försöker förutsäga t2 med all tillgänglig data för de sista n perioderna fram till t1 och så vidare. För min kandidatexamen undersökte jag fyra olika tekniska handelsregler på Forex-marknaderna. Det använder MCS och SPA-testet för att söka efter giltiga modeller bland olika parametrar som inte är föremål för datasnutning. Med hänsyn till realistiska transaktionskostnader finner vi inget bevis på meravkastning, vilket överensstämmer med marknadseffektiviteten. Med den här koden bör du kunna leta efter Bitcoin arbitrage möjligheter inom BTC-e. Den använder idén om ett pris och tillämpar triangulär arbitrage, med beaktande av kostnader och spridning. Anledningen till att jag lägger upp detta här är trots att det fungerar, chansen är att du kommer att vara för långsam för att konkurrera med andra investerare som gör detsamma. Eventuella förbättringar skulle vara att ta hänsyn till orderbokens djup och dela upp affärerna dynamiskt och försöka undergräva andra näringsidkare som gör detsamma. Om du också ställer upp allt på en dedikerad server nära den fysiska platsen för BTC-e-matchningsmotorn bör drastiskt minska fördröjningen och ge dig en potentiell kant. Postnavigering Den här funktionen utför den klassiska parhandelens ramverk i en given uppsättning priser. Från Wikipedia, den fria encyklopedin: Parhandeln utvecklades under slutet av 1980-talet av kvantitativa analytiker och pionjär av Gerald Bamberger vid Morgan Stanley. Med hjälp av andra på Morgan Stanley vid den tiden, inklusive Nunzio Tartaglia, fann Bamberger att vissa värdepapper, ofta konkurrenter inom samma sektor, var korrelerade i sina dagliga prisförändringar. När korrelationen bröt ner, det vill säga ett lager handlas upp medan den andra handlas ner, skulle de sälja det överträffande beståndet och köpa den underpresterande en satsning på att spridningen mellan de två så småningom skulle konvergera. Källa: en. wikipedia. orgwikiPairstradeAlgorithmicpairstrading Se även den stora boken Demon of Our Own Design av Richard Bookstaber, som ger en intressant bakgrund för parhandelens strategi. Det finns många sätt att implementera parhandeln. För det här paketet använde jag en mycket enkel uppsättning regler. Detaljer kan hittas inom koder kommentarer. Observera att detta paket har utvecklats under åren och det kommer inte längre att exakt replikera resultaten från mitt 2007-papper. Paketets egenskaper: - Hanterar valfritt antal tillgångar - Utför separat tomten för total kumulativ vinst från de långa, korta och kombinerade positionerna. - Utmatar alla affärer, inklusive handlade priser och tid för handel. - Ger användaren en stor mängd inmatningsval för parhandelns algoritm, inklusive: summa pengar att placera i varje position (långt och kort) värde av transaktionskostnad (i pengar) storleken på rörligt fönster för att hitta paren över Prisdata periodicitet par uppdaterar maximalt antal dagar för att behålla någon handel (utan konvergens). värde av tröskelvariabeln NATH, P. (2003) High Frequency Par Trading med amerikanska statsobligationer: Risker och belöningar för hedgefonder, arbetspapper, London Business School. GATEV, E. GOETZMANN, W. N. ROUWENHORST, K. G. (1999) Parhandel: Prestanda av en arbitrageordning med relativ värde, arbetspapper, Yale School of Management. Finns på SSRN: ssrnabstract141615. PERLIN, M. S. (2009) Utvärdering av Par Trading Strategy på den brasilianska finansmarknaden Journal of Derivatives Amp Hedge Funds, V. 15, N. 2, s. 122-136. PERLIN, M. S. (2007b) M of a Kind: En mångsidig strategi vid parhandel. Arbetspapper. tillgänglig på SSRN: ssrnabstract952782.Real-time trading system demo Hej där Om du är ny här, kanske du vill prenumerera på RSS-flödet eller e-postflödet för uppdateringar om Undocumented Matlab-ämnen. I maj 23 2013 presenterade jag en presentation på MATLAB Computational Finance Conference i New York. Rummet var fullpaket med nära 200 yrkesverksamma inom finansbranschen. Energin och feedbacken var enorma, det var en stor upplevelse. Om du kom till konferensen tackar du dig för att du är en stor publik. I september 19, 2013 gav jag en variation av den presentationen på Virtual Virtual Conference MATLAB Computational Finance. Presentationen (PDF-format) finns här. videoinspelningen är tillgänglig här. I båda fallen presenterade jag en demo-applikation som visade hur Matlab kan användas för att skapa ett fullständigt handelssystem, vilket framhäver Matlab8217s potential som en valfri plattform. Jag använde interaktiva mäklare för att demonstrera leverans av leverans av marknadsdata och kontoportfölj samt för att skicka handelsorder till marknaden via IB-Matlab-kontakten: Handelsalgoritmen som används i demo är trivialt förenklad (slumpmässig). I ett verkligt system skulle du naturligtvis ersätta det med din egen proprietära algoritm. Men gärna använda den här demo som utgångspunkt för din ansökan. Demokällkoden finns här (tradingDemo. m och support files). Observera att detta tillhandahålls som-är, utan kostnad utan garanti eller support. Du skulle naturligtvis behöva IB-Matlab och ett interaktivt mäklare konto för att köra det. Jag hoppas vi har en chans att arbeta tillsammans med era projekt. Skicka mig ett mail om du vill ha min hjälp i något konsult-, tränings - eller utvecklingsarbete. 4 Responses to Real-time trading system demo Jag har provat Activex rutten innan du köpte produkten. Det finns en stor grundläggande fel när det gäller att använda ActiveX med Matlab. Säg att du kör en algoritm och du bearbetar en funktion, samtidigt som TWS bränder en händelse. Om du använder ActiveX, uppdaterar MATLAB INTE priset tills bearbetningen av din funktion har slutförts. Så flera händelser kommer att saknas och priset du skulle se skulle vara en annan. Medan i JAVA. Det finns inget sådant problem. Som en händelse som sparkas kommer omedelbart fångas av java som körs i bakgrunden. Så när du ringer getLastPrice får du rätt pris. En annan sak är naturligtvis det faktum att du bara kan använda ActiveX med Windows. Med JAVA kan du använda den med Windows, Mac, Linux etc. Det är INTE en bra idé att strömma i Live Trades-data som det kommer in i MATLAB. Tänk dig, du har 100 symboler, som uppdaterar varje säsong 200 msek, så du har en handel som händer så fort och fångas och lagras i Matlab. På grund av MATLAB8217s enkelgängade problem, kommer vissa Trafikvaror att saknas och kommer också att äta upp ditt minne. Så allt du kan göra är att bara strömma i data och inte göra något annat. Kenan 8211 har Java API (som används av IB-Matlab) faktiskt många fördelar jämfört med ActiveX API (som används av MathWorks8217 Trading Toolbox). Ett av de lyckliga resultaten av att använda Java är att IB-Matlab kan köras på alla plattformar som kör Matlab (Windows, Mac, Linux), eftersom alla dessa plattformar har både Java och en IB TWS-klient. Java API-programmet är också mycket snabbare och mer tillförlitligt (ActiveX-kontakten rapporteras vara att släppa IB-händelser då och då). När det gäller latitud för streaming-citat beror det på säkerhetsvolatiliteten, antalet övervakade värdepapper, nätverksbandbredd, datormaskinvara, andra körprocesser på datorn och ett brett utbud av andra aspekter som kan påverka prestanda. På en vanlig Lenovo Thinkpad E530 bärbar dator som kör Matlab R2013a på Win7, nådde jag strömmande citat latens så låg som 1-2 mSec (dvs hundratals IB-händelser per sekund). Naturligtvis YMMV. Marco Ruijken säger: Framgångsrik backtesting av algoritmiska handelsstrategier - Del I Denna artikel fortsätter serien om kvantitativ handel, som började med Beginners Guide och Strategy Identification. Båda dessa längre, mer inblandade artiklar har varit mycket populära så jag fortsätter i denna ån och ger detaljer om ämnet strategi backtesting. Algoritmisk backtesting kräver kunskap om många områden, däribland psykologi, matematik, statistik, mjukvaruutveckling och marknadsexchange mikrostruktur. Jag kunde inte hoppas att täcka alla dessa ämnen i en artikel, så jag ska dela dem i två eller tre mindre bitar. Vad ska vi diskutera i det här avsnittet Jag börjar med att definiera backtesting och då kommer jag att beskriva grunderna för hur det utförs. Då kommer jag att klargöra de fördomar vi berörde i Beginners Guide to Quantitative Trading. Nästa kommer jag presentera en jämförelse av de olika tillgängliga backtestingprogrammen. I efterföljande artiklar kommer vi att titta på detaljerna i strategimodeller som ofta knappast nämns eller ignoreras. Vi kommer också att överväga hur man gör backtesting processen mer realistisk genom att inkludera idiosyncrasies av en handelsutbyte. Då kommer vi att diskutera transaktionskostnader och hur man korrekt modellerar dem i en backtest-inställning. Vi kommer att sluta med en diskussion om utförandet av våra backtests och slutligen ge ett exempel på en gemensam kvantstrategi, känd som en genomsyrande parhandel. Låt oss börja med att diskutera vad backtesting är och varför vi bör utföra det i vår algoritmiska handel. Vad är Backtesting Algoritmisk handel står förutom andra typer av investeringsklasser eftersom vi på ett mer tillförlitligt sätt kan ge förväntningar om framtida prestanda från tidigare resultat, till följd av riklig tillgång till data. Processen genom vilken detta utförs är känt som backtesting. I enkla termer görs backtesting genom att exponera din specifika strategialgoritm till en ström av historisk finansiell data, vilket leder till en uppsättning handelssignaler. Varje handel (som vi kommer att mena här för att vara en rundresa med två signaler) kommer att ha en associerad vinst eller förlust. Sammanställningen av denna vinstlösning under löptiden för din strategi backtest kommer att leda till den totala vinsten och förlusten (även känd som PL eller PnL). Det är kärnan i idén, men självklart är djävulen alltid i detaljerna. Vilka är huvudorsakerna för att backtesting en algoritmisk strategi. Filtrering - Om du kommer ihåg från artikeln om strategiidentifiering. Vårt mål vid det inledande forskningsfasen var att upprätta en strategipipeline och sedan filtrera bort någon strategi som inte uppfyllde vissa kriterier. Backtesting ger oss en annan filtreringsmekanism, eftersom vi kan eliminera strategier som inte uppfyller våra prestationsbehov. Modellering - Backtesting gör det möjligt för oss att (säkert) testa nya modeller av vissa marknadsfenomen, till exempel transaktionskostnader, orderdirigering, latens, likviditet eller andra marknadsmiljöstrukturproblem. Optimering - Även om strategin optimering är fylld med biaser tillåter backtesting oss att öka prestanda för en strategi genom att ändra kvantiteten eller värdena för parametrarna som är associerade med den strategin och omberäkna dess prestanda. Verifiering - Våra strategier är ofta anskaffade externt, via vår strategipipeline. Backtesting en strategi säkerställer att den inte har implementerats felaktigt. Även om vi sällan kommer att få tillgång till signalerna som genereras av externa strategier, har vi ofta tillgång till prestandametri som Sharpe Ratio och Drawdown egenskaper. Således kan vi jämföra dem med vår egen implementering. Backtesting ger en mängd fördelar för algoritmisk handel. Det är emellertid inte alltid möjligt att helt enkelt backtesta en strategi. I allmänhet, som frekvensen av strategin ökar, blir det svårare att korrekt modellera marknadens och börsens mikrostruktureffekter. Detta leder till mindre tillförlitliga backtests och därigenom en svårare utvärdering av en utvald strategi. Detta är ett speciellt problem där exekveringssystemet är nyckeln till strategins prestanda, som med ultrahögfrekvensalgoritmer. Tyvärr är backtesting full av fördomar av alla slag. Vi har berört några av dessa frågor i tidigare artiklar, men vi kommer nu att diskutera dem på djupet. Fördomar som påverkar strategiska backtests Det finns många fördomar som kan påverka prestandan i en backtestad strategi. Tyvärr har dessa förspänningar en tendens att blåsa upp prestanda snarare än att förringa det. Således bör du alltid överväga en backtest att vara en idealiserad övre gräns för strategins faktiska prestanda. Det är nästan omöjligt att eliminera biaser från algoritmisk handel, så det är vårt jobb att minimera dem så mycket vi kan för att fatta välgrundade beslut om våra algoritmiska strategier. Det finns fyra stora fördomar som jag önskar diskutera: Optimering Bias. Titta framåt. Survivorship Bias och psykologiska tolerans Bias. Optimering Bias Detta är förmodligen den mest skrämmande av alla backtest-förskott. Det innebär att justera eller introducera ytterligare handelsparametrar tills strategins prestanda på backtestdatasatsen är väldigt attraktiv. Men när strategin går, kan strategin vara märkbart annorlunda. Ett annat namn för denna förspänning är kurvmontering eller data-snooping bias. Optimeringsförskjutning är svår att eliminera eftersom algoritmiska strategier ofta involverar många parametrar. Parametrar i det här fallet kan vara inmatningsexekveringskriterier, återkallningsperioder, medelvärden (dvs. den glidande parametern för glidande medel) eller volatilitetsmätningsfrekvensen. Optimeringsperspektivet kan minimeras genom att hålla antalet parametrar till ett minimum och öka antalet datapunkter i träningssatsen. Faktum är att man också måste vara försiktig med den senare eftersom äldre träningspunkter kan bli föremål för en tidigare regim (som en lagstiftningsmiljö) och kan därför inte vara relevant för din nuvarande strategi. En metod för att mildra denna bias är att utföra en känslighetsanalys. Detta innebär att parametrarna varieras stegvis och plottar en yta av prestanda. Ljud, grundläggande resonemang för parametervalg bör med alla andra faktorer betraktas leda till en jämnare parametraryta. Om du har en mycket hoppig yt yta betyder det ofta att en parameter inte speglar ett fenomen och är en artefakt av testdata. Det finns en stor litteratur om flerdimensionella optimeringsalgoritmer och det är ett mycket aktivt forskningsområde. Jag kommer inte att stanna här, men behåll det bakom dig när du hittar en strategi med en fantastisk backtest. Look-Ahead Bias Look-ahead-bias introduceras i ett backtesting-system när framtida data av misstag ingår i en punkt i simulering där data inte skulle ha varit tillgängliga. Om vi kör backtesten kronologiskt och vi når tidpunkt N, så kommer framåtblickande bias uppträda om data ingår för vilken punkt Nk, där k0. Look-ahead biasfel kan vara otroligt subtila. Här är tre exempel på hur framtidsförspänning kan introduceras: Tekniska buggar - Arrayvektorer i kod har ofta iteratorer eller indexvariabler. Felaktiga överskott av dessa index kan leda till en förutseende förspänning genom att inkorporera data vid Nk för icke-noll k. Parameterberäkning - Ett annat vanligt exempel på framåtriktad förspänning inträffar vid beräkning av optimala strategiparametrar, t. ex. med linjära regressioner mellan två tidsserier. Om hela datasatsen (inklusive framtida data) används för att beräkna regressionskoefficienterna och sålunda retroaktivt appliceras på en handelsstrategi för optimeringsändamål, införlivas framtida data och en framåtblickande bias finns. MaximaMinima - Vissa handelsstrategier använder sig av extrema värden under en viss tidsperiod, till exempel inkorporering av höga eller låga priser i OHLC-data. Eftersom de maximala minimala värdena endast kan beräknas i slutet av en tidsperiod införs emellertid en blick för framåtblick om dessa värden används under den aktuella perioden. Det är alltid nödvändigt att lagra highlow-värden med minst en period i någon handelsstrategi som använder dem. Precis som med optimeringsförspänning måste man vara ytterst försiktig för att undvika införandet. Det är ofta den främsta anledningen till att handelsstrategier underpresterar deras backtest signifikant i live trading. Survivorship Bias Survivorship bias är ett särskilt farligt fenomen och kan leda till betydligt uppblåst prestanda för vissa strategityper. Det inträffar när strategier testas på dataset som inte inkluderar hela universum av tidigare tillgångar som kan ha blivit utvalda vid en viss tidpunkt, men bara överväga de som har överlevt till den aktuella tiden. Tänk på att testa en strategi för ett slumpmässigt urval av aktier före och efter marknadskraschen 2001. Vissa tekniklager gick i konkurs, medan andra lyckades hålla sig flytande och till och med blomstrade. Om vi hade begränsat den här strategin endast till lager som gjorde det genom marknadsutnyttjandeperioden skulle vi introducera en överlevnadsperspektiv eftersom de redan har visat deras framgång för oss. Faktum är att detta bara är ett annat specifikt fall med förutseende bias, eftersom framtida uppgifter införlivas i tidigare analyser. Det finns två huvudsakliga sätt att mildra överlevnadsförhållanden i dina strategiska backtest: Survivorship Bias Free Datasets - När det gäller egenkapitaldata är det möjligt att köpa dataset som innehåller avnoterade enheter, även om de inte är billiga och bara brukar användas av institutionella företag . I synnerhet är Yahoo Finance-data INTE överlevnadsklausulfri, och detta används vanligtvis av många detaljhandelshandlare. Man kan också handla på tillgångsklasser som inte är benägna att överleva bias, till exempel vissa varor (och deras framtida derivat). Använd mer aktuella data - När det gäller aktier utnyttjar utnyttjandet av en nyare dataset möjligheten att det valda aktievalet vägs till överlevande, helt enkelt eftersom det finns mindre sannolikhet för total avnotering av aktier på kortare tidsperioder. Man kan också börja bygga ett personligt överlevnads-biasfritt dataset genom att samla in data från aktuell punkt framåt. Efter 3-4 år kommer du att ha en solid överlevnads-biasfri uppsättning av aktiedata för att backtest ytterligare strategier. Vi kommer nu att överväga vissa psykologiska fenomen som kan påverka ditt handelsprestanda. Psykologisk tolerans Bias Dessa speciella fenomen diskuteras inte ofta i samband med kvantitativ handel. Det diskuteras emellertid i stor utsträckning när det gäller mer diskretionära handelsmetoder. Det har olika namn, men Ive bestämde sig för att kalla det psykologiska toleransförhållandet eftersom det fångar kärnan i problemet. När man skapar backtest över en period av 5 år eller längre är det lätt att titta på en uppåtgående trender, beräkna den sammanslagna årliga avkastningen, Sharpe-förhållandet och jämn drawdown-egenskaper och vara nöjd med resultaten. Som ett exempel kan strategin ha en maximal relativ drawdown på 25 och en maximal drawdown-varaktighet på 4 månader. Detta skulle inte vara atypiskt för en momentumstrategi. Det är enkelt att övertyga sig om att det är lätt att tolerera sådana förlustperioder eftersom den övergripande bilden är rosig. I praktiken är det dock mycket svårare Om historiska drawdowns på 25 eller fler uppträder i backtestsna, så är det sannolikt att du ser perioder med liknande drawdown i live trading. Dessa uttagsperioder är psykologiskt svåra att uthärda. Jag har observerat första hand vad en förlängd drawdown kan vara, i en institutionell miljö, och det är inte trevligt - även om backtests föreslår att sådana perioder kommer att inträffa. Anledningen till att jag har sagt det en bias är att ofta en strategi som annars skulle bli framgångsrik stoppas från handel under tider av förlängd drawdown och därigenom kommer att leda till signifikant underpresterande jämfört med en backtest. Således, även om strategin är algoritmisk, kan psykologiska faktorer fortfarande ha stor inverkan på lönsamheten. Takeaway är att se till att om du ser dragningar av en viss procentandel och varaktighet i backtestsna, bör du förvänta dig att de uppträder i levande handelsmiljöer och kommer att behöva fortsätta för att nå lönsamhet en gång till. Programvarupaket för backtesting Programvaran landskapet för strategi backtesting är enorm. Lösningar sträcker sig från helintegrerad avancerad sofistikerad programvara till programmeringsspråk som C, Python och R, där nästan allt måste skrivas från början (eller lämpliga plugins erhållna). Som kvanthandlare är vi intresserade av att kunna äga vår handelssteknologistack jämfört med hastigheten och tillförlitligheten i vår utvecklingsmetodik. Här är de viktigaste övervägandena för programval: Programmeringsförmåga - Valet av miljö kommer till stor del att komma ner till din förmåga att programvara programvara. Jag skulle hävda att kontrollen över den totala stacken kommer att få större effekt på din långsiktiga PL än att outsourca så mycket som möjligt till leverantörsprogram. Detta beror på risken att det finns risk för att det finns risk för att det finns externa buggar eller idiosyncrasier som du inte kan fixa i leverantörsprogramvara, vilket annars skulle vara lätt att avhjälpa om du hade mer kontroll över din tech stack. Du vill också ha en miljö som uppnår den rätta balansen mellan produktivitet, tillgänglighet i biblioteket och genomförandegraden. Jag gör min egen personliga rekommendation nedan. Execution CapabilityBroker Interaction - Vissa backtesting programvara, som Tradestation, kopplar direkt i en mäklare. Jag är inte en fan av detta tillvägagångssätt eftersom minskade transaktionskostnader ofta är en stor del av att få ett högre Sharpe-förhållande. Om du är bunden till en viss mäklare (och Tradestation tvingar dig att göra det) kommer du att få en hårdare övergång till ny programvara (eller en ny mäklare) om behovet uppstår. Interaktiva mäklare tillhandahåller ett API som är robust, om än med ett lite stötigt gränssnitt. Anpassning - En miljö som MATLAB eller Python ger dig stor flexibilitet när du skapar algo-strategier, eftersom de ger fantastiska bibliotek för nästan alla matematiska operationer som är tänkbara, men tillåter också omfattande anpassning där det behövs. Strategisk komplexitet - Vissa program är inte skurna ut för tungt talande eller matematisk komplexitet. Excel är ett sådant program. Medan det är bra för enklare strategier, kan det inte riktigt klara av många tillgångar eller mer komplicerade algoritmer, i snabb takt. Bias Minimization - Låter en viss del av programvara eller data sig mer till handelsförskjutningar. Du måste se till att om du vill skapa all funktionalitet själv, så introducerar du inte fel som kan leda till fördomar. Utvecklingshastighet - Man borde inte spendera månader och månader genom att implementera en backtestmotor. Prototypning bör bara ta några veckor. Se till att din programvara inte hindrar dina framsteg i stor utsträckning, bara för att fånga några extra procentpoäng för körhastighet. C är elefanten i rummet här Utföringshastighet - Om din strategi är helt beroende av exekveringstidligheten (som i HFTUHFT), är ett språk som C eller C nödvändigt. Däremot kommer du att verga på Linux-kärnoptimering och FPGA-användning för dessa domäner, vilket ligger utanför ramen för denna artikel. Kostnad - Många av programmiljöerna som du kan programmera algoritmiska handelsstrategier med är helt gratis och öppen källkod. Faktum är att många hedgefonder använder sig av öppen källkodsprogramvara för hela deras algo trading stacks. Dessutom är Excel och MATLAB båda relativt billiga och det finns till och med gratis alternativ till var och en. Nu när vi har listat de kriterier som vi behöver välja vår programvaruinfrastruktur vill jag springa igenom några av de mer populära paketen och hur de jämför: Obs! Jag kommer bara att inkludera programvara som är tillgänglig för de flesta detaljhandlare och mjukvaruutvecklare, eftersom det här är läsaren av webbplatsen. Medan annan programvara är tillgänglig, till exempel de mer institutionella betygsverktygen, anser jag att dessa är för dyra för att kunna användas effektivt i en detaljhandelsinställning och jag har personligen ingen erfarenhet av dem. Backtesting Software Comparison Beskrivning: Språk på hög nivå utformad för utvecklingens hastighet. Brett utbud av bibliotek för nästan alla programmatiska uppgifter som kan tänkas. Att få bredare acceptans i hedgefonden och investeringsbanken. Inte lika snabbt som CC för körhastighet. Exekvering: Python plugins finns för större mäklare, som Interactive Brokers. Därför backtest och exekveringssystem kan alla vara en del av samma tech stack. Anpassning: Python har en mycket hälsosam utvecklingsgemenskap och är ett modent språk. NumPySciPy ger snabbvetenskaplig databehandling och statistisk analysverktyg som är relevanta för kvanthandel. Strategikomplexitet: Många plugins existerar för de viktigaste algoritmerna, men inte riktigt lika stor en kvant gemenskap som existerar för MATLAB. Bias Minimization: Samma bias minimeringsproblem finns som för alla högnivå språk. Behöver vara extremt försiktig med testning. Utvecklingshastighet: Pythons största fördel är utvecklingshastighet, med robust inbyggd testfunktion. Exekveringshastighet: Inte lika snabbt som C, men vetenskapliga datorkomponenter optimeras och Python kan prata med inbyggd C-kod med vissa plugins. Kostnad: FreeOpen Käll Beskrivning: Mogent språk på hög nivå utformad för snabb körning. Brett utbud av kvantitativa finans - och numeriska bibliotek. Svårare att felsöka och tar ofta längre tid att implementera än Python eller MATLAB. Extremt utbredd i både köp - och säljsidan. Exekvering: De flesta mäklare API är skrivna i C och Java. Således finns många plugins. Anpassning: CC tillåter direkt åtkomst till underliggande minne, varför ultrahögfrekventa strategier kan implementeras. Strategikomplexitet: C STL erbjuder ett stort antal optimerade algoritmer. Nästan alla specialiserade matematiska algoritmer har en fri, öppen källkodsimplementering på webben. Biasminimering: Utsiktsförskjutning kan vara knepigt att eliminera, men inte hårdare än andra högnivå språk. Bra felsökningsverktyg, men man måste vara försiktig när man arbetar med underliggande minne. Utvecklingshastighet: C är ganska ordentlig jämfört med Python eller MATLAB för samma algoritm. Fler linjer av kod (LOC) leder ofta till större sannolikhet för buggar. Exekveringshastighet: CC har extremt snabb exekveringshastighet och kan vara väl optimerad för specifika beräkningsarkitekturer. Detta är den främsta anledningen att utnyttja den. Kostnad: Olika kompilatorer: LinuxGCC är gratis, MS Visual Studio har olika licenser. Olika strategier kräver olika mjukvarupaket. HFT - och UHFT-strategier kommer att skrivas i CC (dessa dagar utförs de ofta på GPU och FPGA), medan lågfrekventa riktningsbaserade aktiestrategier är lätta att implementera i TradeStation, på grund av programvaruhandeln i en och samma form. Min personliga preferens är för Python eftersom det ger rätt grad av anpassning, utvecklingshastighet, provningsförmåga och körhastighet för mina behov och strategier. Om jag behöver något snabbare, kan jag släppa in till C direkt från mina Python-program. En metod som favoriseras av många kvanthandlare är att prototyper sina strategier i Python och sedan konvertera de långsammare utföringssektionerna till C på ett iterativt sätt. Så småningom är hela algoet skrivet i C och kan lämnas ensam för handel. I de närmaste artiklarna om backtesting kommer vi att titta på några speciella problem kring implementeringen av ett algoritmiskt backtestingssystem för handel, liksom hur man införlivar effekterna av börser. Vi kommer att diskutera strategiska resultatmätningar och slutligen avsluta med en exempelstrategi. Bara Komma igång med kvantitativ handel
No comments:
Post a Comment