Salkkujen seuranta: excel-taulukot

Kyl siinä on. Tässä on tää alkuperäinen kirjoitus, josta sain avun: Sparsamt leverne: Importera aktiekurser till Google kalkylark

1 tykkäys

Muun tekstin jälkeen pitää olla yksi tyhjä rivi välissä, sitten koodirivin alkuun neljä välilyöntiä, sen perään koodit.

1 tykkäys

Hieman tuntuu että pitää joka osakkeelle keksiä omanlainen loitsu että saa luettua oikein. Esim. englanninkielisellä sheetsillä viimeaikojen suosikit SE ja Cara vaatii ihan erilaiset lausekkeet:

=IMPORTXML(“SEYE | Smart Eye AB Osakkeet - Investing.com”, “//span[@id=‘last_last’]”)/10000*GOOGLEFINANCE(“Currency:SEKEUR”)

vs.

=VALUE(REPLACE(IMPORTXML(“CARAC | Carasent ASA Osakkeet - Investing.com”, “//span[@id=‘last_last’]”), 3, 1, “.”))*GOOGLEFINANCE(“Currency:NOKEUR”)

Helpommalla pääsee kun lukee koko taulukon vaikka taulukon loppuun ja sitten sopivaan kohtaan komennon lukea tietty solu. Eli koko rimpsusta luetaan vain haluttu arvo toisella komennolla.

Ongelma ratkaistu sheetsissä: eli yläpilkut ja lainausmerkit muuttuvat täältä kopioitaessa vääränlaisiksi. Noi kun kirjoittaa uusiksi sheetsiin niin toimii ja lisäksi yhden tavallisen pisteen vaihto puolipilkuksi (mulla engl. google sheets)

1 tykkäys

Jos haluaa lopettaa noiden import-komentojen ja epävarman investing.comin kanssa puuhailun, niin tein illan ratoksi tällaisen palikan joka hakee hinnan Yahoon palvelusta. Ainakin lyhyellä testailulla toimii. Asentaminen menee seuraavasti:

  1. Avaa Google Sheetsin portfoliotaulukkosi ja sitten valikosta Tools / Script Editor

  2. Avaa Script Editorin valikosta Resources / Libraries

  3. Hae library avaimella: 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0

  4. Pitäisi löytyä cheerio, jota tarvitaan funktion toimintaan. Tallenna

  5. Liitä Script Editorin editorisivulle seuraava koodi:

    function yahoofinance(symbol, mode) {
    const content = UrlFetchApp.fetch("https://finance.yahoo.com/quote/"+symbol).getContentText();
    const $ = Cheerio.load(content); 
    var arr = $("div#quote-market-notice").parent().children().toArray().map((element) => { return $(element).text()});
    var summaryArr = $("div#quote-summary").children().children().children().children().toArray().map((element) => { return $(element).text()});
    
    if (mode === "price") return Number(arr[0].replace(/\,/g, ""));
    else if (mode === "change") return Number(arr[1].split("(")[0].replace(/\+/g, "").replace(/\,/g, "")) || "N/A";
    else if (mode === "changepct") return Number(arr[1].split("(")[1].split(")")[0].replace(/\+/g, "").replace(/\%/g, "")) || "N/A";
    else if (mode === "high") return Number(summaryArr[4].split(" ")[3].replace(/\,/g, "")) || "N/A";
    else if (mode === "low") return Number(summaryArr[4].split("e")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
    else if (mode === "high52") return Number(summaryArr[5].split(" ")[4].replace(/\,/g, "")) || "N/A";
    else if (mode === "low52") return Number(summaryArr[5].split("ge")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
    else if (mode === "open") return Number(summaryArr[1].split("n")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "volume") return Number(summaryArr[6].split("e")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "volumeavg") return Number(summaryArr[7].split("e")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "beta") return Number(summaryArr[9].split(")")[1]) || "N/A";
    else if (mode === "pe") return Number(summaryArr[10].split(")")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "eps") return Number(summaryArr[11].split(")")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "edate") return summaryArr[12].split("Date")[1];
    else if (mode === "divdate") return summaryArr[14].split("Date")[1];
    else if (mode === "target") return Number(summaryArr[15].split("st")[1].replace(/\,/g, "")) || "N/A";
    else if (mode === "div") return Number(summaryArr[13].split("ld")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
    else if (mode === "yield") return Number(summaryArr[13].split("(")[1].split("%")[0]) || "N/A";
    else return Number(arr[0]);
    }
    
  6. Tallenna

Nyt pystyt taulukon puolella käyttämään =yahoofinance() -funktiota seuraavasti:

=yahoofinance("FORTUM.HE") - hinta
=yahoofinance("FORTUM.HE", "change") - päivämuutos
=yahoofinance("FORTUM.HE", "changepct") - päivämuutos prosentteina
=yahoofinance("FORTUM.HE", "high") - päivän ylin
=yahoofinance("FORTUM.HE", "low") - päivän alin
=yahoofinance("FORTUM.HE", "high52") - 52 viikon ylin
=yahoofinance("FORTUM.HE", "low52") - 52 viikon alin
=yahoofinance("FORTUM.HE", "open") - päivän avaushinta
=yahoofinance("FORTUM.HE", "volume") - päivän volyymi
=yahoofinance("FORTUM.HE", "volumeavg") - keskimääräinen volyymi
=yahoofinance("FORTUM.HE", "beta") - beta, 5 vuodelta
=yahoofinance("FORTUM.HE", "pe") - P/E-luku
=yahoofinance("FORTUM.HE", "eps") - osakekohtainen tulos
=yahoofinance("FORTUM.HE", "edate") - seuraava tulosjulkistus
=yahoofinance("FORTUM.HE", "divdate") - seuraavan osingon irtoaminen
=yahoofinance("FORTUM.HE", "target") - konsensustavoitehinta
=yahoofinance("FORTUM.HE", "div") - 12kk osinkoennuste
=yahoofinance("FORTUM.HE", "yield") - 12kk osinkotuottoennuste

Ja tuohon luonnollisesti täytyy käyttää osakkeiden tikkereitä siinä muodossa jossa finance.yahoo.com ne näyttää, eli .HE pitää laittaa suomalaisten osakkeiden perään.

Toivottavasti tästä on jollekin apua. Jos löytyy selviä vikoja niin voidaan koittaa korjata.

edit: pari bugia
edit: lisätty featureita

43 tykkäystä

Apua on runsaasti, mutta lisää tarvitaan.
Löytyisikö vielä apua seuraaviin:
Päivän ylin
Päivän alin
52 vko ylin
52 vko alin

Suuri kiitos

Kiitos tästä. Saatko lisättyä vielä changepct-kohtaan muunnon numeroksi? Vaikuttaa että tuo sama Number()-ei toimi, ja tällöin raportin päässä pitää käyttää VALUE().

EDIT: Ja tuo VALUE() ei toimi siinä tapauksessa, kun muutos on positiivinen. Eli pitäisi tehdä IF-lause, missä tarkistetaan muutoksen ensimmäinen merkki, ja jos se on “+” niin jätetään ensimmäinen merkki huomioimatta.

Tällä pitäisi toimia muunnos.
=Value(substitute(yahoofinance(“xxx.he”, “changepct”),“+”,“”))

Auttaisiko joku atk-velho atk-tumpeloa ja kertoisi, kuinka Investingistä saadaan Google Sheets taulukkoon seuraavat tiedot First North osakkeista:
Muutos %
Muutos
Päivän ylin
Päivän alin
52 vko ylin
52 vko alin

Päivitin aiemman postauksen, nyt on reilummin komentoja.

4 tykkäystä

Hyvin pelittää!

Kiitos

1 tykkäys

Haluaisin taulukkooni kaiken funda-osaston oheen vähän teknisiä indikaattoreita laajemman kuvan saamiseksi yhdestä paikasta. RSI:n ja annualisoidun volatiliteetin äpästin mutta tarvisin jonkin nopeasti reagoivan alennusmyynti-indikaattorin. Mietin esim. kurssin vertaamista edeltävän kuukauden kolmen korkeimman päivän keskiarvoon. Onko parempia ideoita tai vaikka nettisivuja/kirjallisuutta mihin kannattaisi perehtyä?

Hölmö kysymys, kysyn silti. HB:n kestävä energia-rahastossa on 1.5% kulu/v. Miten merkitsisitte sen exceliin? Tuohon exceliin, missä on se histograafi esim.

Sanotaan vaikka, että ostan sitä 100eurolla. Merkitsisinkö kuluiksi 1.5euroa?

Ymmärrys ei täysin riitä hahmottamaan vuosikulun merkintätapaa.

Nuo kuluthan otetaan suoraan huomioon jo rahaston arvossa. Ellei tämä ole jokin hyvin erikoinen rahasto.

3 tykkäystä

Osa / valtaosa yahoo:n tiedoista taitaa olla vanhentunutta?

Mites olisiko mahdollista luoda 1vk/1kk/3kk jne. kehitykset?

Otin oman Excel-seurannan rinnalle kokeiluun Portfolio performance-nimisen softan. Onko kenelläkään kokemusta kyseisestä työkalusta?

Excelissäni ei tällä hetkellä ole saatavilla täyttä historiadataa sijoituksistani enkä sitä sinne jaksaisi vääntää, mikä on ehkä se pääsyy kokeiluun.

Yhden viestin löysin siitä palstalta, miten on @Reisga pelittänyt?

1 tykkäys

Minullakin tuo portfolio performance käytössä.
Täällä hyvät ohjeet alkuun pääsyyn. How to track your investments with Portfolio Performance
Ainakin itsellä oli alkuun haaste ymmärtää miten asiat tehdä oikein ja tuolla ohjeella sai asiat käyntiin.

Minä olen manuaalisesti syöttänyt ostot/myynnit, kun kauppoja ei ole niin paljon, joten en ole tarvinnut automaattituonteja.

Oletko ollut tyytyväinen softaan? Miten olisko muilla käyttäjäkokemuksia. Kiinnostaisi itteäkin kokeilla mutta ei viitsisi turhaan säätää kun excelissä ihan ok seurannat tällä hetkellä…

Olen ollut tyytyväinen. Helppokäyttöinen kun pääsi alkuun ja kaupat on nopea syöttää.

Valmiiksi voi tallennella erilaisiin kansiohin salkut (itsellä Danske, Nordnet ja Degiro käytössä) ja niistä saa yhdessä/erikseen esim. tuottoja seurattua.
Yksi kansio sisältää ns. osto seurattavat yhtiöt ja siellä esim. ma 50/200 arvot saa näkyviin, joten voi vähän miettiä ajoitusta.

Jotain salkun hallinta työkalujakin tuossa on, jos haluaa painotuksia suunnitella, mutta ei ole ollut vielä käyttöä.

Huono puoli, että ei kulje puhelimessa mukana, joten ainakin tällä hetkellä on kilpaileva google sheet rinnalla käytössä.

Sheetissä/excelissä hyvä puoli, että voit raportoida mitä haluat/osaat ja tuossa olet sen varassa mitä koodarit keksineet.

Tuon artikkelin mukaan, kun väsää itselleen pienen demon pääsee varmasti kärryille täyttääkö työkalu omat tarpeet.

1 tykkäys