Marknadstajming med egenutvecklad algoritm

Hej!

Det här är mitt första inlägg med denna pseudonym, men har hängt på forumet tidigare. Jag skulle vilja dela med mig av vad jag har hittat.

Först så skulle jag vilja ge lite bakgrund. Jag har hållit på med att utveckla investeringsalgoritmer sedan 2011 och har testat otaliga varianter och köpt och sålt aktier, etf, fonder och mini long/shorts på vägen. Därtill har jag skannat internet efter matnyttigt material och spännande koncept att bygga vidare på.

Jag har landat i nästan samma grundbult som de flesta här på forumet skriver på, att indexfonder/etfs är ett enkelt sätt att få bra riskspridning. Problemet, som ni alla vet - är att det är svårt att sitta på händerna när skiten träffar fläkten och båten gungar. Alla aktier samvarierar mer eller mindre, det finns sällan något skydd när marknaden klappar ihop som den gjorde 2008, 2011 och 2020.

Efter många år av sökande så tror jag har hittat ett sätt att ta upp båten på land när det stormar. Det gör det ju ibland på marknaden. Med de verktyg jag hade så byggde jag upp en relativt okomplicerad algoritm (tänk första mattekursen på gymnasiet ungefär) som jämför räntor mot index och verkar ge relativt god kausalitet, dvs att den kan förutspå när en sämre investeringsperiod är på ingång. Jag har testat att fördröja signalen med olika antal dagar, och signalen är ändå stark.

Nåväl. Såhär ser det ut för OMXS30 när jag applicerar algoritmen bakåt. Portföljen är likvid när vi är utanför börsen. Vän av ordning säger såklart att man kan inte investera i ett index, men det ger i alla fall en antydan av vad exempelvis xact omxs30 skulle ha gett.

Vi hamnar då på ca 377% avkastning på 21 år, eller ca 7.45% årlig avkastning. Helt okej med tanke på att vi 35% av tiden inte tar någon risk alls. Notera att vi också börjar mitt i IT-bubblan, vilket algoritmen parerar någorlunda. Tyvärr så sträcker sig inte min data längre än så för OMXS30. Avkastningen för indexet utan timingmodellen ligger på 152%, så avkastningen är mer än dubbelt så stor för denna tid. Logaritmisk skala nedan:

Skulle portföljens värde läggas i ett sparkonto under tiden som vi är likvida så skulle avkastningskurvan se ut såhär:

Istället för 377% avkastning hamnar vi på 541%, eller 8.9% årlig avkastning. Sparkontot har jag satt till Fed funds effective rate, dvs amerikanska centralbankens utlåningsränta. Det finns skäl att tro att man skulle kunna ha större ränta än så på sitt sparkonto, men också mindre (det är ju 30% skatt i sverige). Det är främst för att kunna få ut en ungefärlig snittränta på ett sparkonto.

Tittar man på sharpekvoten hamnar vi på 0.6 och sortinokvoten på 0.94. Vi snittar dubbelt så många transaktioner per år, då vi även behöver flytta pengarna till ett sparkonto/räntekonto. Därför hamnar vi i snitt på 3 stycken transaktioner per år.

Så här ser utvecklingen ut för timingmodellen utan sparkonto om vi tittar årsvis. Njord är algoritmens namn. Lead = 4 betyder att vi 4 dagar efter signalen gör en transaktion. YearlyDiff visar skillnaden mellan Njord och buy-and-hold av indexet. Positiv YearlyDiff visar att algoritmen slår indexet.

Och såhär ser den ut om vi tittar per transaktion. TimingReturns visar vad det tidigare köpet ger för avkastning.

Jag har mer historisk data för Nasdaq och SP500. För Nasdaq så får vi en klassisk hockeyklubba:

Jag tror att Nasdaq blir så bra för att den är lite lagom bubblig av sig, det är större uppgångar, men också större nedgångar.

En ännu trevligare kurva får vi om man också använder sig av ett sparkonto istället för att hålla pengarna arbetslösa:

Och som logaritmisk skala:

Då blir avkastningen 16.7% per år i snitt. Sharpekvoten hamnar på 1.18 och sortinokvoten på 2. Med sparkontot så hamnar vi på i snitt 2.6 transaktioner per år. 5 av 51 år så går algoritmen minus med detta upplägg: 1988 (-1.78), 1990 (-2.85), 1994 (-0.24), 2011 (-2.00) samt 2022 (-7.05). 31 år av 52 så går algotitmen bättre än indexet. Det är främst duckandet av de stora breda nedgångarna som gör störst skillnad.

