Koneoppiminen ja algoritmit treidauksen tukena

Aavistuksen verran ehkä kyseenalaistan ketjussa esitetyt treidibotit siinä mielessä, että voidaanko olla varmoja ettei koulutuksella ole bottia superfitattu vastaamaan oikein dataan. En voi sanoa tietäväni tekoälystä hirveästi enempää kuin parin viihteellisn Youtube-videon verran, mutta yleensä teköälyä ei saa opettaa sillä datalla millä sen toimintaa testataan. Ja esimerkiksi Nokian osakkeelle tehtyyn lineaarinen regressio on tottakai helppo tehdä jälkikäteen. Seuraako osake kuitenkaan tulevaisuudessa tuota samaa trendiä?

Oli kyllä mielenkiintoisiakin havaintoja. Esimerkiksi hinnat kausiluonteisuus. Noita voisi hyvin käyttää treidaukssa.

Rajapinnasta: Olen katellut, että ihan nätit rajapinnat Nordnetissä on kuitenkin käyttöliittymän takana vaikkei niille ole virallista dokukentaatiota. Ei olisi hirveän vaikeaa rakentaa niiden päälle jotain. Varmaan kyllä rikkoo Nordnetin käyttöehtoja muttei se nyt ole niin justiinsa.

Joskus oon fiilistellyt jos tekis Nordnettiin terminaalikäyttöliittymän niin voisi nopeasti tehdä parit treidit ja katsastaa salkun staattuksen komentoriviltä :smiley:. Ei sillä kuitenkaan, että tekstipohjainen käyttöliittymä toimisi kovin hyvin oikeasti osakkeille missä grafiikka on aika keskeisessä osassa. Voisi kutenkin saada vähän retro-meininkiä - treidausta tyylillä.

Jotain pieniä juttuja voisi myös automatisoida. Esimerkiksi tänään otin paljon paritreidejä indeksiä vastaan (osake long, index short) niin olisin voinut hyvin laittaa botin ottamaan shorttia salkkuun sen verran, että netto-osakepaino pysyy raja-arvon alapuolella.

Toinen automatisaation paikka olisi stop loss sertifikaateille ja muille viputuotteilla.

4 tykkäystä

Vuosi sitten joku viimeksi tänne kirjoitellut.

Herätelläänpäs sitten keskustelua.
Joululomilla pykäsin Pythonilla ja Tensorflow/LSTM/Deep-Learning -estimointisoftaa, jolla kalkyloin pari kertaa viikossa Nordnetin sertifikaatti ja minifutuureista ostokohteita n. 200 € panoksella ja 15-20 lappua per kerta viikon holdiin.
Pohjana käytin ihan PythonCoden tutorialia.
EPOCHS=350, DROPOUT=0.4, LAYERS=2, NEURONS=256, BACTH_SIZE=64, N_STEPS=50
Olen kokeillut monta eri asetusta, mutta tuon tutorialin default-arvot tuntuu vaan aika hyviltä. Ainoastaan epochien määrää pudotin, koska TensorBoardin mukaan tuntui hieman ylioppimiselta mun omalla Loss-funktiolla.
Tämä on myös positiivista, koska 15 kohteen opetus ei kestä niin kauan. Nyt menee Azuren GPU:lla varustetulla VM:llä avout 6 minuuttia per ticker. Kahdella VM:llä tarkoittaa käytännössä tunnin operaatiota datan hakemisiin Nordnetista, opettamisineen ja treidaamisineen.

Vielä en ole rakentanut robo-treidausta, nyt vielä opettelen miten nuo sertit ja minifutut oikeesti toimii ja miten niillä pelataan. Eli treidaus edelleen käsin.

Homma on tuottanut muutamssa viikossa, joo, mutta vola on hirveä. Nuo tuotot, samoin kuin tappiot on tulleet lähinnä yksittäisillä keisseillä ja muut mörnii vaakasuoraan. Ehkä se näin pitää ollakin. Tuloskausi myös vaikuttanee.

Loss-funktio algossa on itse kyhätty, jonka pitäisi ennustaa oikein short/long. Backtestit antaa noin 54% onnistumista. Opetuksessa käytän nyt aikaväliä 2012 - 2020/6. Ja sitten validointi uudella datalla, jota algo ei ole nähnyt 2020/7 - 2021/2. Tossa on nyt tietysti se, että validoinnissa ei ole kunnon laskusuhdannetta mukana, ja vaikka opetusdatassa onkin pari dippiä, niin pääasiassa suunta on ylöspäin. Sitten “tuotannossa” opetan nykyhetkeen asti, ja haen sitten ennustuksen 5 pörssipäivää eteenpäin.

