Maskininlärning och algoritmer som stöd för trading

Jag skulle kanske kritisera den modellen såtillvida att när man tittar på de där marginalerna så uppskattar modellen att vi antingen går upp eller ner. Det är ganska svårt att ha fel där. Kanske vore det bättre att skapa en ny modell en gång i månaden, eftersom den verkade följa prognosens medelvärde ganska bra i ca 6-7 veckor?

1 gillning

Prognoserna beräknas om varje dag, varifrån önskad tidsperiod väljs. Den valda tidsperioden kan till exempel vara 2 månader framåt, då den genomsnittliga avkastningsprognosen kan vara 5 % och standardavvikelsen 10 %. Från dessa kan man till exempel beräkna Sharpekvoten 5 % / 10 % = 0,50. Sharpekvoten kan sedan användas för att konstruera en investeringsportfölj. Till exempel, av 10 aktier har tre aktier en Sharpekvot över 0,25, varvid en jämn summa investeras i dessa tre aktier. Sedan, när investeringsportföljens avkastning jämförs med avkastningen från en jämn diversifiering, kan man bedöma om algoritmen kan uppnå överavkastning.

Ingen handel på fredag

Under veckan resulterade förlusten i -459,45 € (-0,45 %). Inte mycket att berätta för barnbarnen. TietoEvry tillkom på fredagen.

Företagsspecifika värdeförändringar:
Metsäboard 159 €
Cargotec -8 €
Outokumpu -384 €
Fortum -226 €

3 gillningar

Semestern på ett par veckor är över och algoritmen har uppdaterats. Den första resultatsäsongen har gått smidigt utan större problem. Ponsse och Fortums resultat har ännu inte publicerats. Denna vecka är planen att lägga till ytterligare två eller tre företag.


Vinsterna för tre veckor var 2,47%, 4,15% och -0,36%, vilket man kan vara ganska nöjd med. Handel har skett i genomsnitt var tredje dag.


Investeringarna har uppnått en liten överavkastning jämfört med en jämnt fördelad portfölj.

För närvarande är investeringsobjekten Outokumpu, Fortum och TietoEvry, varav den senaste blev en del av portföljen idag (syns ännu inte på bilderna).

2 gillningar

Algolla har det gått som på räls, synd att mina egna pengar inte har varit investerade här. Men visst kommer den dagen också i år, om resultatet ser ut så här. Skillnaden i avkastning jämfört med en jämn diversifiering har ökat markant på tre veckor.

Den 19 augusti skedde en liten förändring i investeringsportföljens sammansättning, varefter portföljen innehåller lite fler företag. Nokia, Neste och Nokian Tyres har inkluderats, vilket innebär att det nu finns 18 företag. Handel har också varit betydligt lugnare efter förändringen.

Sedan förra fredagen är de största investeringarna i TietoEvry och Outokumpu. Fortum och Stora Enso har inte investerats i eftersom målinvesteringen är mindre än den fastställda minimiinvesteringen.
Sijoitukset

Maskininlärningen inkluderar nu data från 76 260 dagar. En maskininlärningsrunda tar för närvarande 75 minuter, och det ingår 20 rundor i helheten. Hela processen tar 25 timmar, men det är dock inte nödvändigt att ständigt utföra inlärning. Nu när det finns lite mer data skulle tiden kunna minskas avsevärt om man bara inkluderade varannan eller var tredje dag. Detta kräver dock vissa programändringar. Att generera dagens nya prognoser och annan beräkning tar bara några minuter.

3 gillningar

75 minuter per epok låter ganska lång tid om det bara är endimensionell data som jag skulle anta. Använder du GPU för beräkningen?

Data ser lite förenklad ut som nedan. Jag försökte räkna med GPU vid något tillfälle men fick det inte riktigt att fungera. Beräkningen utförs på CPU:n med 8 samtidiga processer, vilket innebär att 8 * 20 = 160 olika resultat erhålls på 25 timmar. CPU-användningen är cirka 60%, så jag antar att man skulle kunna få ut mer av det om man ville.

1 gillning

