Koneoppiminen ja algoritmit treidauksen tukena

No niinpä joo. Enpäs siis osannut MACD-treidausta. Korjasin (Github).Tämä kuva näyttää enemmän siltä kuin sinunkin ja sain Backtraderin suorittamaan strategiaa All-In. Mutta edelleenkään tulos ei mairittele. Näyttääkö sinusta ok:lta?

Kaiken lisäksi, kun laitan signaalit toisin päin, eli buy->sell ja sell->buy, tulos on parempi:

Jos nyt ei ole enää suuria virheitä tässä, johtopäätökseni on, että tuottoa tulee siksi, että algoritmi holdaa välillä, ja kaupankäynti lähinnä aiheuttaa tappiota.

Edit. Vielä kysymykseesi: pallurat taitaa olla dollareita luulen. Kulut on defaulttina 0 käsittääkseni, mutta tuolta saa asettaa esimerkiksi slippage ja commission -arvoja. Tosin niissä on todella paljon erilaisia säätöjä vastaamaan realimaailmaa.

Näyttää äkkiseltään ja koodin puolelta ihan rationaaliselta. Ja tuottokin on maalaisjärjellä ajateltuna ihan looginen - holdi olisi tässä tilanteessa tuonut sen vajaat 100 pinnaa tuottoa, ja nuo käyrät jäivät 25 ja 50 pinnan tuntumaan (miinus kulut). Toisaalta tuommoinen 6-12 % vuosituotto ei ole nähdäkseni mikään katastrofi, kun katsoo tuota käyrää ja huomioi ajanjaksolle osuneet negarit ja koronadipit. Siinä olisi heikompi käsi tunnepohjaisesti saattanut jo myydä useampaan otteeseen.

Pelkkä MACD:hän ei ole mikään oikotie onneen ja monella tickerillä saa toki negatiivisiakin tuottoja aikaiseksi. Voi hyvinkin olla, että omassa skriptissäni oli perus MACD:n ja signal linen crossoverin ohella muutamia muitakin tsekkereitä - kuvaajat viime vuodelta. Varsin tarkka pyrin olemaan, ettei tulisi lookahead-biasta, ja useimmiten testannut kaupan ajoitusta siten, että laskenut signaalin avaushinnasta, ja tehnyt kaupat päivän sulkuhintaan, tai laskenut signaalin sulkuhinnasta ja tehnyt kaupat seuraavan päivän avaukseen.

Kun heittää tuon sun skriptin koko aikavälille, niin näyttäisi, että satanen pyörähtäisi 6600 taalaan, eli 66-kertainen tuotto. Tiedä sitten, paljonko olisi ollut kumulatiivinen prosentuaalinen tuotto, jos luopuisi tuosta all-in-strategiasta ja summaisi pelkkiä treidien tuottoprosentteja. Jonkun analyzerin tuohon backtraderiin varmaan saa mukaan.

Itse, kun pyöräytin pikaisesti käsin skriptin, joka laskee pelkän MACD:n ja signal linen crossovereita ja summaa yksittäisten treidien tuottoprosentit ilman minkäänlaisia kumulatiivisia vaikutuksia, niin tuotto koko ajalta näytti olevan vain 300 pinnan luokkaa. Kaukana ollaan siis ensimmäisistä ploteistani, mutta edelleenkin tosin näkisin positiivisena puolena, että näinkin simppeli strategia näyttää selviävän dotcom-kuplan kaaoksesta varsin kuivin jaloin. Jos epäonnekkaasti vuonna 2000 olisi lähtenyt sijoittelemaan Inteliin, niin ei edelleenkään olisi omillansa. Jos taas samana vuonna olisi antanut MACD:n haltuun kaupanteon, olisi omillansa jo 2002/2004, ja sen jälkeen tasaiselle voittouralle. Tämän yhden datapisteen pohjalta näyttäisi, että MACD pärjää varsin kohtalaisesti bear-markkinassa, kun taas kovassa härkämarkkinassa saattaa jäädä holdaajien jalkoihin kikkailuillaan (toisaalta lienee syytä ottaa huomioon ne treidaamisen kulut ja toisaalta holdaajien suuremmat markkinariskit).

Näissä kuvaajissa hieman hämää, miten nuo osto- ja myyntimarkkerit piirretään ihan miten sattuu.