Avkastning per år:

Det mer “normala” indexet SP500 får också en bra utveckling över 52 års tid:

Logaritmisk skala:

Och särskilt med ett sparkonto att gå över till när dipparna kommer. Högräntemiljön på 70- och 80-talet får en bra boost när börsen gick ner under denna tid, räntan på sparkontot var ibland över 10% dessa år.

Här landar vi på 13% i årlig avkastning, Sharpe på 1.05, Sortino på 1.84 och maximal drawdown på ca 19%.

Jag har lagt in x antal släpande dagar (vanligtvis 2,3 eller 4) för att undvika lookahead bias. Transaktionskostnaden borde bli ganska låg med tanke på att det händer så sällan. Direktavkastning är inte medräknat, men kanske kan “dras av” mot skatt och andra kostnader?

Så vad tycker ni? Jag tycker i alla fall att jag träffar dipparna bra och att det finns kausalitet mellan signal och framtida utveckling, särskilt för amerikanska index.

Edit: daglig uppdatering av algoritmen finner ni här: https://www.indexweather.com

10 gillningar

Hur ser du på problematiken med overfitting, det låter som om du verkar itererat på samma data för “träning” och “verifikation”?

10 gillningar

Hur många magiska siffror innehåller algoritmen (alltså konstanter)? Och är det så att du tweakat modellen tills den plötsligt blev positiv eller hur har du kommit fram till modellen?

8 gillningar

Resultaten är onekligen intressanta, men hoppas du har överseende med viss skepsis från forumet, många har sett detta förr.

Jag skulle gärna vilja veta lite mer kring vad algoritmen bygger på, i översiktliga drag. Du skriver att den jämför “räntor mot index”, vill du utveckla det? Det verkar ju inte vara relativ överprestation hos räntor som du tittar på, eftersom en signal triggades under 2022.

Sedan tänker jag också att algoritmer liknande din är svåra att följa disciplinerat i praktiken, eftersom den faktiskt underpresterar OMXS30 under 50% av åren i din tabell, ofta flera år i rad. Ta t.ex. 2019-2021, då algoritmen underpresterade 3 år i rad, och inte alls skyddade mot coronakraschen. Jag tror att få människor hade uthärdat det, och övergivit algoritmen lagom till 2022, då den faktiskt överpresterade rejält.

@dr_kalkyl har utvecklat många liknande algoritmer, och har säkert något intressant att säga här.

5 gillningar

Hej, definitivt en bra fråga. Jag har testat algoritmen på ca 10 andra index, utan att ändra koden. Resultaten diffar i absoluta procent, men ger generellt dubbel avkastning över den period som jag testar.

Index som jag har testat: oslo obx, omxc25, dax, cac40, tsx (Toronto), nikkei225, kospi, twii (taiwan), Shanghai composite. Som jag skrev tidigare så samvarierar många Index, så resultatet blir i princip densamma. Desto större och kraftigare cykler, desto bättre.

Totalt har jag 3 variabler i min algoritm, så det är inte särskilt mycket att skruva på. Jag utvecklade en till, snabbare variant med en till variabel för extra mean reversion - den gav lite fler transaktioner men också fler köp. Avkastningen ökade med 1-2 procent per år.

3 variabler. Bygger på MACD som är en ganska standard indikator. 2 av variablerna styr MACD. 1 variabel styr när man går över till köp/sälj.

1 gillning

Hmm det låter spontant för mig som om du har väldigt svag verifikation för att din modell ska vara representativ för framtiden. Helt enkelt eftersom som du skriver att indexen samvarierar mycket.

Tänk det teoretiska ifall alla indexen samvarierar perfekt. Då är indexen faktiskt samma index, och träna/verifiera på ett index är samma oavsett vilket index du väljer.

Jag tror du behöver data från en annan tidsperiod att verifiera på. Som du egentligen inte sen kan iterera alls på, eftersom du har du gjort om den verifikationsdatan till träningsdata.

3 gillningar

