Osinkotuottomenetelmän algoritmi

Tässä kirjoituksessa käydään läpi osinkotuottomenetelmän laskennan algoritmia. Menetelmässä osakkeen hintatasoja peilataan osinkojen kautta ja tarkoituksena on määrittää osakkeelle ns. hintaputki, jonka reunoille ostot ja myynnit ajoitetaan.

Ideana on hyödyntää osakkeiden lyhyen aikavälin hintaheiluntaa. Vaikka menetelmä on enempi teknistä analyysiä, niin silti sijoittamisen peruspilarina ovat aina yritykset, jotka pystyvät pitämään hyvää tuloksentekokykyä ja nousevaa osinkotrendiä.

Algoritmin laskemat hintarajat ovat signaaleja tarkemmalle yritysanalyysille – eivät siis osto/myyntisignaaleja.

Joulukuisessa kirjoituksessa esiteltiin ideatasolla osakkeiden tavoitehintojen laskentaa osinkotuottoja käyttämällä (katso kirjoitus Tavoitehinta osinkotuottoa käyttäen).

Huomioi tämä ennen lukemista

Tässä kirjoituksessa käydään läpi tavoitehinnan laskennan algoritmia. Varoitellaan vielä heti kärkeen, että kirjoitus on varsin haastava ja sisältää matematiikkaa, logiikkaa ja ohjelmakoodia, joten jos se ei ole ominta kiinnostuksen aluetta, niin tämän kirjoituksen voi vain silmäillä läpi.

Lisäksi algoritmi ei perustu mihinkään tutkimukseen tms., vaan on luotu yrityksen ja erehdyksen kautta. Eli tieteellisen tarkkaa tulosta ei tämä algoritmi tuota, mutta jos se on edes niin sanotusti hehtaarilla, niin olen tyytyväinen. Jos kuitenkin löydät siitä kehittämiskohteita, niin toki ideoita otetaan vastaan.

Algoritmin laskemat hintarajat ovat signaaleja tarkemmalle yritysanalyysille – eivät siis osto/myyntisignaaleja.

Algoritmin perusidea

Kirjoituksessa Tavoitehinta osinkotuottoa käyttäen esiteltiin osinkotuottomenetelmän ideaa ja käytiin läpi case-esimerkkeinä Sammon ja Ericssonin parin vuoden kurssihistoriaa.

Osinkotuottomenetelmän ideana on siis katsoa sopiva ostohetki hyvän yrityksen osakkeelle. Menetelmä ei siis kerro yhtiön arvoa, kuten nettonykyarvo, vaan se kertoo osakkeen hintatason suhteessa menneeseen noin 6 – 7 kuukauteen.

Menetelmässä määritellään ns. hintaputki, jonka sisällä osakkeen osinkotuotto on heilahdellut. Tämän jälkeen sijoittaja voisi hakea tilanteita, missä hän voisi ostaa osakkeen korkean osinkotuoton (esim. 4,5 %) kohdalla ja vastaavasti myydä sen alhaisen osinkotuoton (esim. 3,5 %) kohdalla. Esimerkkiluvuilla 4,5/3,5 sijoittaja saisi noin 28 prosentin tuoton ja osakekurssin nousua odotellessa, hän saisi 4,5 prosentin osinkotuottoa, joka vielä kasvaisi vuosittain. Siksi menetelmän kulmakivenä ovat hyvät osinkoyhtiöt.

kelluva-putki

Haasteena menetelmässä on määrittää tämä hintaputki – varsinkin, kun julkistettavat ja irtoavat osingot luovat epäjatkuvuuskohtia putkeen. Sitä seuraavassa esiteltävä algoritmi pyrkii korjaamaan.

