Salkkujen seuranta: excel-taulukot

Mulla on Google Sheets -viritelmä, joka hakee osakkeiden kurssit automaattisesti ja laskee myös salkun arvon (arki)päivisin aina tiettyyn kellonaikaan. Google Sheetsiin saa melko helposti väkerrettyä käynnistimiä haluamilleen parametreille. Homma tosin vaatii skriptausta, mutta netistä löytyy keittokirjaohjeet tähän, jos koodaaminen ei ole entuudestaan tuttua.

Kun ohjelma laskee salkun arvon joka päivä, niin siitä saa helposti piirettyä TWR-graafin ja salkun arvonkehityksestä piirtyy kaunis graafi. Halutessaan tälle voi vielä etsiä jonkun vertailuindeksin ja seurata salkun kehitystä tätä vastaan.

Jotenkin virittämällä skriptiä saisi sen varmaan laskemaan TWR-arvon myös, mutta tähän ei mene montaa sekuntia kun kopioi vaan tiedon ylemmältä riviltä. Kaavaa toki pitää muokata kun salkkuun tallettaa/salkusta nostaa rahaa, mutta se nyt on pientä kun salkun muutokset muutenkin pitää syöttää käsin.

Tässä valmis koodipätkä, jota voit sitten muokata omaa tarvetta varten. Eli tarvitset “Portfolio” ja “Historia” -nimiset välilehdet.

Komento var value = portfolioSheet.getRange(17, 8, 1, 1).getValue(); lukee solun riviltä 17 ja sarakkeesta 8 (kaksi seuraavaa arvoa kertoo miten monta solua luetaan). Toinen luettava arvo on rivillä 49 ja sarakkeessa 8. Vastaavasti voit lisätä luettavia soluja lisäämällä alle uuden rivin (muutoin sama mutta käytä value 3 jne).

Seuraava kappale kertoo mihin edellä luettu arvo sijoitetaan. Ekaan sarakkeeseen tulee päivämäärä ja sitten em. lukuarvo seuraavaan. Uusi arvo tulee aina seuraavalle tyhjälle riville.

function addResult() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var portfolioSheet = spreadsheet.getSheetByName(“Portfolio”);
var historySheet = spreadsheet.getSheetByName(“Historia”);

// Refresh until all N/A values disappear
var dataArrayRange = portfolioSheet.getRange(1,1,portfolioSheet.getLastRow(),portfolioSheet.getLastColumn());
var dataArray = dataArrayRange.getValues(); // necessary to refresh custom functions
var nanFound = true;
while(nanFound) {
for(var i = 0; i < dataArray.length; i++) {
if(dataArray[i].indexOf(‘#N/A’) >= 0) {
nanFound = true;
dataArray = dataArrayRange.getValues();
break;
} // end if
else if(i == dataArray.length - 1) nanFound = false;
} // end for
} // end while

// Fetch date and portfolio value

var value = portfolioSheet.getRange(17, 8, 1, 1).getValue();
var value2 = portfolioSheet.getRange(49, 8, 1, 1).getValue();
var date = new Date();
var date = new Date();

// Calculate where to write new information
var lastRow = historySheet.getLastRow();
var dateCell = historySheet.getRange(lastRow+1, 1);
var valueCell = historySheet.getRange(lastRow+1, 2);
var value2Cell = historySheet.getRange(lastRow+1, 3);

// Store values
dateCell.setValue(date);
valueCell.setValue(value);
value2Cell.setValue(value2);

}​

6 tykkäystä

Meneekö tämä koodi hyvällä prosentilla läpi vai tuleeko koskaan takkuamista noiden N/A kanssa? Aika kivan näköisesti on kierretty latausjumittelu ja jos toimii niin täytyy soveltaa omaanki salkkuun :slight_smile:

Toimii tuo aika vakaasti, sanoisin, että 98% varmuudella. Satunnaisesti jää joku päivä päivittymättä.

Osaako joku sanoa, että miten koodia pitäisi muokata että sen saisi laskemaan uudelle riville TWR-arvon? Eli sen pitäisi lukea aina tietyn saman päivän “vertailuarvo” ja sen jälkeen laskea uusi indeksin pisteluku salkun uusimmalla arvolla?

Varsinainen TWR-kikkare tietysti ottaisi huomioon myös ostot joita salkkuun teet, eli tällainen kuvaamasi indeksipisteiden laskeminen on yksinkertaistettu homma. Se onnistuu onnistuu kuitenkin nopsasti näin:

var portfolioValue = portfolioSheet.getRange(3,1).getValue();
var referenceValue = portfolioSheet.getRange(4,1).getValue();
var twrCell = historySheet.getRange(lastRow+1, 4);
twrCell.setValue(portfolioValue / referenceValue);

getValue():n kanssa tarvitaan vain kaksi parametria eli yksittäisen solun koordinaatit. Jos otat isomman rangen niin tarvitaan getValues() -funktiota ja sitten neljää parametria.

2 tykkäystä

Niin, tai siis ajattelin, että muokkaan skriptiä sitten sen mukaan kun salkkuun tulee talletuksia/nostoja ja luettava kiintopiste sitten muuttuu siinä samalla. Ei sitä muuten saa tehtyä, vai?

Pitää kokeilla tuota! Kiitos vastauksesta!

Laskeskelin Excelissä Kamuxille eri malleilla arvoja. Huomasin kuitenkin, että ‘hyväksyttävän P/E-luvun’ kaavalla tulee negatiivinen arvo, koska oletettu kasvu on suurempi kuin 9% tuottovaatimus. Toimiiko hyväksyttävän P/E:n arvonmääritys myös kasvuyhtiössä?

Hyväksyttävä P/E = (1-kasvu/ROE)/(tuottovaatimus-kasvu)

2 tykkäystä

Vastauksena itselleni:
Tyypillisesti käytetään vain kolmea kasvulukua, todellisen kasvun sijaan:

  • 4%, jos yhtiö kasvaa selkeästi keskimääräistä hitaammin;
  • 5%, jos keskimääräinen kasvuvauhti ja
  • 6% jos yhtiö kasvaa keskimääräistä nopeammin.
2 tykkäystä

Jos jollakin on heittää funktiota Nordnetin Ruotsin indeksirahastolle ja spp global a Eur-rahastolle niin minä kiitän. Muuten sainkin jo aot:n ja ost:n yhdistettyä google sheetsiin googlettamalla esimerkkejä.

1 tykkäys

Kasvuodotus ei voi olla tuottovaatimusta(tuotto-odotusta) korkeampi. Jos asiaa vähän maistelee niin eikö tunnu hassulta odottaa tuloksen kasvavan vaikkapa 15%, mutta arvioivan osakkeen tuoton olevan selvästi pienempi 9%. Toki on totta että yli 7% ikuisuuskasvu-odotuksen käyttö on jo varsin epärealistinen olettama eli tämän ongelman ei pitäisi tulla vastaan.

2 tykkäystä

Käytä importHTML toimintoa.