Tack, du har helt rätt i detta. Det är rätt så svårt att hitta bra data då vi i princip bara har 1950-> att spela på. Jag har börjat kika på om jag kan få data bakåt i tiden. Har för mig att Dow Jones sträcker sig längre bakåt och det datasetet har jag i alla fall haft. Mitt “ränteindex” blir däremot svårare att återskapa.

Skepticism är väldigt sunt, det är därför jag publicerar här - för att få mer input på det jag har gjort.
Du har helt rätt I att, i alla fall för omxs30 - att det finns perioder då den underpresterar. Här har jag en idé att gå över till räntefonder/sparkonton istället - kanske även att alternera mellan långa och korta räntor också.

Just coronapandemin kom snabbt, utan någon större förvarning, vilket är otroligt svårt att förutspå. Jag har en till version med lite fler transaktioner som jag har för mig fångar upp signalen tidigare.

Den totala nedstängningen av världsekonomin tror jag inte kommer att hända igen. Det är väl om det blir kärnvapenkrig eller solstorm.

För tajming av detta slaget skulle jag säga att man får ignorera fall som corona. Det är svarta svanar som ingen kan förutspå. Kan man bara med någorlunda säkerhet tajma in hög och låg konjunkturs signalerna så lär man ha ett tillräckligt bra försprång. Sen gäller det att sitta still i båten när man förutspår fel.

Den klassiska är väl 3/10 inverteringen som har förutspått alla tidigare recessioner i USA. Mest en fråga om hur lång tid man får vänta efter. Nu tror jag vi ligger på genomsnitt tiden så närmaste 1/2 år bör vi kunna se om den signalen stämmer denna gången också.

1 gillning

Problemet med det är att den hade inte kunnat användas historiskt för att förutspå det.

Det är ett statistiskt lurendejeri inbyggt i den slutsatsen. Måttet man valt 3/10 är i sig anpassat på historiken fram till nu. Medans man verifierar måttet på saker i samma historik. I princip motsvaras det att när man mäter på en historisk händelse på t.ex. 70 talet så är måttet (just 3/10) utvalt på händelser efter 70 talet. T.ex. händelser på 80 och 90 talet.

Så man har i praktiken använt ett mått som sett in i framtiden.

Om man kompenserar för det och försöker se på yield curve inversion där måttet bara är anpassat på historik fram till den tidpunkt man mäter på kan man få annat resultat.

1 gillning

Jag förstår om man pratar om AI/NN där man måste träna nätverket med datan men om man har en indikator som visar att “Om X är större än Y så är det med stor sannolikhet en recession inom snar framtid”.

Tittar man på Painfully Accurate: The 10YR3M Recession Indicator - EPB Research och säger att det är 2006 nu och du har inte data sen efter det så indikerar den fortfarande att det varit en recension efter en sådan vändning och det stämde.

Detta är så klart ingen garanti och det är kanske det man antar att man säger men det finns ingenting som garanterar någonting. Allt vi kan hitta är teorier som har en större eller mindre sannolikhet att stämma. Sen får vi se hur de håller i framtiden och andra de därefter eller förklara utfallet. Som den svarta svanen corona.

Samma problem gäller oavsett om det är 1 eller 1 miljon parametrar.

Problemet här är delvis att mängden data som ens existerar är otroligt knapphändig.

Men också det faktum att börsen är en konkurrens/tävling, där det som är allmänt känt redan prisas in och därmed förstör måttets användbarhet. Ju enklare resonemang och mått desto mer spridd information som dagens priser redan inkluderar i framtida förväntan.

Kanske är så att du letar efter något som garanterat stämmer till 100% eller tror att andra gör det.
Vi vet redan att när det gäller börsen så finns inget sådant. Man kan ställa sig till gruppen som försöker hitta mönster och då är allt man kan göra är att ta fram teorier på historisk data och hoppas på att de stämmer i framtiden. Har man hittat någon som historisk alltid har stämt, vad det nu är för signal, så kan man bara hoppas på att den fortsätter göra det men det finns ingen garanti för det.