2 tykkäystä

Tuo saattanee johtua nyt siitä, että käyrä piirtyy closen mukaan, mutta treidaus tapahtuu open:ssa.

Mä nyt sitten @Alfons_Knautmauer :n sparraamana olen backtestannut lisää tuota algoritmiani (käyttäen omaa koodia). Ajoin 2018-1 ja 2021-2 väliltä käyttäen 40 potentiaalista firmaa, joista Nordnetista löytyy minifutuureja tai sertifikaatteja. Tein niin, että opetin joka firman erikseen, sitten treidasin tällä aina seuraavan kuukauden ja tallensin tulokset. Ajo kesti yli 2 vuorokautta kahdella Azuren nc6-gpu-virtuaalikoneella. Nuo firmat on siis pääosin ruotsalaisia, mutta myös muutama FI,NO, DK mukana.

Tässä näkyy nyt algoritmin ennustuksen onnistumisprosentit ja vertailuna Tukholman indeksin kuukausittainen vaihtelu.


Noin 61% lineaarinen korrelaatio on näillä käyrillä.

XY-graafina näyttää tältä:


Ei paljon ole trendikäyrä 50% yläpuolella tässä. 51.1% näyttää kuukausittainen onnistumisen keskiarvo.

Kuukausien ja firmojen histogrammit (ennustuksen onnistumisprosentti):


No sitten oikea treidaus oikealla datalla (aloitin vähän vuodenvaihteen jälkeen, tammikuu jäi vähän vajaaksi harjoitellessa):

Ja Nordnet näyttää tältä:


Tässä siis nyt mukana myös maaliskuun eka viikko.
Treidaan kaksi kertaa viikossa. Kahdella AOT-tilillä on kummallakin n. 4000 €, josta on vedossa koko ajan noin 15-20 noin 200€ lappua. Firmat, joista vedot tehdään, valitsen aina sen päivän Nordnet-hintojen mukaan, pyrkien karsimaan liian isot spreadit. Algoritmi opetetaan kullekin lapulle erikseen aina kyseiseen päivään asti.

Miten oikeat treidit ovat päättyneet:

Mielestäni huoleni siitä, että algoritmi treidaa hyvin siksi, että kurssit ovat olleet nousussa, on aiheellinen. Jos maaliskuu menee etupäässä pakkasella, niin tulee olemaan mielenkiintoista, miten käypi.

Edit. Täydensin vähän tekstejä.

8 tykkäystä

Tähän vielä muutama oppimani asia minifutuureilla ja sertifikaateilla treidaamisesta:

  • Ei kannata tehdä liian pientä vetoa, 200€ on minimi, koska jos lapun hinta laskee alle 100€, maksat sen myynnistä 3€ lisää.
  • Toinen juttu on, että kun lapun arvo laskee, niin sen spread tuppaa kasvamaan. Eli tappiollisen lapun myynnistä joutuu maksamaan sitäkin kautta enemmän.
  • Nordnetista löytyy vain noin 15 -20 firmaa kerrallaan, joiden minifutuureja tai serttejä kannattaa treidata. En treidaa, jos kriteerit ei täyty, eli 51,5% onnistumis-%:lla pitää pysyä vielä omillaan. Välillä siis jää AOT-tilille käteistä (mikä toki vähentänee korkomenoja).
  • “Tuoreistan” yhden AOT:n kerran viikossa tiettynä pävänä siten, että kaikkien lappujen arvo pysyy noin 200€:ssa ja siten riski ja kulut paremmassa hallinnassa:
    • Jos lappu on yli 100€ voitolla, mutta algo käskee holdaamaan, myyn voitot niin että lapun arvoksi jää noin 200€.
    • Jos lappu on pudonnut alle 180€, myyn sen pois joka tapauksessa, ettei vaan laskisi alle 100€ ja ettei sen spread kasva liikaa. Ostan sitten parempaa tilalle algon suositusten mukaan.
  • Kun koko ajan on lappuja sisällä, joudun maksamaan korkoa, kun myyntien tulot on vielä tilittämättä (T+2). Mulla on nyt toinen kauppapäivä ollut perjantai, kun se sopii omaan elämään paremmin, enkä tätä ajatellut, mutta korkojen kannalta ei kannattaisi jättää rahoja makaamaan viikonlopun yli (kaksi ylimääräistä päivää).
  • Spreadit tuntuu olevan suuremmat aamuisin ja illalla jenkkipörssien aukeamisen aikoihin. Pitää miettiä, pystyisikö järjestämään oman työpäivänsä niin, että voisi keskipäivällä vähän treidailla ja optimoida spread-kuluja. Tätä kyllä pitää vielä tutkia tarkemmin, että miten noiden spreadien kanssa oikeasti on.