Jag vet inte vad det är för algoritm som ligger bakom det hela, men har du provat traditionella trädmodeller inom maskininlärning, t.ex. LightGBM, XGBoost osv.? De är ofta betydligt snabbare och enklare att använda än att leka med neurala nätverk (man behöver inte skala ingångsvärdena, hantering av kategoriska variabler osv.)

Jag har jobbat med AI/ML-modellering i flera år, men upptäckte investeringar först nyligen, så ämnet intresserar mig. Jag måste försöka fördjupa mig mer.

Här är några länkar för den som är intresserad:

  • Numerai “AI-fond”, där varje deltagare skapar avkastningsprognoser, och fonden som helhet viktas efter hur mycket pengar du har investerat:
  • M6-tävlingen – en “state-of-the-art” tävling inom tidsserieprognoser, där tusentals AI-experter skickar in sina modeller, och där man i år förutspår aktiemarknaderna
4 gillningar

Vad jag har läst om dessa fungerande/avkastande handelsalgoritmer, så delas de ofta in i två kategorier baserat på komplexitet. Mindre modeller är ofta väldigt enkla, bara några regler stora och innehåller nästan trivial matematik. Mer komplexa modeller är däremot väldigt omfattande och innehåller stark statistisk modellering för att kunna förstå vilka faktorer som verkligen är relevanta och vilka som bara är brus.

Mellan dessa två kategorier finns det inte så många fungerande modeller, eftersom bruset i marknadsdata lätt gör många algoritmer praktiskt taget oanvändbara. Dessutom begränsas användningen av historisk data av “alpha decay”, eftersom marknaderna ständigt förändras. Till exempel kan data som är 3-5 år gammal (när man talar om USA-marknaderna) redan vara nästan värdelös enligt vissa diskussionsforum.

3 gillningar

Jag skulle hävda att den här koden borde ta 25 minuter, inte 25 timmar. Du bör lägga tid på att identifiera flaskhalsar och använda enklare algoritmer (t.ex. Naive Bayes eller Random Forest, eller till och med en Ensemble-modell som använder förutsägelser från flera modeller).

Om man leker med Tensorflow eller liknande så är installationen av CUDA verkligen en irriterande huvudvärk för att komma igång med GPU-arbete. Jag googlade snabbt av intresse, och beroende på forskning verkade GPU:er vara minst 5 gånger snabbare än CPU:er för grundläggande neurala nätverksberäkningar. Intressant nog skrek CPU:erna med 60-80 % kapacitet i testerna, medan GPU:n tuffade på med 11 % av resurserna. Visst beror det på hur dålig CPU/GPU man har i maskinen.

Om du har något trevligt litet skript så har jag ofta flyttat sådana till Kaggle, där man får gratis beräkningskraft för GPU och så vitt jag minns även för TPU. Även Googles Colab erbjuder gratis GPU, vilket är utmärkt för att träna modeller – såvitt jag minns hade Colab en viss logik som innebar att den utförde beräkningar när extra resurser fanns tillgängliga.

Jag stötte på att Tensorflow också kräver en relativt ny CPU, en ny GPU räckte inte. Gamla processorer innehåller inte de nya optimeringar som Tensorflow vill ha.

3 veckor har gått sedan senaste uppdateringen, så jag lägger ut en liten uppdatering. Första veckan gick vi upp och sedan har det varit en nedgång i ett par veckor. Det totala resultatet ser dock ganska bra ut, även om vi har gått ner från toppen snabbare än en portfölj med jämn spridning. Sättet portföljen byggs på har ändrats till att baseras på Sharpekvoten, vilket borde leda till en jämnare avkastning.

Handeln har nu varit daglig. Verkar vara mest fram och tillbaka på grund av ändringar i viktning. De senaste åtta dagarna har det gått neråt :frowning:

Maskininlärningen baserades tidigare på korrelation och har nu ändrats för att även ta hänsyn till förklaringsgrad och prediktionsfel. Verkar vara en ganska bra ändring. Utöver detta har processen påskyndats genom att endast ta hänsyn till varannan rad.