Keskeisimmät parametrit algoritmille

  • Osinkoennusteet arvioidaan 12 kuukautta eteenpäin korottamalla edellistä normaalia osinkoa +8 prosentilla.
  • Mikäli yritys maksaa osingon useamman kerran vuodessa, kuten USA-yhtiöt usein 4 kertaa vuodessa, niin tällöin oletetaan, että osinko pysyy samana 4 kertaa, kunnes sitä seuraavia osinkoja nostetaan 8 prosentilla. Jos 4 viimeisintä osinkoa ovat olleet 0,20 / 0,20 / 0,22 / 0,22, niin tämän jälkeen ennusteena on 0,22 / 0,22 / 0,2376 / 0,2376. Eli 0,22 osinko nousi 8 prosenttia 0,2376.
  • Lisäosingot huomioidaan vain tavoitehinnan (putken yläreuna) laskennassa. Sen sijaan huomiohinnan laskennassa sitä ei suoraan huomioida. Algoritmi huomaa vain alentuneen osakkeen hinnan, ja käyttää sitä laskennassa.
  • Jos osinko nousee yli 10 prosenttia, niin laskennassa se tasataan 10 prosentin tasolle. Näin siksi, että monesti isot osingon korotukset ovat kertaluontoisia. Ja jos ne ovat pitkäikäisiä, niin silloin yhtiön osinkotuottoprofiili nousee usein alhaiselta (n. 2 %) ylemmälle tasolle (n. 4 %).

Laskennassa katsotaan 140 pörssipäivää eli noin 6 – 7 kuukautta. Tämä ajanjakso jaetaan osiin 1) osingon julkistuksen ja 2) osingon irtoamisen hetkillä. Jos 140 päivän jaksolle osuu useampi tapahtuma, niin jokainen jakso huomioidaan. Kultakin jaksolta kerätään

  • jakson pituus päivinä (muuttuja n)
  • käytetty osinkoennuste tai varsinainen osinko (osinko)
  • jakson osakkeen alin ja ylin hinta (alinhinta/ylinhinta)
  • hintakorjauskerroin

Hintakorjauskerrointa käytetään korjaamaan eri aikajaksojen hintaputkien rajat vastaamaan toisiaan. Hintakerroin saadaan kun uusimman aikajakson osinko tai osinkoennuste jaetaan edellisen jakson osingolla.

Mikäli osinko laskee, niin laskennassa käytetyn korjauskertoimen ansiosta huomiohinta laskee. Mikäli osingon maksu keskeytyy, niin silloin huomiohinta laskee nollaan. Molemmissa tapauksissa huomiohinta toipuu 140 päivän kuluessa vastaamaan alinta hintaa 140 päivän ajalta. Itse laitan nollaosingon maksajan huomiohinnan nollille eli en kelpuuta sitä salkkuuni.

Algoritmin hyödyntäminen

Algoritmilla siis määritetään huomiohinta ja tavoitehinta eli hintaputken ala- ja yläreuna. Nämä eivät ole osto- tai myyntisignaaleja!

Itse käytän näitä eräänlaisena ilmanpuntarina. Jos kaikki yhtiöiden pörssikurssit ovat lähellä hintaputken ala- tai yläreunaa, niin silloin markkinoilla ollaan osto- tai myyntihinnoissa.

Jos kaikki yritykset ovat lähellä yläreunaa, mutta yksittäinen yritys on alareunan tuntumassa, niin epäilys herää: ”miksi tämä yritys on heikko, kun kaikki muut ovat korkeuksissa”.

Jos käytän ostoon huomiohintaa, niin silloin

  • lasken uuden huomiohinnan 6 prosenttia alemmaksi entisestä huomiohinnasta tai ostohinnasta (kumpi oli alempi). Jos osake laskee tähän uuteen huomiohintaan, niin pohdin joko lisäoston tekemistä taikka tappioiden rajaamisen tähän 6 prosenttiin. Jos ostan lisää, niin jälleen uusi huomiohinta on 6 prosenttia alempana ja niin edelleen. (10,00 -> 9,40 -> 8,84 jne)
  • oston hetkellä kirjaan tavoitehinnan ylös. Näin siksi, että tavoitehinta heilahtelee ajan kuluessa, joten haluan tavoitella ostohetken tavoitehintaa – en nykyhetken tavoitehintaa. Kun tavoitehintaan joskus päästään, niin pohdin sitä, että onko aika oikeasti myydä, vai onko yrityksen toiminnassa tapahtunut muutos parempaan, joka perustelisi osakkeen pitämisen.