Ehkä näistä on jollekin iloa :slight_smile:

6 tykkäystä

Taatusti linkattu jotenkin markkinan volatiliteettiin. Yllättäen pörssin avautuessa ensimmäinen vartti on yleensä ns. vauhdikkainta aikaa kun oikeasti otetaan erää siitä miten paljon lappujen arvot ovat yön yli muuttuneet. Ja jos vauhtia on liikaa, spreadien kasvatuksen sijaan laidat katoavat kokonaan kunnes ollaan hieman rauhoituttu. Ikävää jos vauhdikas liike on ns. väärään suuntaan omalta kannalta.

1 tykkäys

Joo, näin olen sen päätellyt myös. Tuosta voisi tehdä pienen koodin pätkän, ja keräillä statistiikkaa jonkun verran, että miten nuo spreadit käyttäytyy oikeasti.
Toisaalta on niin paljon muutakin, mihin voisi seuraavaksi kehittää koodia :slight_smile:

On iloa ja kiinnostavia huomioita ja varsinkin näissä suuria kauppamääriä koskevissa strategioissa kulut on hyvin merkittävässä roolissa tuotossa/tappiossa. Minkälainen tuntuma on verrattaessa korko- ja spreadkuluja sertien, minifutuurien ja unlimited turbojen (ul) välillä?

1 tykkäys

Mielenkiintoinen ketju. Onkohan tällä hetkellä mitään rajapintaa, jonka kautta voisi tehdä ostoja suomalaisten yritysten osakkeista? Nordnetilta vastattiin, etteivät enää ota uusia käyttäjiä nExt API:in.

  • Spreadit tuntuu olevan suuremmat aamuisin ja illalla jenkkipörssien aukeamisen aikoihin. Pitää miettiä, pystyisikö järjestämään oman työpäivänsä niin, että voisi keskipäivällä vähän treidailla ja optimoida spread-kuluja. Tätä kyllä pitää vielä tutkia tarkemmin, että miten noiden spreadien kanssa oikeasti on.

Onko noista tarpeeksi intraday-dataa, että voisi piirtää jonkin kaavion, miten nuo spreadit käyttäytyvät kellonajan/kohteen mukaan? Onko markkinatilanteessa ehkä muitakin tekijöitä, jotka vaikuttavat noihin spreadeihin?

Tuoteen omat korkokulut näkyy suoraan tuotteen hinnassa, joten niitä on vaikea analysoida. Muuten peruskorko pitäisi olla tuotteissa sama. Normaali kaupankäyntikorko, kun ostat uutta ennen edellisen myynnin selvityspäivää, on kaikissa tuotteissa sama, on kyse osakkeista tai minifuutureista tai serteistä.
Lisäksi voi tulla korkokuluja valuuttatilien kanssa, jos vahingossa ostaa SEK-tuotteita enemmän kuin SEK-tilillä on saldoa, esimerkiksi.
Itse tuotteista sitten sertifikaatit on tuottoisampia yli päivän holdissa, jos kohdeosake liikkuu samaan suuntaan. Minifutuurit on tuottoisampia, jos kohdeosake heiluu edestakaisin. Osakkeilla keskimäärin sertifikaatit ovat hieman parempia 5 päivän ajalla, eli osakkeiden hinnan muutoksissa on keskimäärien hieman useammin joku trendi, kuin että se sahaisi ylös-alas.
Spreadeista tuotteiden välillä näppituntuma on, että saman kohdeosakkeen kyseessä ollen joku päivä sertit on edullisempia, joku toinen päivä taas minifutut. Ja tämä voi myös olla niin, että jonkun kohdeosakkeen kohdalla tilanne on päinvastainen kuin toisen kohdeosakkeen tilanne.
Ostettaessa voit valita tuotteen edullisen spreadin mukaan, mutta myydessäsi sinulla on se lappu itselläsi ja sen spread-kustannus on se, minkä Nordnet/Nordea sulle tarjoaa.

