Salkkujen seuranta: excel-taulukot


Jos on innokkaita JavaScript-taitoisia paikalla, niin tuo Googlen app scriptin kautta toimiva web app -mahdollisuuskin on salkkuseurantaan kiva. Itse rakentelin lopulta tuollaisen sivun, joka ottaa automaattisesti päivittyvän datansa suoraan Google sheetistä ja siinä on yhdistettynä kaikki omat salkut. Skripti laskeskelee omatoimisesti portfolion sisällön, kunhan sille copypasteaa salkun tapahtumat Nordnetin tarjoamasta .csv:stä taulukkoon. amChartsilla saa lisäksi pyöräytettyä mukaan graafin, johon salkun tuorein arvo päivittyy aina perjantai-iltaisin klo 23.

Etuna on nopeampi ja helpompi aukeaminen ja puhelimellakin mahtuu asia ruutuun toisin kuin sheets-appilla.

Jospa nyt voisi taas keskittyä johonkin järkevämpään, kuten firmojen tutkimiseen… :eyes:

2 tykkäystä

Tuossa hieman ylempänä mun skriptin koodi. Tai no, oikeasti skripti lukee useamman arvon, joten sen verran karsin sitä. Jos siitä jotain iloa on?

Olen tavannut tuota useita kertoja, usko pois, ja kiitos siitä kun laitoit tuon esille!

Pieni aikamatka taulukoiden kevennykseksi:

Kultaisella 90-luvulla kiersin pitämässä erään suuren kaupungin työntekijöille “Tietokone for dummies” tyyppisiä introluentoja. Homma alkoi tietenkin sillä, että koneisiin kirjauduttiin sisään tunnuksilla, jonka olin kirjoittanut liitutaululle luokan eteen.

Eräällä kerralla takariviin parkkeerasi pari vähintäänkin riittävän määrän elämän kilometrejä niellyttä huoltomiestä kädet tiukasti kainaloissa ja ***sanan kiukkuisen oloisina. Eivät puhua pukahtaneet, tuijottivat vaan. Noin vartin päästä hiivin ukkojen luokse ja kuiskasin kohteliaasti, ettei minua kiinnosta pätkääkään, jos he poistuvat opetustilaisuudesta ennenaikaisesti, esimerkiksi heti. En kerää nimiä ylös, enkä raportoi pinnausta mihinkään, joten ei muuta kun hyvää päivän jatkoa.

Tähän toinen mörökölli anteeksipyydellen (suorastaan hätkähdin ulkomuodon ja äänensävyn eroa) vastasi, myöskin kuiskaten, että ei siitä herranjumala ole kyse, että he poistua halusivat. Osoitteli sormellaan taululle jossa tunnukset edelleen olivat, ja tämän jälkeen tökki samalla sormella monitoria, jonka keskellä tyhjä login-ruutu möllötti, mutisten “mutta kun ei me tiijetä miten tuon saa tuolta tuonne”.

Eivät vaan pirulaiset kehdanneet toimistopirkkojen edessä avata suutaan ja kysyä miten homma lähtee etenemään, eikä heillä tosiaan ollut pienintäkään haisua monitorin ja näppäimistön pyhästä yhteydestä.

Minulla on vähän samanlainen olo kun tuijotan tuota koodia ja mietin, että miten hitossa se sinne taulukkoon tungetaan :smiley:

21 tykkäystä

Sun pitää luoda käynnistin, eli ylälaidasta Työkalut → Ohjelman muokkaustyökalu ja sitten luo uusi. Ja sitten luot sille käynnistimen (addResult) ja sitten voit valita, miten usein skripti ajaa uuden lukuarvon taulukkoon. Mulla se lisää uuden arvon aina ma-pe klo 23-24.

Automatisoimaan sen pääset siitä “kellokuvakkeesta”. Sitten menet muokkaussivulle ja luot käynnistimet (aikaperusteinen) joka arkipäivälle. Jos haluat testasta skriptin toimintaa, niin sen voi ajaa läpi manuaalisesti milloin tahansa suorita-napilla.