Ehkä tämän viikonlopun aikana teen feikkidataa, jossa kurssit laskevat 2020/7-2021/2 niin näen miten algot reagoivat siihen - kertonee siitä, että onko tällä mitään virkaa oikeasti vai onko hyvä alku ollut vain tuuria.

Onkos tänne ilmestynyt muita algo-treidaamisesta kiinnostuneita? Olisi kiva vaihtaa mielipiteitä ja oppia teiltä.

11 tykkäystä

Mites meinasit tehdä feikkidataa?

Jos tunnet kurssien käytöksen lainalaisuudet, niin mihin tarvitset koneoppimista kun voit vain kovakoodata nämä ehdot ohjelmaasi?

Jos et tunne kurssien käytöksen lainalaisuuksia (oletettavasti olisit aika rikas jos tuntisit), niin ennustemallisi performanssi feikkidatallasi ei kerro mitään performanssista oikeilla kursseilla.

Itse tekisin juoksevaa testausta esim. koulutat mallia datasi ensimmäisellä vuodella ja testaat tämän vuoden jälkeisellä kuukaudella. Sitten siirrät molempia vaikka viikolla eteenpäin. Tuon kun rullaat koko aineiston läpi, saat jonkunlaisen idean siitä, millaiseen tasoon vuoden aineistolla pääsee.

Miten pääsit Nordnetiin kiinni, onko siellä avoin API tätä varten?

Itse joskus testasin tusinan verran erilaisia baseline-algoja (puhtaasti tekniset MACD, ABCD etc, ja DL-pohjaisista LSTM) erinäisiin osakkeisiin, ja muistaakseni totesin, että erittäin simppeli MACD taisi puksutella tasaisimmin trendistä riippumatta.

Mm. Intelin tickerillä taisi tulla alla olevan näköistä jälkeä. Tuossa oli nelisensataa treidiä 40 vuoteen, eikä huomioitu transaktiokuluja lainkaan. Toki puhtaalla holdilla olisi tehnyt paremmat rahat, jos oston on osannut ajoittaa fiksusti. Toisaalta näyttäisi, että romahduksissa ja laskutrendeissä MACD:stä olisi saanut varsin rationaalisen kaverin.

2 tykkäystä

Kiitos vastauksista!
@Alfons_Knautmauer Mä olen tehnyt tuollasta ehdottamaasi testiä, mutta tuolla kuvaamallani tavalla, eli käyttänyt muutamaa kymmentä eri osaketta, opettanut viime kesään asti ja noilla osakkeila sitten tutkinut, montako kertaa algo ennusti oikein long vai short. Olen myös kokeillut tuollaista rullaavaa testiä, mutta hyvin vähän. Syynä oli se, että opettamiseen menee niin paljon aikaa, jos useampaa tikkeriä ajaa kaikkia monta sykliä. Mutta hyvä nosto, pitäisi tehdä tätä taas ja käyttää siihen sitten vaan aikaa.

Feikkidatalla tarkoitan, että jos laittaa algon sisään vaikka siniaaltoa tai sahalaitaa, niin sen pitäisi tunnistaa tuo kuvio, ja osata treidata sitten sen mukaan tuottoisasti. Koska tuon pitäisi olla se kaikkein helpoin DL-tapaus.
Toinen feikkidata, mitä ajattelin, olisi ihan oikea osakehistoriadata, mutta säätäisin sitä niin, että jostain ajanhetkestä lähtien jakaa osakkeen arvon 1.001:llä, seuraavan päivän arvon 1.002:lla jne, jotta saisi enemmän mörnimistä tai laskua kursseihin. Nythän kesän jälkeen kurssit on nousseet koko ajan ja toki algokin ehdottaa useammin long kuin short. Mutta sit toisaalta, sokea apinakin olisi osunut hyvin oikeaan, kun olisi vaikka 70% long osakkeista ja 30% short koko ajan.
Mitä myös olen tehnyt, niin tuon mun oman loss-funkkarin laitoin toimimaan päinvastoin, eli ehdottamaan treidejä, joista tulisi maksimaalinen tappio. Ja näin tosiaan kävi, validoituna historiadatalla, jota algoritmi ei ole nähnyt, siis.