Algoritmi

Ylimmän hinnan eli tavoitehinnan määrittäminen

Katsotaan koko 140 päivän aikajaksolta korkein osakkeen hinta ja vähennetään tästä aikajakson aikana mahdollisesti irronneet lisäosingot (maksimihinta). Lasketaan päivillä ja hintakorjauskertoimella painotettu keskiarvo eli

tavoitehinta = SUM(n * hintakorjauskerroin * maksimihinta) / 140

Alimman hinnan eli huomoihinnan määrittäminen

Huomiohinnan laskenta voitaisiin tehdä samalla idealla eli hakemalla koko jakson alin hinta ja laskemalla painotettu keskiarvo. Vaikeutena tässä on se, että osakkeen hinta laskee irronneen osingon verran, jolloin huomiohinta alittuisi monesti juuri osingon irtoamisen hetkellä. Ehkä tavoitehinta pitäisi laskea tällä huomiohinnan laskennan menetelmällä, jos vain yhtä laskentatapaa haluaisi käyttää.

Seuraava pseudo-koodi kuvaa laskentaa

data[]: {
   n, osinko, alinhinta, ylinhinta, hintakorjauskerroin
}
//järjestä taulukko uusimmasta vanhimpaan
data = sort.desc(data) 

minhinta = min(data::alinhinta)
for (i = 0 to data.length-1) {   
  hintakorjausA = data[i].hintakorjauskerroin   
   vertailuhintaA = data[i].alinhinta * hintakorjausA   
   if (lastitem(i)) {      
      if (vertailuhintaA > minhinta) {
       data[i].alinhinta = minhinta
      }
     exit for
   }
  
  hintakorjausB = data[i+1].hintakorjauskerroin 
  vertailuhintaB = data[i+1].alinhinta * hintakorjausB
  if (vertailuhintaB > vertailuhintaA) {
    data[i+1].alinhinta = data[i].alinhinta / hintakorjausB
  }

  if (data[i].alinhinta > minhinta) {
    data[i].alinhinta = minhinta
  } else {
    minhinta = data[i].alinhinta
  }
}

Eli käydän kerätty data läpi uusimmasta vanhimpaan ja asetetaan alinhinta, mikäli tietyt ehdot täyttyvät. Lopuksi lasketaan

huomiohinta = SUM(n * hintakorjauskerroin * alinhinta) / 140

Esimerkki