Muutin tuon historySheetiksi ja lisäsin siihen ajankohtaisen kertoimen, niin koodi toimii oikein. En keksinyt muutakaan tapaa tuohon. Eli skripti lukee salkun uusimman arvon ja jakaa sen historialehden vertailuarvolla ja kertoo tuloksen viimeisimmän nosto-/talletuspäivän pisteluvulla. Ja uusimmasta pisteluvusta sitten piirtyy myös tuottograafi!

Vai saako tuon TWR:n jotenkin muutenkin tehtyä? :thinking:

Enää tarvitsee itse kirjata uudet ostot ja talletukset. Oikeastaan kaikki muu tarvitsemani hoituu automaattisesti. On tuo kyllä hieno sovellus!

Käyhän se noinkin ihan hyvin. Toisaalta, jos pystyt siedettävällä vaivalla seuraamaan siinä sheetillä ostoihin käytettyjä varoja (ja myynneistä saatuja) niin voit käyttää tätä varsinaista TWR:n kaavaa myös: How to Use the Time-Weighted Rate of Return (TWR) Formula

Eli käytännössä ei vaadi lisäkoodaamista vaan yhteen sarakkeeseen lasket joka riville HP:n ja seuraavaan sen kumulatiivista tuloa.

Niin, tai kaavassani tarvitsee huomioida vain talletukset ja nostot, sillä salkku sisältää käteisen. Näin ollen ostot, myynnit ja osingot eivät aiheuta kassavirtavaikutusta.

Eli lasketaan samaa asiaa, mutta hieman eri tavalla.

Sarjassamme miksi keksiä pyörää uudelleen: https://mufunds.com/

Kyseessä siis Add-on Google Sheetsiin, tarvitsee vain rahaston ISIN-koodin, ja hakee sen arvon Morningstarista. Koodi myös avoimena GitHubissa, joten uskallan suhtautua luottamuksella. Yksinkertaista ja kaunista :relaxed:

image

5 tykkäystä

Aivan, sittenhän homma on hoidossa. Noinhan sitä oikeastaan saakin rehellisimmän arvon, kun huomioit myös miten otat näkemystä omalla käteispainolla. :ok_hand:

1 tykkäys

Muuten hyvä, mutta tämä taitaa toimia vain rahastojen kanssa? :thinking:

Jep, nimenomaan rahastoja varten luotu lisäosahan tuo on, plus ETF:t tuntuisi myös pelittävän. Osakkeiden kanssa sitten itse ainakin pärjään GOOGLEFINANCE() -funktiolla, mutta First Northilaisten yms. kanssa sitten joutuu kikkailemaan edelle esitetyin tavoin, kun niitä hommaa salkkuun.

Tässä linkki käyttämääni Google Sheets -pohjaan, jonka siis poimin aikaisemmin tästä ketjusta. Olen tehnyt siihen itselleni sopivia lisäyksiä. Alkuperäinen tiedosto sekä sen käyttöopastus löytyy osoitteesta The Best Free Stock Tracking Spreadsheet for Google Sheets. Pohjan ensimmäiseltä välilehdeltä löytyy myös opastusta.

  • Käyttö perustuu siihen että täytät Transactions_OSV-välilehdelle tapahtumat, muuta ei oikeastaan tarvitse tehdä. Keltaisiin ruutuihin täytetään tiedot, sinisistä ruuduista pitää vain copy-pastettaa kaavat alaspäin kun tulee tarvetta.

  • Täytä tallentamasi summat Cash-välilehdelle. Käytä kaikissa summissa euroja (talletukset, ostot jne).

  • Mallidatassa on muutama esimerkki. Perustilanteessa taulukko etsii kirjoittamallasi nimellä kurssia. Esim. Nordean kohdalle kirjoitan Nordea, jolloin nimi näkyy fiksusti raportoinnissa. Summary_OSV välilehteen olen käynyt korjaamassa Nordean tickerin. Esimerkeissä on myös datan hakeminen Morningstarista (EUNL, IS3N), harvinaisempien kurssien hakeminen (Faron) sekä USD-kurssien muunto euroiksi (BRK.B).

  • Prosenttilaskut olen tehnyt itselleni sopiviksi. Kaikille ne eivät välttämättä sovi.

  • Käy laittamassa tietojen tallennus päälle etusivun ohjeiden mukaan. Itselläni tallentuu tiedot kerran päivässä History-välilehdelle klo 23-24 välillä.