3 gillningar

De bästa avkastningarna på aktier kommer när man köper billigt och säljer dyrt. Har någon testat att studera en akties historik, till exempel fyra veckor tillbaka, och notera de lägsta och högsta tio procenten, för att sedan köpa när kursen når den lägsta nivån och sälja när den når den högsta? Hur ofta skulle det träffa rätt :slight_smile:

Strategianalys:

  1. I en uppåtgående marknad kan avkastningen bli liten om det råkar inträffa nedgångar på 2-4 veckor. Då uppstår ett köptillfälle, men försäljningarna sker ofta för tidigt. Nästa köptillfälle måste bara väntas in.

  2. I en nedåtgående marknad uppstår rejäla förluster, eftersom man nästan hela tiden får köpsignaler. Strategins största problem är att sälja när aktiekursen faller.

  3. När aktiekurserna sågar fram och tillbaka skulle strategin kunna fungera bäst. Man skulle bara på något sätt behöva hitta lämpliga företag.

En så enkel strategi är ganska lätt att testa med till exempel Excel, om man vill ha snabba resultat.

En snabb skiss över Fortums avkastning med denna strategi

2 gillningar

Samma känslor om alla mina MACD-, RSI-, momentum-, osv. TA-experiment. De fungerar inte som de är. Inte heller om man handlar med t.ex. bull/bear-certifikat och därmed alltid är på marknaden.

2 gillningar

Jag har funderat ett tag på att jag borde kunna följa alla involverade strategier. Jag märkte att jag enkelt kan få ut information från optimeringarna av simuleringarna. De faktiska avkastningarna från de senaste 90 handelsdagarna ingår inte i prognoserna, så detta är ganska nära “out of sample”-data. Den röda linjen representerar en jämnt fördelad strategi, den gröna den nuvarande strategin och den gråa övriga strategier. Alla baseras på samma prognoser, men med skillnader i tillämpningen.

Den avkastning som överstiger den jämnt fördelade strategin har samlats på ett överraskande jämnt och bra sätt.

1 gillning

Prognoserna bildade en så pass snygg linje i Paint, förstärkt med svart för den “effektiva fronten”, så jag lägger upp en bild här. Fiskars och Elisa har lagts till.

Viktberäkningen ändrades igen med resultaten. Nu får företag som ligger mellan den röda och gröna streckade linjen en vikt mellan 0-1. Under den röda streckade linjen är vikten 0 och över den gröna är den 1.

3 gillningar

Hittade den här API-only mäklaren som även accepterar europeiska användare. API:et verkar ganska enkelt i Python, pappershandel möjligt.
Dock endast amerikanska aktier.

2 gillningar

För ett halvår sedan såg prognoserna ut som ovan och det verkar som att datan fortfarande finns kvar. I tabellen nedan har de faktiska avkastningarna och skillnaderna beräknats. Prognosnoggrannheten verkar visuellt sett ganska bra. Det genomsnittliga prognosfelet var 6,5 %. De faktiska avkastningarna var i genomsnitt 4,1 % sämre än prognoserat.

Olika investeringsstrategier presterade överraskande likartat. Data har samlats in i slutet av varje månad, då avkastningarna inte var kända. Jämviktsspridning är markerad med rött i bilden nedan och den strategi som ger bäst förhållande mellan avkastning och risk i simuleringarna är markerad med grönt. Den sistnämnda har använts mestadels.

Den dagligen insamlade datan skiljer sig något från ovanstående eftersom strategin har varierat. Svarta linjer har skissat vilken avkastning som bör förväntas i genomsnitt med den valda strategin baserat på simuleringen.

Längs vägen har investeringarna vevats fram och tillbaka. Nedan har antalet investeringsdagar, den genomsnittliga investeringen och avkastningen beräknats. Antalet dagar under perioden var totalt cirka 130.

Överlag börjar det kännas som att det finns ganska förnuftiga saker här. Det borde finnas betydligt mer data, eftersom det finns stora skillnader mellan företagen i bokslutsinformationen.

5 gillningar