Esimerkki valaisee algoritmia parhaiten eli jos 140 päivän jakso on jakautunut 3 osaan:

  • 20 päivää ennen osingonjulkistusta (vanha osinko 0,92 euroa joten osinkoennuste 0,9936 euroa, jakson alin/ylin hinta 24,00/ 26,00 euroa)
  • 40 päivää osingonjulkistuksesta osingon irtoamiseen (julkistettu osinko 1,00 euroa, jakson alin/ylin hinta 22,50 / 25,00 euroa)
  • 80 päivää osingon irtoamisen jälkeen (uusi osinkoennuste 1,08 euroa, jakson alin/ylin hinta 23,50 / 27,00 euroa

Tästä saadaan taulukko, joka on sortattu uusimmasta vanhimpaan hetkeen.

n   osinko alinhinta ylinhinta hintakorjauskerroin
80  1,0800   23,500    27,000    1,000
40  1,0000   22,500    25,000    1,080
20  0,9936   24,000    26,000    1,087  (=1,08/0,9936)

Tavoitehinta

Jakson maksimihinta on 27,00 euroa, joten voidaan laskea

tavoitehinta = 
  (80 * 1,000 * 27 
  + 40 * 1,080 * 27 
  + 20 * 1,087 * 27) / 140 = 27,95 euroa

Tavoitehinnaksi saadaan siten 27,95 euroa

Huomiohinta

Yllä olevassa taulukossa on 3 riviä, joten algoritmi tekee 3 kierrosta. Katsotaan tässä tilanne kierros kierrokselta.

Kierros 1:

minhinta = 22,50
hintakorjausA = 1,00
vertailuhintaA = 23,50 * 1 = 23,50

if (lastitem(0)) ei toteudu

hintakorjausB = 1,08
vertailuhintaB = 22,50 * 1,08 = 24,30
if (24,30 > 23,50) { toteutuu
  data[1].alinhinta = 23,50 / 1,08 = 21,759
}

if (23,50 > 22,50) { toteutuu
  data[0].alinhinta = 22,50
}

Kierroksen 1 jälkeen taulukko näyttää tältä. Vain alinhinta tiedot muuttuvat

n   osinko alinhinta ylinhinta hintakorjauskerroin
80  1,0800   22,500    27,000    1,000
40  1,0000   21,759    25,000    1,080
20  0,9936   24,000    26,000    1,087  (=1,08/0,9936)

Kierros 2:

minhinta = 22,50
hintakorjausA = 1,08
vertailuhintaA = 21,759 * 1,08 = 23,50

if (lastitem(1)) ei toteudu

hintakorjausB = 1,087
vertailuhintaB = 24,00 * 1,087 = 26,088
if (26,088 > 23,50) { toteutuu
  data[2].alinhinta = 21,759 / 1,087 = 20,017
}

if (21,759 > 22,50) { 
  ei toteutuu  
} else {
  minhinta = 21,759
}

Kierroksen 2 jälkeen taulukko näyttää tältä ja minhinta muuttui 21,759.

n   osinko alinhinta ylinhinta hintakorjauskerroin
80  1,0800   22,500    27,000    1,000
40  1,0000   21,759    25,000    1,080
20  0,9936   20,017    26,000    1,087  (=1,08/0,9936)

Kierros 3:

minhinta = 21,759 (tämä muuttui edellisellä kierroksella)
korjauskerroinA = 1,087
vertailuhintaA = 20,017 * 1,087 = 21,618 
korjauskerroinA = 1,087

if (lastitem(2)) { toteutuu
   if (21,618 > 21,759) ei toteudu
    
   exit for 
}

Kierros 3 ei muuttanut yllä olevaa taulukkoa. Nyt voidaan laskea huomiohinta painotetulla keskiarvolla:

huomiohinta = 
  (80 * 1,000 * 22,50 
  + 40 * 1,080 * 21,759 
  + 20 * 1,087 * 20,017) / 140 = 22,68 euroa

Näin saatiin laskettua huomiohinnaksi 22,68 euroa ja tavoitehinnaksi 27,95 euroa. Tässä alareunasta yläreunaan on matkaa 23,2 prosenttia. Itse teen manuaalisen korjauksen, jos etäisyys on alle 20 prosenttia. Lasken sen tavoitehinnasta eli tässä se olisi 27,95/1,20 = 23,29 euroa (esimerkissä korjaus ei ole tarpeen).

Tavoite oli siis…

Esimerkissä viimeisen 80 päivän aikana osakkeen hinta on alimmillaan ollut 23,50 euroa ja ylimmillään 27,00 euroa. Eli tänä aikana osakken hinta on liikkunut nyt laskettujen raja-arvojen sisäpuolella. Huomaa, että kun aika kuluu, niin myös raja-arvojen arvot muuttuvat.

Tavoite on siis ostaa osaketta, kun osakkeen hinta on ”putken alareunassa” ja myydä, kun hinta on ”putken yläreunassa”. Tuotto on vähintään 20 prosenttia, jota odotellessa saan nousevaa osinkotuottoa. Algoritmi pyrkii tasaamaan putken epäjatkuvuuskohdat.

Advertisements

1 vastaus artikkeliin “Osinkotuottomenetelmän algoritmi”

  1. Päivitysilmoitus: Tavoitehinnat – Talousmentor

Kommentit on suljettu.