Själv så tror jag man kan hitta mönster som håller. Om inget annat för att minska risken. Ta 3/10 signalen. Den kan vara en signal som naturligt sker pga av den stora gruppen investerare som ser kombinationen höjda styrräntor, sämre utsikt för aktier (och då högre risk för investerat kapital) och obligationers längd. När risken att ha aktier blir för stor så flyttar investerar från aktier till räntor.
Även om alla vet detta så kommer alla ha olika ideer på hur lång tid det tar så därför kan det vara en tillförlitlig signal. Det är inte så att hela finansbranschen vaknar upp en dag och alla kommer på “Där är 3/10 triggern, då säljer vi alla aktier vi har och flyttar över några triljoner dollar till obligationer idag tillsammans med alla andra”.
Det kan också vara en signal de inte kan direkt använda för fonderna kan inte hoppa av börsen i 1 år i tron att det går ner. De måste skapa avkastning eller så lämnar deras kunder. Men vi som enskilda kan göra det.

1 gillning

Nej, jag pratar bara om att ha ett statistiskt övertag mot marknaden.

Jag tror du drar all för stora växlar på alldeles för dålig data. Resten av ditt långa inlägg upplever jag inte innehålla något konkret utan bara åsikter.

Iomed att det finns absurda summor pengar att tjäna på att slå marknaden riskjusterat tror jag inte på att såhär enkla mått hjälper. Utan det handlar mer om att risken ökar eller att man har modellerat slump.

Det finns mängder med kompetens och resurser som inte gör annat än att vara först på att handla på alla former av information. Att man som privatperson ska kunna hinna plocka dessa avvikelser med så små resurser är väldigt orimligt.

1 gillning

Jag tror man inte ska underskatta människors vilja att vara unika. Jag har träffat fondförvaltare som sitter med 10× miljarder i förvaltning som pillar i sina egna excelark med viss fundamental bokslutsdata för företag. Det var hens hantverk och konstverk i ett. När jag frågade om hen använde några tekniska stöd så såg hen frågande på mig. Jag blev lite chockad där och då över attityden. Möjligtvis finns stödet, men det nämndes inte.

Jag tror att vi sätter väldigt hög tilltro till specifika individer på dessa positioner. Det de gör är att försöka hålla sig nära ett visst index och inte ta för mycket risk, för då förlorar de jobbet. Herd mentality finns särskilt i finansbranschen, en lösning som min skulle göra att de förlorar jobbet, även om de på 5 års sikt skulle slå indexet. De flesta människor är för kortsiktiga tycker jag.

1 gillning

Det här skulle kanske kräva lite mer avancerade ingrepp än gymnasiematte, men en tanke jag hade var att om du vet t.ex. korrelationen mellan räntan och index så kanske du kan använda den informationen till att simulera ett antal kontrafaktiska dataset och undersöka hur algoritmen presterar där. Du är ju ändå egentligen inte intresserad av hur algoritmen presterat historiskt, utan hur den kommer prestera i framtiden. Om du då kan ta någon strukturell parameter från den historiska datan, som t.ex. den ovan nämnda korrelationen, och använda den till att generera ett antal möjliga framtida scenarion så kanske du kan lära dig mer om vad för sorts utfall algoritmen kan och inte kan hantera.

1 gillning

Det luriga är att korrelationen som bara är ett linjärt mått inte nödvändigtvis representerar verkligheten framöver. Det kan vara ett icke linjärt samband som historiskt betett sig linjärt men (eftersom det nu är känt av marknaden att så varit historiskt) så är all edge kopplat till måttet borta. Eller så har det bara råkat samvariera med andra faktorer på ett sådant sätt att korrelation funnits historiskt men inte har någon bäring alls på framtiden.

De flesta människor är för kortsiktiga tycker jag.

Både ja och nej. Det stora problemet med att vara långsiktig är att det är otroligt lätt att säga “du är för kortsiktig, vänta bara”, medans man generellt måste prestera för att ha rätt kortsiktigt. Ofta är långsiktighet ofalsifierbart, vilket är varför företag tenderas att värderas mycket på deras kortsiktiga resultat.

För att vara mer konkret: när vet du om din egenutvecklade algoritm fungerar eller ej?

Nej exakt, det är ju ingen som vet hur framtiden kommer se ut. Jag tänkte det mer som en exercis i att pröva olika antaganden, istället för att bara hoppas på att framtiden kommer röra sig precis som historien. Om man kan plocka ut några relevanta parametrar så kan man ju sedan också ratta på dom och undersöka om algoritmen t.ex. skulle prestera lika bra om korrelationen helt plötsligt sjönk några snäpp.