Esim. Ruotsi indeksirahasto =ImportHTML(“https://m.fi.investing.com/funds/nordnet-superfonden-sverige";"table”;4) ja SPP vastaavasti laittamalla heittomerkkien väliin 0P00000LST-rahasto | Storebrand Global All Countries A Sek - Investing.com

Jos taas desimaalipiste/-pilkku aiheuttaa ongemia, niin etsi vastaavasti rahasto Suomi/USA versiosta

5 tykkäystä

@SamiK
@Prophier

Kiitän syvällistä ohjeista, mutta valitettavasti taidan jäädä odottamaan jotain valmista webratkaisua (ihan käsittämätöntä että esim. TV ei tarjoa tätä).

Huvittaa kun kuvittelen itseni tunkemassa noita A4 papereille printattuja koodinpätkiä tietokoneen keskusyksikköön ja kiroilemassa kun ei taulukko ala toimia :grinning:

Tottakai taulukot vaativat tietyn lähtötason ja perehtymistä, eli ei kaikkien tarvitse näitä viritellä. Arvostan ymmärrystäsi vaihtoehtoiskustannusten suhteen (aika on rahaa!) eli jäädään odottelemaan sopivampia palveluita :slight_smile:

@SamiK tuhannesti kiitoksia :pray:. Tuota toimintoa yritinkin käyttää hakemalla tiedot morningstarinsivuilta, mutta sieltä se ei onnistunut, koska hinnan kanssa samassa solussa SEK ja EUR mainittu.

Sain nyt vihdoin tehtyä komennon hieman sun toimintoa muokaten:
Ruotsin indeksi:
=ImportHtml(“https://fi.investing.com/funds/nordnet-superfonden-sverige";"table”;14)

SPP global:
=ImportHtml(“https://fi.investing.com/funds/se0013801453";"table”;12)

1 tykkäys

Eipä mitään!

Morningstarin datan saa oikeaan muotoon käyttämällä “=substitute” ja “=value” komentoja. Tämä on kätevä jos datalähde käyttää esim. desimaalipistettä desimaalipilkun sijasta tai jos “EUR” on ängetty samaan soluun lukuarvon kanssa.

Morningstarin kohdalla tosin tietojen hakeminen on hyvin epävakaa ja päivän tai kahden päästä näyttää vain erroria, joten sieltä ei kannata hakea tietoja.

Mä haen suurimman osan Google Financesta ja ne joita ei löydy, niin investing.comista

1 tykkäys

Tässä excelejä pyöritellessäni pysähdyin miettimään hetkeksi noita rahastorivejä ja niistä n. kahdessa kuukaudessa tullutta tuottoa.Täytyy sanoa että niissä on jotain rauhoittavaa kun tuntuvat nousevan paljon rauhallisemmin ja varmemmin kuin yksittäiset osakkeet.

Tässä pari ajatelmaa siitä kun huomasin että noi on aikalailla samoilla tasoilla kuin mitä suurin osa muustakin salkusta on ja keskiarvona salkku on noiden välissä.

“Indeksi ei ole häpeä”
“Jos et tiedä mitä tehdä, osta indeksiä”

Taitaa ajankäyttö mennä harrastuksen puolelle. :smiley:

Ja sit se itse asiakin, tossa suorat funkkarit nohin indekseihin oikeilla indekseillä. Kiitos aiemmille jotka jakoivat menetelmän
.
=ImportHtml(“https://www.investing.com/funds/nordnet-superfondet-norge";"table”;13)
=ImportHtml(“https://fi.investing.com/funds/nordnet-superfonden-danmark";"table”;12)
=ImportHtml(“https://fi.investing.com/funds/nordnet-superfonden-sverige";"table”;14)
=ImportHtml(“https://www.investing.com/funds/nordnet-superrahasto-suomi";"table”;14)

4 tykkäystä

Suosittelen vieläkin tätä Google Sheets -taulukkoa. Toki vaatii Google-tilin, mutta toimii sitten kaikkialta. Pohja on erittäin hyvä jo valmiina, itse tein siihen vielä pari modausta mitkä näin hyödylliseksi.

  • Vaihdoin alkuperäiset portfoliokategoriat uusiksi: ETF, Suomi, Eurooppa, USA (Pohjois-Amerikka) ja muut.

  • Lisäsin muutaman hyödyllisen laskennan yhteenvetoon: total gain/loss %, portfolio percentage

  • Lisäsin muuttaman hyödyllisen jaottelusarakkeen osakkeille: hold status, account type ja broker

  • Historiapuolelle lisäsin seurannan portfolion (pl. käteinen) summista ja kehityksestä, oletuksena taulukko pitää kirjaa omistukset + käteinen summasta. Lisäsin myös muutaman muun avainluvun, mitkä sitten päivittyvät historiadataksi kerran päivässä. En käytä niitä nyt mihinkään, mutta ovatpahan siellä tallessa jos joskus tarvitsee.

@Hurde Tätä kohti ollaan menossa… JOS Mandatum ei tarjoa kunnollista seurantaa. Päätöksiä ei vielä ole tehty, mutta pidän todennäköisenä, että salkut yhdistyvät tuonne yhden katon alle.

Mutta tänään meni tuntukausia kun muistelin miten B1 ja B2 solut lasketaan yhteen ja näytetään tulos solussa B3, joten tarvinnee varata viikko siihen, että Sheetsiin koodaillaan jotain historiaseurantoja.

Ei sinun valmiiksi hiomaasi mallia (nimenomaan tuo portfolion summa / kehitys historia kiinnostaa) ole jostain kopsattavissa?

Voin katsoa sen viikonloppuna kuntoon ja laittaa jakoon :+1:t3:

1 tykkäys

Mahtavaa!

Sopivasti su huusholli tyhjä muista kaksijalkaisista, pörssit kiinni ja ulkonakin ennusteen mukaan aivan liian kuuma. Mikäs sen mukavampaa kun opetella taulukkolaskentaa pyykkäyksen ja kokkauksen lomassa :smiley:

Mandatumissa on todella hyvät raportit. Seuraa kaupantekoa prosentteina ja euroina ja niinä valutoina millä on tili