Analysoinpa hieman perjantain 5.3.2021 klo 16.00 (noin) tilannetta käppyröin.



Mutta nämähän ei nyt oikeastaan kerro vielä mitään, koska luonnollisesti mitä suurempi vipu, sitä suurempi spread. Katsotaas.




Mutta sitten kaupankäyntiin vaikuttaa tietysti se, miten volatiili kohdeosakkeen hinta on. Eli, jos kohdeosake on joku Sampo, jonka hinta liikkuu hyvin vähän, ei siitä ole odotettavissa merkittävää tuottoa isolla vivullakaan. Näin ollen spreadin pitäisi olla todella alhainen, jotta kannattaa kauppaa käydä. En ole Sampoa paljon treidaillut.


Nordean hinta ei ole niin vakaa, mutta silti jostain syystä sille on jopa pienempiä spreadeja tarjolla. Tätä treidaan.

Tässä excelissä on kohdeosakkeiden hintojen vaihteluiden keskiarvoja 5 päivän jaksoissa aikavälillä 1.1.2018-5.3.2021.
kohdeosakkeiden hintojen vaihteluita 5.3.2021.xlsx (14,5 Kt)

Tämä hinnan vaihtelu, mitä käytän, mittaa periaatteessa volatiliteettia, mutta lasken sen eri tavalla siis.
Potentiaalinen tuotto-odotus on vipu kertaa hinnan muutos, ja kustannus on spread. image

Esimerkkinä AstraZeneca:
image

Lopuksi vielä histogrammi kaikista minifutuuri- ja sertifikaattituotteista, kohde-etuutena osake. Vihreää tuotetta treidaamalla, jos arvaat/tiedät vähintään 52% todennäköisyydellä oikean kohdeosakkeen hinnan suunnan (5 päivän holdi), teet keskimäärin voittoa.


(pahoittelut idolini Bill Gatesin puolesta surkeasta MS Excel-tuotteesta. Histogrammin 0-kohdassa laskennan tarkkuus prakaa, ja kaikkein oikeanpuolimmaista pylvästä ei pysty värittämään vihreäksi.)

@jops, tervetuloa foorumille, toivottavasti osasin vastata edes sinne päin. Edit: Unlimited turboja on sen verran vähän osakkeissa, että en ole niitä käyttänyt.
@VainFiilis Jos vain saan aikaiseksi, kerään ensi viikolla vähän intraday-spread-dataa osakejohdannaisista.
@hillopurkki ei ole tiedossani, että kuluttaja-asiakkaille olisi apeja tarjolla Suomessa. Kryptoja voi treidata ja sitten jenkeistä löytyy, mm. Alphavantage. IB:llä on api. Itse pitää kikkailla api-kutsujen tai Puppeteerin kanssa, jos haluaa kokeilla. Mä teen niin, että algo avaa tuloksena linkin Nordnetin sivulle oikeaan tuotteeseen, jossa voin sitten kaupan tehdä. Tuossa kaupankäynnissä on kuitenkin vielä sitten omat konstinsa ohjelmoitavaksi, koska joskus hinta karkaa eikä kauppa mene läpi, joskus spread onkin yhtäkkiä laajentunut tai laidat kadonneet kokonaan. Ja sitten vielä valuuttatilien hallinta.

Edit. AstraZeneca-esimerkkiin oli pujahtanut väärä graafi. Samalla korjasin siihen liittyvää tekstiä.
Edit2. En näköjään pysty keskiyön jälkeen ajattelemaan järkevästi tuon AstraZenecan graafin kanssa. Enhän mä voi jälkikäteen muuttaa hinnanvaihtelun keskiarvoa volatiliteetiksi vain neliöimällä lopputulosta :smiley: Vaihdan tuon graafin järkeväksi kunhan pääsen taas sille koneelle, jolla nuo datat on.

7 tykkäystä

Toinen viestini tälle foorumille reilun vuoden seurannan ja lukemisen jälkeen. Erittäin hyvää, mielenkiintoista ja hyödyllistä työtä sekä laadukasta analyysiä. Valitettavasti oma kompetenssi ei riitä argumentointiin. Jatka samaan malliin.

3 tykkäystä