@Seinakadun_Keisari mä olen vaan hakenut Nordnetilta Nordnet Markets -hinnaston, et tietää mitä on edes järkevää ostaa. Suurin osahan on sellaista tavaraa, että teet turskaa vaikka 60%:sti olisit oikeassa. Ois kyllä kiva et Nordnet tarjoaisi hinnaston vaikka edes .csv -tiedostona.
Ei Nordnetilla ole julkaistua apia. Mutta tokihan siellä apit on, mut en niitä nyt käytä. Apeja jos käyttäisi, niin pitäisi kutitella oikeilla headereilla, cookiet sun muut.
Vähemmän kuormaa heidän palvelimilleen toki tulisi, jos voisi suoraan api:sta sen hetkisen hinnaston hakea, tällöin myös hintatiedot ei ehtisi vanhentua. Lähinnä noissa hintatiedoissa kiinnostaa vipu ja spread kullekin tuotteelle.
Robo-treidaus olisi sitten oma projektinsa, ja senkin voisi toteuttaa web-ui:n kautta tai jos keksii miten apeja käytetään niin sit niitä käyttäen. Kummassakin on omat ongelmansa, ei ihan simppeli juttu, nimenomaan erikoistapaukset, kuten tilanteet joissa hinta karkaa eikä kauppaa synny.

1 tykkäys

Okei! Mä tein myös yhden tai kaksi koetta, missä treidasin pelkästään MACD:llä. En saanut sillä kovin hyvää tulosta aikaan enää viime vuosien osalta. Aikaisemmilta vuosilta kyllä. Tuo sinun MACD-tuloksesi näyttää kyllä kovin hyvältä. Se että jos tuo olisi log-asteikolla, niin sitten se ei ehkä niin hyvältä enää näyttäisikään, koska esim 2015 jälkeen suoritus on 1200 → 1350, eikö niin, eli 12.5% hyvää 6:ssa vuodessa.

Mä huomasin jo ensi vaiheen DL-kokeiluissa, että suorituskyky oli huikea (useammalla osakkeella keskimäärin) 2000-2011 vuosina, mutta sitten 2012 jälkeen alkoi olla jo vaikeaa ja ihan viime vuosina enää tosi pientä etua pystyy saavuttamaan. Siksi mä olen käyttänyt opetukseen aineistoa 2012-2021 vain, ja sitten vain osakkeita, joille yahoo-apista löytyy historiadataa yli kuusi vuotta. Lyhyemmillä datoilla, kuten vuosi, luulen että algoritmiakin pitäisi säätää, kun pelkään että helposti ylisovittaa vähäiseen dataan.

Ootko muuten käyttäny backtestaamiseen ziplinea tai backtraderia? Näillä itse leikin viime syksynä, mutta homma jäi vähän vaiheeseen. Jos sulla on koodeja jossain githubissa, niin voisin olla kiinnostunut. Ehkä voitais jeesata toisiamme? Itse opiskelin kirjan Machine Learning for Algorithmic Trading pohjalta.

Mulla olikin itse asiassa näiden postausten pontimena ajatus, et jos löytyis sparrauskaveria tai useampia näihin algoharrastuksiin.

On mulla koodit githubissa, tosin priva-repoissa lähinnä.
Ei noissa muissakaan kai mitään arkaluonteista sinänsä ole, netti on täynnänsä algotreidauksen tutorialeja. Mut suurin osa mun repoista on sellaista kesken jäänyttä kuraa :slight_smile:
Ja tämä nykyinen tuotantohimmeli (kuulostaa komealta tuo “tuotanto”) on vielä aika manuaalinen ja usean virittelyn jäljiltä koodin laadusta en ole erityisen ylpeä. Siivousta toki pitää (pitäisi) harrastaa kans.

Ehkä voitais privaviestitellä ja tsekkailla ollaanko samoilla aaltopituuksilla?

Mä lueskelin joskus pari vuotta sitten jotain Eric Chanin kirjoja ja aloitin excelillä, sitten tein kaikenlaisia virityksiä C#:lla, Pythonilla, jne.

Nyt tähän systeemiin lähdin vaan opiskelemaan Tensorflowta, tein useita kokeita perustuen erilaisiin netistä, useimmiten Mediumista löytämiini artikkeleihin. Mutta en ole järjestelmällisesti opetellut mitään kirjaa seuraamalla, vaan enemmänkin kokeilujen ja erehdyksen kautta ja erilaisista artikkeleista vinkkejä hakien edennyt.