23 tykkäystä

Kiitos tonimerkki hyvästä vinkistä, täytyy varmaan vielä jatkossa työntää tuolla rahastot samaan portfolioseurantaan.

Naputtelin tämän innoittamana Reutersin dataan perustuvan funktion, lähinnä First Northin kanssa tuskaileville. Ei tässä kaikkia GOOGLEFINANCE():n featureita ole, mutta tällä saat ainakin hoidettua kaikki pikkupörssinkin yhtiöt vaivattomasti. Esimerkkisheetti liitteenä:

2 tykkäystä

Siis tää on aivan mieletön. Hetki meni ennen kuin testaamisen kautta tajusin kaiken, mutta sitten kun tajusin, mind blowing:)

Oispa sijoituspätäkkää ihan vaan sitä varten, että saisi tehtyä uusia merkintöjä exceliin:)

Kiitoksia!

Toimii oikeen mallikkaasti. Kannattaako osingoista vähentää verot suoraan osingon määrästä vai esim fee-kohdassa?

Jonnekin olisi hyvä saada laitettua kuukauden päätteeksi lainakorko. Toki sen voi laittaa jonkin osakkeen kuluihin, mutta silloin näkyy kyseisen osakkeen tuotto virheellisesti.

Voisikohan valuutanvaihtokulua laittaa minnekään? Ne ovat syöneet osan meikäläisen salkusta ja summat ovat pielessä kun niitä ei oteta mitenkään huomioon. Löytyykö Nordnetistä edes maksettuja valuutanvaihtokuluja mistään? Tapahtumasivuilla sitä ei ole ainakaan eritelty. :confused:

Itse olen laittanut osingot suoraan vähennettynä veroilla (fee = 0). Valuuttakulut olen myös sisällyttänyt välityskuluihin.

Sinänsä kummankin noista voisi lisätä omiksi sarakkeiksi, jolloin ne vähennettäisiin loppusummasta. Tällöin niiden summia saisi seurattua helposti.

1 tykkäys

Kertokaahan miten muutan seuraavaa:

=ARVO(VAIHDA(IMPORTXML(KETJUTA(“Seligson & Co*[@data-label=‘Kasvu (A)’]”),“,”,“.”))

Antaa nyt arvoksi 349.05€, kun pitäisi saada muotoon 34.9049€

Muuten että laitan funktion perään /10 :smiley:

Pilkku desimaalierottajana ei tunnu taipuvan oikein millään. :grin: Ongelman ja desimaalierrorin riskin voi koittaa kiertää ottamalla arvon Seligsonin tarjoamasta .csv:stä:
=index(split(index(importdata(“http://www.seligson.fi/graafit/global-pharma.csv"),rows(importdata(“http://www.seligson.fi/graafit/global-pharma.csv”)),1),";”),1,2)

Komento näyttää kyllä hirveältä… Joku sivistyneempi voisi kertoa, miten importin tarjoamasta dataläjästä saisi nätimmin pelkän viimeisen rivin.

1 tykkäys

Hei, itse olen käyttänyt jotain tällaista koodia pilkun muuttamisesta pisteeksi vice versa: =SUBSTITUTE(SUBSTITUTE(index(split(index(importhtml(“https://www.morningstar.fi/fi/funds/snapshot/snapshot.aspx?id=0P00000NMM",“table”,4),2,3)," “,),1,2),”.”,“,”),“,”,“.”,1)

Eli substitute. En nyt muista ulkoa miksi se on koodissa kaksi kertaa, mutta tuolla pitäisi toimia pilkun muuttaminen pisteeksi.
@Prophier

=ImportHTML(“Seligson & Co”;3) toimii mulla hyvin. Se lukee muutaman muunkin solun, mutta voit laittaa sen viimeisille riveille piiloon ja sitten lukea pelkän hinnan oikeaan kohtaan erillisestä solusta. Yksinkertaista ja tehokasta!

Pilkun muuttaminen pisteeksi: =SUBSTITUTE(E50;“.”;“,”)