Medan jag gillar var denna fråga går, skulle jag vilja föreslå att det blir lite mer konkret. Vilka delar av backtestingprocessen skulle du vilja lära dig? Det här kan variera från att bara beräkna en normal avkastning, där portföljens avkastning från din strategi redan ges för att implementera en fullständig portföljbildningsregel regelbundet. ndash Constantin Dec 30 14 at 21:06 För att vara ärlig vet jag inte mycket om backtesting. Jag fick veta att jag måste backtest nya strategier eller förbättra nuvarande under min praktik. Så jag skulle vilja veta lite mer om ämnet innan jag började. Vad är de olika delarna av det. ndash Maxime 30 dec 14 kl 21:31 Den allmänna idén För aktiekapitalet består en enkel backtest typiskt av två steg: Beräkning av portföljens avkastning som följer av din portföljbildningsregel (eller handelsstrategi) Riskjustering av portföljens avkastning med hjälp av en tillgångsprismodell Steg 2 är helt enkelt en regression och beräkningsmässigt väldigt enkel i Matlab. Vad som är svårare är genomförandet av steg 1, vilket kräver att du är mycket bekväm i Matlab, och det finns olika sätt att göra detta. Om du vet hur man gör en OLS-regression i Matlab, bör du fokusera på alla typer av matrismanipulationer. Implementering i Matlab Portföljbildning och avkastning Beräkning För att ge dig ett exempel på hur en primitiv handelsstrategi kan implementeras i Matlab, antar vi månatliga avkastningsdata och en enhetlig innehavsperiod på en månad på n tillgångar över k perioder, där jag i och k i . Om du inte antar några förändringar i sammansättningen av ditt lager universum, är din returmatris X av dimensioner k gånger n. X start x amp dots amp x amp amp punkter amp x vdots amp ddots amp vdots amp ddots amp ampdots x amp dots amp x amp dots amp x vdots amp ddots amp vdots amp ddots amp vdots x amp dots amp x amp amp punkter x x end Var återkommer beräknas som x frac -1. Om du antar att ditt urvalskriterium är någon typ av aktiekarakteristik som är tillgänglig med månadsfrekvens, kommer du också att ha en karaktärmatris C. Du kan då skriva en algoritm som identifierar de poster i C som uppfyller ditt urvalskriterium (t. ex. överskrida ett visst tröskelvärde ) och ersätta motsvarande poster (där jag och t är desamma) för en indikatormatris I (som har initialiserats som en nollmatris med nollfunktionen) med dem. Du kan sedan multiplicera posterna av I med de av returmatrisen X för att erhålla en matris R som indikerar avkastningen som följer av dina innehav. Du kan sedan beräkna medelvärdet av de icke-nollposter för varje rad av R för att få din vektor av portföljens avkastning. Riskjustering och identifiering av onormala avkastningar I steg 2 jämför du denna vektor med den normala avkastningen som erhållits från regressionsestimering av en tillgångsprismodell, såsom den Fama-franska modellen. Genom att subtrahera den normala returvektorn från din portfölj returnerar vektor, bestämmer du om din handelsstrategi har resulterat i en positiv onormal avkastning, vilket är vad du syftar till. Rekommendationer Om du är ny på Matlab, föreslår jag personligen att du är bekant med det för att genomföra denna förenklade strategi innan du kopplar av några av de förenklande antagandena (t. ex. enhetlig innehavstid och periodicitet) och fortsätter till mer sofistikerade implementeringar. Återigen, vad jag skulle vilja betona är att det här kräver att du är väldigt bekväm med Matlab och särskilt de olika sätten att manipulera matriser, vilket kan ta lite tid. Om du inte behöver använda Matlab för din praktik och skulle vilja få resultat snabbt, kan du göra steg 1 i Excel istället, vilket är tråkigt men kräver inte den (värdefulla) inledande investeringen du behöver göra för Matlab. För att bli bekant med Matlab är jag säker på att du redan har upptäckt den extremt bra dokumentationen som följer med. Det är för mig den enda värdefullaste resursen och sannolikt mer användbar än vad som helst mer ekonomispecifika resurser (som jag skulle vänta tills du känner till Matlab själv). Allt som krävs för att bestämma normal avkastning är en OLS-regression och en rudimentär förståelse av tillgångsprismodeller. svarat dec 30 14 kl 22: 20MatlabTrading Detta inlägg handlar om hur viktigt det är att använda olika typer av optimeringsmetoder som genetisk algoritmer och parallellisering för att få resultat snabbare. Genetisk algoritmoptimering Trots att den genetiska (evolutionära) algoritmprincipen är mycket väl förklarad i MathWorks-webinarerna, används emellertid i exemplen endast för att optimera valet av en strategisk grupp från en uppsättning. Detta är ett bra exempel på användningen av dessa algoritmer, men det händer att det finns ett behov av att ställa in många variabler med betydande intervall för en strategi, du klarar inte av med en iteration och parallelliseringen av processer 8211 beräkningar kan ta flera dagar . Visserligen finns det strategier i optimeringsfasen. när vi nästan vet att handelsstrategin är framgångsrik, kan vi också vänta på flera dagar eller hyra hela klustret - resultatet kan vara värt det. Men om vi behöver uppskatta resultaten av en skrymmande strategi och bestämma om det är värt att spendera tiden, kan genetiska algoritmer vara perfekt lämpade. Vi erbjuder möjlighet att använda tre metoder för att optimera strategin i WFAToolbox: Linjär metod 8211 Det är ett vanligt sätt att sortera, där du får se alla mellanliggande (suboptima) resultat. Det ger maximal noggrannhet. Parallell metod 8211 kommer alla kärnor i din CPU att användas. Det tillåter inte att se mellanresultat, men väsentligt påskyndar operationen. Det ger maximal noggrannhet vid ökad beräkningshastighet. Genetisk metod 8211 den använder den evolutionära optimeringsalgoritmen. Det tillåter att se suboptima värden, men ger resultatet nära det bästa. Det är inte en mycket exakt metod, men det är noggrann för den första strategin. Väldigt snabbt. Vi är ofta frågade om WFAToolbox - Walk-Forward Analysis Toolbox för MATLAB har möjlighet att använda GPU i beräkningar. Tyvärr är GPU inte lämplig för alla uppgifter och dess användning är mycket specifik. För att kunna använda det måste du justera logiken och koden för varje strategi för grafisk kärnprovning. Tyvärr, på grund av sådan icke-universalitet i metoden kan man inte använda GPU i WFAToolbox. Fortsatt del 2 i diskussionen om problem och lösningar vid testning och analys av algoritmisk handelsstrategi i MATLAB, uppmanar dig att läsa det här inlägget om problemet med att det inte finns möjlighet att visualisera processerna i moderna mjukvarulösningar för att testa handelssystem. Visualisering av testprocessen I min arbetserfarenhet analyserade jag ofta andra populära plattformar för teststrategi för handel. till exempel TradeStation. MetaStock. Multicharts etc. och jag blev alltid förvånad över hur lite uppmärksamhet utbetalades för visualisering av testprocessen. Saken är att när vi inte ser resultaten av de mellanliggande, suboptima värdena av optimerade parametrar, kastar vi ofta guld tillsammans med smutsen. Saken är på grund av en alltför bred sampling, anpassar strategin parametrarna så att vi antingen ser en perfekt strategi som misslyckas i det verkliga livet eller ser ett eller två erbjudanden, vilket förmodligen är det bästa eftersom det valda sådana tidsintervalldata där bästa handelsstrategin skulle vara buy-and-hold, men varför är då andra strategier nödvändiga för Visualisering av handelsstrategi testprocessen i MATLAB (föreslagna i webbseminarium) Som ett resultat, utan att se mellanresultat, behöver vi 171blindly187 ändra parametrarna för att försöka för att få bättre data eller titta på den i någon 3D eller 4D (färg är den 4: e dimensionen), som föreslås i webinars. Analysen av värden i de N-dimensionella utrymmena kan definitivt vara ett alternativ men har flera begränsningar: Vad händer om det finns mer än 4 dimensioner När du ser vilka signaler och hur ofta de förekommer i prisklassen, har du nästan alla nödvändig visuell representation av din strategi: transaktionsfrekvensen, deras lönsamhet (inkomstkurva), noggrannheten för öppningen, likheten med andra suboptima värden etc. som inte kan sägas om prestanda i det N-dimensionella utrymmet där all användbar information är faktiskt att det optimala värdet inte bara är ett men det finns ett stort antal suboptima värden på ett eller flera områden. Medan man optimerar en strategi i WFAToolbox 8211 Walk-Forward Analysis Toolbox för MATLAB174. När ett nytt optimalt värde hittas kommer handelsstrateginsignalerna i perioden i urvalet och urvalet att visas omedelbart i diagrammet, så du kan alltid styra vilket utbud av alternativ du ska tilldela, och du kan också pausa optimeringen utan att vänta på slutet av testet, eftersom det blir klart att något gick fel eller allt är bra. Hej jag heter Igor Volkov. Jag har utvecklat algoritmiska handelsstrategier sedan 2006 och har arbetat i flera hedgefonder. I den här artikeln skulle jag vilja diskutera problem som uppstår på vägen för MATLABs handelsstrategiutvecklare under testning och analys samt att erbjuda möjliga lösningar. Jag har använt MATLAB för testning av algoritmsstrategier sedan 2007 och jag har kommit till slutsatsen att detta inte bara är det mest praktiska forskningsverktyget utan också den mest kraftfulla eftersom det möjliggör användning av komplexa statistiska och ekonometriska modeller, neurala nätverk, maskininlärning, digitala filter, fuzzy logic, etc genom att lägga till verktygslådan. MATLAB-språket är ganska enkelt och väl dokumenterat, så även en icke-programmerare (som jag) kan behärska den. Hur allt började. Det var 2008 (om jag inte misstänker) när det första webinaret om algoritmisk handel i MATLAB med Ali Kazaam släpptes och täckte ämnet att optimera enkla strategier baserade på tekniska indikatorer etc. trots att en ganska 8220chaotic8221-kod var verktyg intressanta tillräckligt att använda. De fungerade som utgångspunkt för forskning och förbättring av en test - och analysmodell som skulle möjliggöra att använda all kraft i verktygslådor och frihet för MATLAB-åtgärder under skapandet av egna handelsstrategier samtidigt som det skulle tillåta att styra processen av testning och erhållna data och deras efterföljande analys skulle välja en effektiv portfölj av robusta handelssystem. Sedan har Mathworks webinarer uppdaterats varje år och introducerades gradvis mer och mer intressanta element. Således hölls det första webbseminariet om parhandel (statistisk arbitrage) med hjälp av Econometric Toolbox 2010, trots att verktygslådan för testning och analys förblev densamma. År 2013 verkade Trading Toolbox från Mathworks som gjorde det möjligt att koppla MATLAB till olika mäklare för att genomföra sina applikationer. Även om det fanns automatiska lösningar för genomförandet av transaktionerna, kunde MATLAB betraktas som ett system för att utveckla handelsstrategier med en fullständig cykel: från data som laddas till genomförandet av automatiserade handelsstrategier. Varför ska varje algotrader återfå hjulet Mathworks har inte erbjudit en komplett lösning för testning och analys av strategierna 8211 de koder som du kan få ut av webinars var de enda elementen i ett fullständigt systemtest och det var nödvändigt att ändra dem , anpassa dem och lägg till dem i GUI för enkel användning. Det var mycket tidskrävande och ställde därmed en fråga: oavsett vilken strategi det var, måste det gå igenom samma testprocess och analys, vilket skulle göra det möjligt att klassificera det som stabilt och användbart 8211, varför skulle varje algotrader återuppfinna hjulet och skriva Hisher egen kod för korrekt teststrategier i MATLAB Så beslutades att skapa en produkt som skulle tillåta att utföra hela processen i samband med testning och analys av algoritmiska handelsstrategier med ett enkelt och användarvänligt gränssnitt. Först och främst vill jag svara på följande frågor: Vad hände med bloggen 1. Jev Kuznetsov är inte ägaren längre Bloggen köptes från vår vän, Jev Kuznetsov, som har flyttat till sin andra blogghandel medpython. blogspot. Han drog slutsatsen att Python är bättre än MATLAB för handel, vilket jag ansåg vara falskt. MATLAB är fortfarande en av de bästa programvarorna i världen för algoritmiska handelsändamål IMHO (jag har några fakta om detta dock för framtida diskussion). 2. Vi har ändrat varumärket Från det här ögonblicket kommer bloggen att kallas MatlabTrading, vilket är mycket förståeligt när det gäller de ämnen som det kommer att innehålla. Dessutom har domännamnet ändrats till matlabtrading istället för den ursprungliga matlab-trading. blogspot. även om den gamla domänen fortfarande arbetar omdirigering från det primära domännamnet. Vad händer med bloggen 1. Fler inlägg och artiklar Vi hoppas kunna ta livet av den här bloggen genom att lägga ut relevant innehåll en eller två gånger i veckan. Under de första månaderna lägger vi mestadels de artiklar och videoklipp som vi redan måste göra det lättare för våra kära läsare att söka information om en resurs och ha tvärbindning på dem. Då har vi planer på att skriva inlägg om praktiska aspekter av algoritmisk handel i MATLAB. Hur man skapar moderna automatiska handelsstrategier som: Statistiska arbitrageparhandel innebär återvändande marknadsneutrala handelsstrategier baserade på co-integration bollingerband kalmanfilter etc för råvaror, aktier och Forex. Trend efter strategier med Jurik Moving Average och andra sofistikerade digitala filter Prognosstrategier med maskininlärning (Support Vector Machines) och andra metoder Skapa robusta handelsstrategier med hjälp av visuell framåtriktad testning av pengar för att återinvestera din kapital (vetenskap om hur man får 1M från 10K på ett år med max, men uppskattad risk och svettbelöning). Kanske efter att ha läst detta du trodde att det här kommer att bli en annan dum artikel för de stackars killar som söker hur man blir rik genom handel på forex och allt det. Jo, det är helt felaktigt Vi jobbar i MATLAB, och majoriteten av oss är forskare och experter i den delen så allting är allvarligt. 2. Mer interaktivitet Jag kommer att vara glad om vi alla kan relatera genom kommentarer i inlägg. Prenumerera på våra nyheter för att bli varnad om de senaste inläggen och händelserna. Senare har vi planer på att göra Google Hangouts-webinarier. Missa inte det, klicka på Följ knappen i övre högra hörnet för att gå med i vår community. Vad vill du läsa i våra blogginlägg Vilka ämnen kan du föreslå Vänligen skriv här i kommentarer. I mitt tidigare inlägg kom jag till slutsatsen att närstående parhandel inte är lika lönsam idag som det brukade vara före 2010. En läsare påpekade att det skulle kunna vara att den genomsnittliga spridningen av spreads bara skiftades mot kortare tidsskalor . Jag råkar dela samma idé, så jag bestämde mig för att testa den här hypotesen. Den här gången testas endast ett par: 100 SPY vs -80 IWM. Backtest utförs på 30-sekundiga stapeldata från 11.2011 till 12.2012. Reglerna är enkla och liknar den strategi som jag testade i det senaste inlägget: om barreversionen av paret överstiger 1 i z-poäng, handla nästa stapel. Resultatet ser väldigt vackert ut: Jag anser att detta är tillräckligt bevis för att det fortfarande finns gott om medelback i 30-sekunders skala. Om du tror att det här diagrammet är för bra för att vara sant, är det tyvärr verkligen fallet. Inga transaktionskostnader eller bud-ask-spridning beaktades. Faktum är att jag skulle tvivla på att det skulle finnas vinst kvar efter att ha dragit av alla handelskostnader. Fortfarande, denna typ av diagram är moroten som hänger ihop framför min näsa och håller mig på väg. Dåliga nyheter alla, enligt mina beräkningar (som jag verkligen hoppas är felaktiga) är den klassiska parhandeln död. Vissa människor skulle starkt vara oense, men här är det jag hittade: Låt oss ta en hypotetisk strategi som fungerar på en korg av etfs: SPY, XLY, XLE, XLF, XLI, XLB, XLK, IWM, QQQ, DIA par kan göras. Varje par är konstruerat som en marknadsneutral spridning. Strategiregler: Beräkna varje dag för varje par z-poäng baserat på 25-dagars standardavvikelse. Om z-poäng gt tröskel, gå kort, stäng nästa dag Om z-score lt-tröskeln går lång, stäng nästa dag För att hålla det enkelt, är beräkningen gjord utan kapitalhantering (man kan ha upp till 90 par i portföljen på varje dag). Transaktionskostnader beaktas inte heller. För att uttrycka det enkelt följer den här strategin en dag med att återställa naturen av marknadsneutrala spridningar. Här är resultaten simulerade för flera tröskelvärden: Oavsett vilket tröskelvärde som används, är strategin mycket lönsam 2008, ganska bra år 2009 och helt värdelös från början av 2010. Det här är inte första gången jag stötte på den här förändringen i genomsnittlig återföring beteende i etfs. Oavsett vad Ive försökte, hade jag ingen lycka till att hitta en parhandelsstrategi som skulle fungera på ETFs förra 2010. Min slutsats är att dessa typer av enkla stat-arb-modeller inte bara skär det längre. Backtesting Bekräfta dina finansiella modeller med historiska data Backtesting är en ram som använder historiska data för att validera finansiella modeller, inklusive handelsstrategier och riskhanteringsmodeller. Beroende på målen för validering använder finansiell professionell mer än en indikator eller metod för att mäta effektiviteten hos finansiella modeller. Backtesting utförs rutinmässigt i handel och riskhantering. Som ett resultat finns det ett antal dedikerade backtesting-tekniker som är specifika för dessa två områden. I handel ingår gemensamma backtestingstekniker: In-sample vs out-of-test-test Walk-forward-analys eller framåtriktad optimering Instrumentnivåanalys vs bedömning av portföljnivå I riskhantering tillämpas backtesting generellt på value-at - risk (VaR) och är även känd som VaR-backtesting. Det finns olika VaR backtesting tekniker, såsom: Basels trafikljusprov Binomialtest Kupiecs andel av fel test Kupiecs tid till första misslyckatest Christoffersens villkorliga täckning blandat test Christoffersens villkorligt täcknings oberoende test Haas tid mellan misslyckanden eller blandat Kupiec test Haas tid mellan misslyckande oberoende test Välj ditt landSuccessful Backtesting of Algorithmic Trading Strategies - 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 åder 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 kommer att 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 den 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 handel utbyte. 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 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 betyda 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, även om djävulen självklart alltid är 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 en 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 (säkert) att testa nya modeller av vissa marknadsfenomen, till exempel transaktionskostnader, orderdirigering, latens, likviditet eller andra marknadsmikrostrukturproblem. 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 hör samman 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 backa upp 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 strategiprestanda, som med ultrahögfrekventa algoritmer. 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 för 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. Look-Ahead Bias. Survivorship Bias och Psykologisk 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 detta fall kan vara inmatningsexekveringskriterier, återkallningsperioder, medelvärden (dvs den glidande parametern för glidande medel) eller volatilitetsmätningsfrekvensen. Optimeringsförspänning kan minimeras genom att hålla antalet parametrar till ett minimum och öka antalet datapunkter i träningsuppsättningen. 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 (t. ex. 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 anses leda till en mjukare parameteryta. 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 multidimensionella optimeringsalgoritmer och det är ett mycket aktivt forskningsområde. Jag kommer inte att dö på det här men hå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åtblick bias uppträda om data ingår för någon 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, till exempel med linjära regressioner mellan två tidsserier. Om hela datasatsen (inklusive framtida data) används för att beräkna regressionskoefficienterna, och därmed 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 införande 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 framåtblickande bias 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 extremt 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 signifikant 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 av framåtblickande 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 endast 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 en personlig överlevnads-bias-fri dataset genom att samla in data från aktuell punkt framåt. Efter 3-4 år kommer du att ha en solid överlevnads-förskjutningsfri uppsättning aktiedata som kan användas 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 inträffar i backtestsna, så är det troligt 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 med förlängd drawdown och därmed kommer att leda till signifikant underpresterande jämfört med en backtest. Således, även om strategin är algoritmisk, kan psykologiska faktorer fortfarande få stor inverkan på lönsamheten. Takeaway är att se till att om du ser dragningar av en viss procentandel och varaktighet i backtesten, så borde du förvänta dig att de uppträder i levande handelsmiljöer och måste 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 fullständigt integrerad 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 programmera 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, knyter direkt i en mäklare. Jag är inte en fan av detta tillvägagångssätt eftersom minskade transaktionskostnader ofta är en stor del för 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 utklippna för tungt antal knäppning 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ördomar. 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. Prototyper 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) kommer ett språk som C eller C att vara 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 detaljhandel och jag har ingen erfarenhet av dem personligen. 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. Förbättra acceptans i hedgefonden och investeringsbanken. Inte lika snabbt som CC för körhastighet. Exekvering: Python-plugins existerar 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. Strategisk komplexitet: Många plugins finns för huvudalgoritmerna, men inte riktigt lika stort som 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 är optimerade och Python kan prata med inbyggd C-kod med vissa plugins. Kostnad: FreeOpen Käll Beskrivning: Äldre språk på hög nivå utformad för snabb genomförande. 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 möjliggör direkt åtkomst till underliggande minne, följaktligen kan ultrahögfrekventa strategier implementeras. Strategikomplexitet: C STL erbjuder ett brett spektrum av 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 fel. Exekveringshastighet: CC har extremt snabb exekveringshastighet och kan optimeras väl för specifika beräkningsarkitekturer. Detta är huvudorsaken till att använda 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 programvaruhandelns heltäckande karaktär. 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 prototypa 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 som rör implementeringen av ett algoritmiskt trading backtesting system, samt hur man införlivar effekterna av börser. Vi kommer att diskutera strategiska prestationsmätningar och slutligen sluta med en exempelstrategi. Bara komma igång med kvantitativ handel
No comments:
Post a Comment