Ja backtestaamisesta - ei, en ole mitään valmiita tuotoksia käyttänyt, olen vaan omin pienin kätösin koodaillut backtestit.
Koko ajan on tietysti epäilys, että olisi helpompiakin tapoja tehdä asioita, mut sit pitäisi tietää enemmän noista välineistä.

1 tykkäys

Suosittelisin oikeastaan tätä foorumia koska siellä käsitellään aika hyvin monia tyypillisiä lähestysmistapoja algoritmeissa, jotka eivät toimi. Markkinadatassa on niin paljon kohinaa, että tarvitsee aika vahvan tilastollisen mallinnuksen siihen, onko jokin signaali riittävän luotettava vai ei. Liian monimutkainen malli todennäköisesti overfittaa pelkkää kohinaa. Toinen tyypillinen ongelma on kuulemma se, jos backtestaus ei mallinna bid/ask spreadia. Tällöin testaus voi näyttää jotain voittoja, joita ei todellisuudessa ole siellä.

2 tykkäystä

Omat algojen ennusteet näyttää tämmösiltä. Ennuste seuraavalle 4,5 kuukaudelle. Päivät ei tasaisesti vaan puolivälissä on n. 1,5 kk päähän ennustettu tilanne.

Voin kyllä suositella tuota mainitsemaani kirjaa. Ohessa on github repo kaikkiin koodeihin, missä myös docker container ympäristöön (avoin myös ilman kirjaa). Sen avulla pyöritellyt näitä azuressa. Harmi vain, että kirja pyörii aika paljon tuon ziplinen ympärillä, joka on ehkä omaan makuun aika heavy. Tekisi mieli siirtyä enemmän tuohon backtraderiin.

1 tykkäys

Pitäisi allekirjoittaneen kertailla vähän kumulatiivisen logaritmisen tuoton kaavoja…

Jollen ihan väärin muista, niin tuossa aiemmassa kuvaajassa esitettiin nimenomaan logaritmista tuottoa, ja tuo viimeisen 6 vuoden 1200 → 1350 tuotto tarkoittaisi 150 % tuottoa, eli tuollaista 25 %:n keskimääräistä vuosituottoa.

Treidien tuotot ja pituudet:
image

Jos lähti 100 taalalla liikkeelle vuonna 1980 ja veti joka treidiin all-in niin jälki oli oheisenlaista:

Toisaalta, jos jokaisesta kaupasta maksoi kuluja 0.5 %, oli lopputulemana 800k sijaan 12 000 euroa. 0.2 %:n kuluilla 140k euroa. Melko ratkaisevassa roolissa siis kulujen osuus tämän strategian kannattavuudesta. (Toki jos tiskiin oikeasti löisi puoli miljoonaa, kulut eivät tietenkään olisi tuhatta euroa per kauppa, vaan Nordealla (Tasolla 5) 0.06 %, eli 300 euroa per treidi, ja lopputulemana kuluihin palaisi alta 100k euroa ja käteen jäisi 700k euroa)

Ohessa vielä viimeisten 3 vuoden kaupat. Varsin näppärästihän MACD:llä on tapana osua pohjille ja toimii nykypäivänäkin. Intel on aika vahvasti veivannut ees taas ja tuottanut huonosti, mutta MACD kyennyt varsin tasaiseen nousuun pitkällä aikavälillä. Huomionarvoista, ettei MACD ottanut lainkaan osumaa koronadipistä, ja hyppäsi takaisin kyytiin suhteellisen läheltä pohjia. Sen sijaan elokuussa 2020 taisi tulla Inteliltä äärimmäisen huono osari samaan aikaan kun AMD löi ennätyksiä, eikä nämä tekniset vekottimet tietenkään osaa nuihin reagoida. Liekö tuotto parempi, jos ei istuisi kyydissä teknisiin indikaattoreihin pohjautuen tulosjulkistusten alla…

Onko se tämä se kirjan repo? Näyttäis olevan tiivistelmä itse kirjastakin mukana.

Jees, juurikin tuo. Jotain bugeja tuolta tullut vastaan, mutta niitten kanssa pärjäilty ja päästy eteenpäin. Voi olla, että näihin tullut sittemmin korjauksia. Onnistuin ziplinen backtest materiaaliksi tuomaan osajoukon hex25 yhtiöstä yahoo financen datalla muistaakseni 2016->. Poistin joukosta yhtiöt, joilla oli ollut splitti ja mergeri, koska liian laiska korjaamaan kursseja niiden suhteen.