Oli näköjään tullut “pieni” virhe keskihajonnan visualisointiin, joka on nyt korjattu. Päivämäärät pitäisi olla suunnilleen kohdillaan ja muutama toteutunut kurssitieto lisätty. Viimeisin päätöskurssi viimeisenä tietona, mutta määräytyy oikeasti vasta huomisen perusteella.

Mitä sun algo tekee?
Miten generoit tuollaisen ennusteen?

Suunnileen tällaista

-Kerätään yhtiöistä tarvittava tilinpäätöstieto ja kurssitiedot
-Kohdistetaan tilinpäätöstiedot oikeille päiville
-Lasketaan päivittäiset tunnusluvut
-Jokaiselta päivältä tunnetaan tunnusluvut ja tiedetään myös miten kurssi on tämän päivän jälkeen kehittynyt
-Jos käytetään vaikka kymmentä tunnuslukua, niin jokaiselle päivälle muodostetaan esim. 200 tunnusluvuiltaan lähimpänä olevaa vastaavuutta, jotka kuvaavat tuottoa parhaiten(Koneoppiminen).
-Jokaisen vastaavuuden avulla lasketaan eri aikajaksoille keskimääräinen kurssikehitys ja keskihajonta.

@Kelpieracer kiitos erinomaisesta kuluanalyysistä. Miten sait kaivettua nuo spreaditiedot? Tuo spreadien muuttuminen oston ja myynnin välillä on hyvä huomio ja vaikeuttaa mallien hyvyysarviointia. Itsekin tulee pikkuhiljaa seurattua, mutta muuttuvatkohan spreadit molempiin suuntiin vai aina epäsuotuisaan suuntaan?

Mistä @Ripelein saat haettua datan ja miten olet testannut malliasi? Jos olet testannut, niin minkälainen malli/ennuste on riittävän hyvä, että sitä lähtee koettamaan?

Minulla on harrasteprojektina sovellus, jossa olisi tarkoitus näyttää realiaikaista kurssidataa. Onko kenelläkään suositella mitään API:a, jolla saisi dataa haettua? Aluksi oli käytössä AlphaVantage, mutta näemmä ei ainakaan ilmaiseksi tarjoa mahdollisuutta reaaliaikadataan, vaan pelkästään päivällä viivästettyyn.

Data on tilinpäätöstietojen osalta näpytelty tiedotteista. Kurssitieto vanhemman tiedon osalta Historialliset kurssitiedot - osakkeet - Nasdaq (nasdaqomxnordic.com) ja uudemmat kurssitiedot Ohjelmalllisesti Yahoon Financesta. Jostain syystä kaupankäynnin päivämäärissä on eroja joita olen manuaalisesti korjannut yhdenmukaiseksi vanhemmissa tiedoissa.

Olen tehnyt ennusteista valintoja eri perusteilla ja koonnut portfolion muutamalla erilaisella tavalla. Apuna käytän muutamaa parametria, jolloin erilaisia simulaatioita syntyy 15 600. Simuloinnin ajanjakso 2002-2020. Yhtiöitä mukana vasta muutama, mutta on tarkoitus alkaa lisäämään määrää. Ihan lupaavalta systeemiltä vaikuttaa, mutta edessä vielä jonkun verran muutoksia, testausta ja tarkastamista. Paperitreidaaminen on nyt aloitettu ja oikealla rahalla siiten joskus.

1 tykkäys

Onko kukaan testaillut esim. MACD:tä tms. suomalaisiin pienyhtiöihin? Joskus mietiskelin että indikaattorit saattaisivat toimia paremmin tehottomilla markkinoilla, mutta en ole saanut aikaiseksi back-testata tätä hypoteesia.

Kiitokset kaikille jotka ovat jakaneet ajatuksiaan tänne - erittäin mielenkiintoista luettavaa.

No tässä esimerkiksi Gofore. Tuossa ei juuri sekuntia kauemmin kone tuota laske.


Täältä löytyy sorsat, jos haluat itse kokeilla.
Voin myös ehkä jeesata alkuun jos on mielenkiintoa hiukan Pythonia opiskella.
Itsekin enemmän C#-ihmisiä.

1 tykkäys

Nordealla on tällainen api.

https://developer.nordeaopenbanking.com/app/products/fx-trading

Onko kukaan kokeillut?