Sunday 22 October 2017

Backtesting Handelsstrategier Använda R


Jag är väldigt ny på R och försöker backa upp en strategi Ive programmerad redan i WealthLab. Flera saker jag förstår inte (och det fungerar inte självklart :) Jag får inte de snygga priserna snyggt i en vektor. eller någon form av vektor men det börjar med struktur och jag förstår inte riktigt vad den här funktionen gör. Det är varför min serie, 1 samtal förmodligen inte fungerar. N-lön (serier) fungerar inte heller, men jag behöver det för Loop Så jag antar att om jag får dessa 2 frågor som svaras ska min strategi fungera. Jag är väldigt tacksam för någon hjälp .. R verkar ganska komplicerat även med programmeringserfarenhet på andra språk ja Jag har kopierat några rader kod från den här handledningen och förstår verkligen inte den här raden. Jag menar serier, 1 Jag trodde skulle tillämpa funktionen f på kvotkvot 1 i serien. Men eftersom denna serie är lite komplicerad med struktur etc. fungerar det inte. I39m pratar om denna handledning: r-bloggersbacktesting-a-trading-strategi ndash MichiZH Jun 6 13 på 14:22Backtesting: Tolkning Tidigare Backtesting är en nyckelkomponent i effektiv handelssystemutveckling. Det uppnås genom att rekonstruera, med historiska data, affärer som skulle ha inträffat i det förflutna med hjälp av regler definierade av en given strategi. Resultatet erbjuder statistik som kan användas för att mäta strategins effektivitet. Med hjälp av denna data kan handlare optimera och förbättra sina strategier, hitta tekniska eller teoretiska brister och få förtroende för sin strategi innan de appliceras på de verkliga marknaderna. Den bakomliggande teorin är att varje strategi som fungerade bra i det förflutna sannolikt kommer att fungera bra i framtiden, och omvänt sett är det sannolikt att någon strategi som utförde dåligt i det förflutna sannolikt kommer att fungera dåligt i framtiden. Den här artikeln tar en titt på vilka applikationer som används för att backtest, vilken typ av data som erhålls och hur man använder den Data och verktygen Backtesting kan ge mycket värdefull statistisk återkoppling om ett visst system. Några universella backtesting-statistik inkluderar: Nettoresultat eller förlust - Netto procentuell vinst eller förlust. Tidsram - Tidigare datum där testning inträffade. Universum - Lager som inkluderades i backtest. Volatilitetsåtgärder - Max procent upp och ner. Medelvärden - Procentuell genomsnittlig vinst och genomsnittlig förlust, medelstänger hålls. Exponering - Andel av investerat kapital (eller exponerat för marknaden). Förhållanden - vinst-till-förlustförhållande. Årlig avkastning - Procentuell avkastning över ett år. Riskjusterad avkastning - Procentuell avkastning som en funktion av risken. Typiskt kommer backtesting programvara att ha två skärmar som är viktiga. Den första tillåter näringsidkaren att anpassa inställningarna för backtesting. Dessa anpassningar inkluderar allt från tidsperiod till provisionkostnader. Här är ett exempel på en sådan skärm i AmiBroker: Den andra skärmen är den faktiska backtestingresultatrapporten. Här kan du hitta all statistik som nämns ovan. Återigen, här är ett exempel på den här skärmen i AmiBroker: I allmänhet innehåller de flesta handelsprogrammen liknande element. Vissa avancerade program innehåller även ytterligare funktioner för att utföra automatisk positionering, optimering och andra mer avancerade funktioner. De 10 buden Det finns många faktorer som handlare uppmärksammar när de backtesting handelsstrategier. Här är en lista över de 10 viktigaste sakerna att komma ihåg vid backtesting: Ta hänsyn till de brett marknadstrender inom tidsramen där en viss strategi testades. Till exempel, om en strategi bara backtestades 1999-2000, kanske det inte går bra på en björnmarknad. Det är ofta en bra idé att backtest över en lång tidsram som omfattar flera olika typer av marknadsförhållanden. Ta hänsyn till universum där backtesting inträffade. Till exempel, om ett brett marknadssystem testas med ett universum bestående av tekniska lager, kan det misslyckas att fungera bra i olika sektorer. Som en allmän regel, om en strategi riktar sig mot en viss genre av lager, begränsa universum till den genren, men i alla andra fall behålla ett stort universum för teständamål. Volatilitetsåtgärder är extremt viktiga att överväga när man utvecklar ett handelssystem. Detta gäller särskilt för hyrda konton, som utsätts för marginalanrop om deras eget kapital sjunker under en viss punkt. Traders bör försöka hålla volatiliteten låg för att minska risken och möjliggöra enklare övergångar in och ut ur ett visst lager. Det genomsnittliga antalet barer som hålls är också mycket viktigt att titta på när man utvecklar ett handelssystem. Även om de flesta backtestingprogrammen innehåller provisionkostnader i de slutliga beräkningarna, betyder det inte att du bör ignorera denna statistik. Om det är möjligt kan du höja ditt genomsnittliga antal barer som hålls, minska provisionskostnaderna och förbättra din övergripande avkastning. Exponering är ett dubbelkantigt svärd. Ökad exponering kan leda till högre vinst eller högre förluster, medan minskad exponering innebär lägre vinst eller lägre förluster. Men i allmänhet är det en bra idé att hålla exponeringen under 70 för att minska risken och möjliggöra enklare övergångar in och ut ur ett visst lager. Den genomsnittliga vinstlösningsstatistiken, kombinerad med vinst-till-förlustförhållandet, kan vara användbar för att bestämma optimal positionsbestämning och pengarhantering med hjälp av tekniker som Kelly-kriteriet. (Se Money Management med hjälp av Kelly-kriteriet.) Traders kan ta större positioner och minska provisionskostnaderna genom att öka sina genomsnittliga vinster och öka deras vinst-till-förlustförhållande. Årlig avkastning är viktig eftersom den används som ett verktyg för att benchmarka systemets avkastning mot andra investeringsplatser. Det är viktigt att inte bara titta på den totala årliga avkastningen utan också ta hänsyn till ökad eller minskad risk. Detta kan göras genom att titta på den riskjusterade avkastningen, som står för olika riskfaktorer. Innan ett handelssystem antas måste det överträffa alla andra placeringsplatser med lika eller mindre risk. Backtesting anpassning är oerhört viktigt. Många backtesting-applikationer har inmatning för provisionsbelopp, runda (eller fraktionerade) partstorlekar, kryssstorlekar, marginalkrav, räntor, antaganden för slipning, positioneringsstorleksregler, same-bar exit-regler, (bakåt) stoppinställningar och mycket mer. För att få de mest exakta backtestingresultaten, är det viktigt att ställa in dessa inställningar för att efterlikna mäklaren som kommer att användas när systemet går live. Backtesting kan ibland leda till något som kallas överoptimering. Det här är ett villkor där resultatresultatet är så högt anpassat till det förflutna att de inte längre är lika exakta i framtiden. Det är generellt en bra idé att genomföra regler som gäller för alla aktier eller en vald uppsättning riktade lager och är inte optimerade i den utsträckning reglerna inte längre är förståeliga av skaparen. Backtesting är inte alltid det mest exakta sättet att mäta effektiviteten i ett visst handelssystem. Ibland misslyckas strategier som fungerade bra tidigare i dag. Tidigare resultat är inte en indikation på framtida resultat. Var noga med att handla ett system som har testats framgångsrikt innan du går live för att vara säker på att strategin fortfarande gäller i praktiken. Slutsats Backtesting är en av de viktigaste aspekterna av att utveckla ett handelssystem. Om det skapas och tolkas ordentligt kan det hjälpa handlare att optimera och förbättra sina strategier, hitta några tekniska eller teoretiska brister, samt få förtroende för sin strategi innan de appliceras på den verkliga världsmarknaden. Resources Tradecision (tradecision) - High-end Trading Systemutveckling AmiBroker (amibroker) - Budget Trading System Development. En ekonomisk teori om totala utgifter i ekonomin och dess effekter på produktion och inflation. Keynesian ekonomi utvecklades. En innehav av en tillgång i en portfölj. En portföljinvestering görs med förväntan på att få en avkastning på den. Detta. Ett förhållande som utvecklats av Jack Treynor som mäter avkastning som förvärvats över det som kunde ha blivit uppnådd på en risklös. Återköp av utestående aktier (återköp) av ett företag för att minska antalet aktier på marknaden. Företag. Ett skattebidrag är ett återbetalning på skatter som betalas till en individ eller hushåll när den faktiska skatteskulden är mindre än beloppet. Det monetära värdet av alla färdiga varor och tjänster som produceras inom ett land039 gränsar under en viss tidsperiod. Hur man backtestar en strategi i R kommer att utforska R & D-testningskapaciteten. I ett tidigare inlägg utvecklade vi några enkla inträdesmöjligheter för USDCAD använder en maskininlärningsalgoritm och tekniker från en delmängd av data mining som kallas associationsregellärning. I det här inlägget kommer vi att undersöka hur man gör en fullständig backtest i R med hjälp av våra regler från föregående inlägg och genomföra vinst och stoppa förluster. Låt oss dyka in: Obs: backtestet är byggt av 4-timmarsfälten i vår dataset och har inte en mer granulär vy. Den CAGR (sammanslagna årliga tillväxttakten) är den procentuella vinstlösningen årligen, vilket innebär att det släpper ut tillväxten i lika stora avbetalningar varje år. Sedan vårt test var över får vi se om vi kan förbättra prestanda genom att lägga till stoppavbrott och ta vinst. Med en stoppavbrott gick prestationen ner. Det verkar som om vi blir tagna av våra affärer innan de kan återhämta sig. För att låsa in våra vinster, låt oss gå och genomföra en vinst. Låser i våra vinster med en take-profit förbättrade resultatet något, men inte drastiskt. Låt oss innehålla både en stoppavbrott och en vinst. Nu kan vi jämföra baslinjens långa kortstrategi, med bara en stoppförlust, bara en vinst, och båda tar stoppavbrott och tar vinst. Nu vet du hur du lägger till en vinst och slutar förlust, jag rekommenderar att du spelar runt med data och testar olika värden baserat på dina egna personliga riskparametrar och använder dina egna regler. Även med kraftfulla algoritmer och sofistikerade verktyg är det svårt att bygga en framgångsrik strategi. För varje bra idé tenderar vi att ha många fler dåliga. Beväpnad med rätt verktyg och kunskap kan du effektivt testa dina idéer tills du kommer till de goda. Vi har effektiviserat denna process i TRAIDE. Weve utvecklat en testinfrastruktur som låter dig se var mönstren finns i dina data och ser i realtid hur de skulle ha utfört över dina historiska data. Snälla släppa TRAIDE för 7 stora par på valutamarknaden med tekniska indikatorer på två veckor. Om du är intresserad av att testa programvaran och ge feedback, skicka ett mail till infoinovancetech. Vi har 50 platser tillgängliga. På Rstudio har vi gjort ett fantastiskt arbete med det glänsande paketet. Från den glänsande hemsidan gör 8220Shiny det super enkelt för R-användare som att du ska vända analyser till interaktiva webbapplikationer som alla kan använda.8221 Utveckla webbapplikationer har alltid överklagat mig, men värd, lärande javascript, HTML, etc. gjorde mig sätta Detta är ganska lågt på min prioritetslista. Med glänsande kan man skriva webbapplikationer i R. Detta exempel använder chefernas dataset med samtal till diagram. PrestationSummary och table. Stats från PerformanceAnalytics-paketet för att visa en tomt och ett bord i den glänsande applikationen. Du måste ha blanka och Prestanda Analytics-paket installerade för att köra programmet. När de är installerade, öppna din R-prompten och kör: Det finns en bra blanka handledning från Rstudio samt exempel från SystematicInvestor för dem som är intresserade av att lära sig mer. De senaste ställningarna på momentum med R fokuserade på ett relativt enkelt sätt att backtest momentumstrategier. I del 4 använder jag kvantstratramen för att backtest en momentumstrategi. Med hjälp av quantstrat öppnas dörren till flera funktioner och alternativ samt en orderbok för att kontrollera branschen vid slutförandet av backtestet. Jag introducerar några nya funktioner som används för att förbereda data och beräkna ledningarna. Jag vann8217t igenom dem i detalj, de här funktionerna finns i min github repo i rank-functions-mappen. Denna första bit av kod laddar bara de nödvändiga biblioteken, data och tillämpar ave3ROC-funktionen för att rangordna tillgångarna baserat på medelvärdet av 2, 4 och 6 månaders avkastning. Observera att du måste ladda funktionerna i Rank. R och monthly-fun. R. Nästa bit av kod är ett kritiskt steg för att förbereda data som ska användas i quantstrat. Med raderna beräknad är nästa steg att binda raderna till den faktiska marknadsdata som ska användas med quantstrat. Det är också viktigt att ändra kolumnnamnen till t. ex. XLY. Rank eftersom det kommer att användas som handelssignal kolumn när quantstrat används. Nu kan backtesten köras. Funktionen qstratRank är bara en bekvämlighetsfunktion som döljer quantstrat-implementeringen för min Rank-strategi. För denna första backtest handlar jag de 2 bästa tillgångarna med en positionsstorlek på 1000 enheter. Att ändra argumentet till max. levels2 ger flexibiliteten hos 8220scaling8221 i en handel. I det här exemplet är tillgången ABC rankad 1 i den första månaden 8212 Jag köper 500 enheter. I månad 2 rankas tillgången ABC fortfarande 1 8212 Jag köper ytterligare 500 enheter. I föregående inlägg demonstrerade jag enkla backtests för handel ett antal tillgångar rangordnade baserat på deras 3, 6, 9 eller 12 (dvs. Även om det inte var en uttömmande backtest, visade resultaten att när handeln med de 8 bästa rankade tillgångarna resulterade rankningsbaserade 3, 6, 9 och 12 månaders avkastning i liknande prestanda. Om resultaten var lika för de olika återköpsperioderna, vilken återkallningsperiod ska jag välja för min strategi Mitt svar är att inkludera flera kollisionsperioder i rankningsmetoden. Detta kan uppnås genom att ta medeltalet av 6, 9 och 12 månaders avkastning, eller någon annan n-månad avkastning. Detta ger oss nytta av att diversifiera över flera återköpsperioder. Om jag tror att återkallningsperioden på 9 månaders avkastning är bättre än den 6 och 12 månaders månad kan jag använda ett vägt genomsnitt för att ge 9 månaders avkastning en högre vikt så att den har större inverkan på att bestämma rangen. Detta kan implementeras enkelt med det jag kallar funktionen WeightAve3ROC () som visas nedan. Funktionen är ganska självförklarande, men tveka inte att fråga om du har några frågor. Nu till testresultaten. Diagrammet nedan visar resultaten från 6, 9 och 12 månaders avkastning samt i genomsnitt 6, 9 och 12 månaders avkastning och viktat genomsnitt av 6, 9 och 12 månaders avkastning. Fall 1: Enkelt momentumprov baserat på 6 månaders ROC till rangering Fall 2: Enkelt momentumprov baserat på 9 månaders ROC till rangering Fall 3: Enkelt momentumprov baserat på 12 månaders ROC till rangering Fall 4: Enkelt momentumprov baserat på genomsnittet av 6 , 9 och 12 månader ROC till rangering Fall 5: Enkelt momentumprov baserat på vägat genomsnitt på 6, 9 och 12 månader ROC till rang. Vikterna är 16, 23, 16 för 6, 9 och 12 månaders avkastning. Här är en tabell över retur och maximala utdrag för testet. Detta test visar hur det kan vara möjligt att uppnå bättre riskjusterad avkastning (högre CAGR och lägre neddragningar i det här fallet) genom att överväga flera återköpsperioder i rankningsmetoden. Full R-kod är nedan. Jag har inkluderat alla funktionerna i R-skriptet nedan för att göra det enkelt för dig att reproducera testen och prova saker, men jag rekommenderar att du placerar funktionerna i en separat fil och använder källan () för att ladda funktionerna för att hålla koden rengöringsmedel. Många av de webbplatser som jag länkade till i föregående inlägg har artiklar eller papper på momentum som investerar som undersöker de typiska rankingfaktorerna 3, 6, 9 och 12 månaders avkastning. De flesta (inte alla) av artiklarna försöker hitta vilken är den bästa tittariden för att rangordna tillgångarna. Säg att resultatet av artikeln är att 6 månaders återkallning har den högsta avkastningen. En handelsstrategi som bara använder en 6 månaders återkallningsperiod för att rangordna tillgångarna gör att jag är sårbar för övermontering baserat på backtestresultaten. Backtestet berättar ingenting mer än vilken strategi som utförde det bästa i det förflutna, det berättar ingenting om framtiden8230 duh När jag granskar resultaten från backtests frågar jag mig alltid mycket om vad om frågor. Här är 3 vad om frågor som jag skulle begära för denna backtest är: Vad händer om strategin baserad på 6 månaders återkall under utför och 9 månader eller 3 månader börjar överträffa Vad händer om strategierna baseras på 3, 6, och 9 månaders återköpsperioder har ungefär samma avkastnings - och riskprofil, vilken strategi ska jag handla om, om de tillgångar med hög volatilitet dominerar rankingen och därigenom driver avkastningen. De bakre testen som visas är enkla backtest som är avsedda att visa skillnaden i avkastning baserat på återköpsperioder och antal omsatta tillgångar. Graferna nedan visar prestanda för en momentumstrategi med 3, 6, 9 och 12 månaders avkastning och handel med Top 1, 4 och 8 rankade tillgångar. Du kommer att märka att det finns signifikant volatilitet och variabilitet i avkastningen endast handel 1 tillgång. Variabiliteten mellan utkikningsperioder är reducerad, men det finns fortfarande ingen tydlig bästa återkallningsperiod. Det finns perioder av prestanda och överprestanda för alla ser tillbaka perioder i testet. Här är R-koden som används för backtests och plots. Lämna en kommentar om du har några frågor om koden nedan. Tiden flyger verkligen, det är svårt att tro att det har gått över en månad sedan mitt senaste inlägg. Arbete och liv i allmänhet har förbrukat mycket av min tid på senare tid och lämnat lite tid för forskning och blogginlägg. Hur som helst, till posten Det här inlägget kommer att vara det första i en serie för att täcka en momentumstrategi med R. En av mina favoritstrategier är en momentum eller en relativ styrstrategi. Här är bara några av anledningarna till att jag gillar dynamik: Enkel att implementera Long only eller longshort-portföljer Många sätt att definiera styrka eller momentummått Det fungerar bara Dessutom bidrar en momentumstrategi till potentialen för diversifiering. Instrumentets universum kan vara oändligt, men de handlade instrumenten är ändliga. Tänk på det på så sätt Investor A tittar på 10 instrument och investerar 1000 i de 5 bästa instrumenten, rankad av momentum. Investor B tittar på 100 instrument och investerar 1000 i de fem bästa instrumenten, rankad av momentum. Investor A begränsar sin potential för diversifiering genom att bara ha ett universum med 10 instrument. Investor B har ett mycket större universum av instrument och kan i teorin vara mer diversifierad. Teoretiskt sett kan du handla ett oändligt antal instrument med en begränsad mängd handelskapital med hjälp av en momentum eller relativ styrka strategi. Kolla in dessa länkar för vidare läsning I det här första inlägget i serien på momentum kommer jag att gå över några av de grundläggande inställningarna och funktionerna vi ska använda. Det första steget är att få data från yahoo. Observera att for loop-omvandlar data till månadsvis och deluppsätter data så att den enda kolumnen vi håller är den justerade nära kolumnen. Vi har nu fyra objekt (XLY, XLP, XLE, XLF) som har justerat slutpris. Nästa steg är att slå samman dessa fyra objekt i ett enda objekt som håller priset Justerad Stäng. Vi kan göra detta i ett enkelt enkelföretag i R För den faktor som kommer att rankas kommer jag att använda 3-periodens förändringshastighet (ROC).

No comments:

Post a Comment