Minkälaiset parametrit macd:lle sulla on käytössä?

@Alfons_Knautmauer :n vinkkaaman Backtraderin demo näyttää että macd(12,26) -asetuksilla tulisi turskaa tuolla aikavälillä ilman treidauskustannuksiakin (tässä demo mun repossa). Tuo ylin sininen käppyrä mielestäni on tuo “tulos”, ja aikaväli 2017-2021.

Edit. vastaan itselleni. Luin todella huonosti, eihän tuo demo olekaan macd, vaan moving average cross-over. Noloa.
Edit2. nyt korjattu SMA:t EMA:ksi, eli on nyt MACD. “The MACD is calculated by subtracting the 26-period exponential moving average (EMA) from the 12-period EMA.” Mutta ei tämä silti anna juurikaan hyvää tulosta.
Edit3. Vielä vaihdoin alkukassan 50 taalaan selvyyden vuoksi. Tämä Backtrader näillä asetuksilla jättää viimeisen ja ehkä tuottoisimman treidin ostamatta.

Kokeile hyperparametrien löytämistä Bayesin optimisaatiolla (Bayesian optimization with Gaussian process) niin ei tarvii venkslata niitten asetuksien kanssa. Skopt (scikit optimization) paketti on aika helppo oppia. Niin, ja tuota tekniikkaa voi käyttää ihan minkä tahansa funktion parametrien löytämiseen.

1 tykkäys

Taidat tuossa treidata ihan puhtaasti lyhyen ja pitkän EMAn crossovereita. Kokeileppa tätä yleisemmin käytettyä MACD:n ja sen signal linen leikkausta. Eli MACD:stä lasketaan vielä erikseen esim. 9 päivän EMA, ja treidit tehdään tämän MACD:n ja sen signal linen crossovereiden pohjalta.

Edit. On kyllä sekavan näköinen omaan silmään tuo backtraderin kuvaaja. Ovatko nuo pallurat euromääräisiä vai prosentteja, ja huomioiko se kuluja missä määrin automaattisesti?

2 tykkäystä

Minä lopetin koneoppimisharjoitukset ennen kuin ehdin kunnolla edes aloittaa. Jostain syystä mukamas ei ollut aikaa uppoutua tuohon. Silti mietin miksi kaikki tuntuu lähtevän liikkeelle omilla kikkareillaan treidaamaan osakemarkkinaa? Medallion Fundillakin meni ainakin vuosikymmen ennen kuin sai osakemarkkina algot tuottamaan. Sitä ennen tekivät hyvän tilin valuuttakaupalla ja hyödykkeillä. Tuosta heräsi ajatus, että ehkä “amatöörinkin” olisi parempi aloittaa sieltä.

Allekirjoittanut harjoitellut kryptoilla ihan sen takia, että kulut ovat äärimmäisen pienet, volaa löytyy paljon, APIt ja avoimen lähdekoodin kirjastot sillä saralla ovat laajat, ja kryptot tuntuvat liikkuvan varsin paljon tekniseltä / sentimenttipohjalta vs osakkeet. En tiedä, miten valuuttakauppojen verotus menee, mutta eikös näissä skeneissä ole vähän sama kuin CFD:illä, ettei tappioita voi vähentää, mikä tekee hommasta täysin kannattamatonta?

En ole jaksanut ihan maaliin asti viedä algojani, mutta perstuntuma on se, että ihan jo pelkkää Inderesin foorumin konsensusta apinoimalla ja juuri jollain MACD:llä saattaisi päästä parempiin tuloksiin kuin omilla tunnepohjaisilla kikkailuillani. Liekö pohjoismaiset markkinat sen verran epälikvidit, että täältä saattaisi hyvinkin löytyä väärinhinnoiteltuja tuotteita, esim. puoli-ilmaiset Efectet, Verkkokaupat koronan alla olisi jokin algo saattanut poimia helpohkosti. Itsellä ei uskoa hirveesti ole algopohjaiseen päiväkauppaan sattuman vuoksi, mutta pidemmällä aikavälillä tuntuu olevan varsin mukava apuväline etenkin maaliskuun koronadipin kaltaisissa tilanteissa.

4 tykkäystä