Salkkujen seuranta: excel-taulukot

Minulla ei päivity päivän muutosprosentit google sheetsiin. Siellä tarjotaan vaan tekstiä TypeError: Cannot read property ‘split’ of undefined (rivi 9). Onko kellään mitään vinkkejä ongelman korjaamiseen? Olen melko kädetön näissä hommissa.

1 tykkäys

Näyttää olevan samoin itsellä. Taitaa olla Yahoon päässä ongelma, joten ajan kanssa korjaantunee.

1 tykkäys

Joo, tää näyttää edelleenkin olevan rikki. Onko kukaan saanut kierrettyä ongelman esim käyttäen jotain muuta funktiota?
image

Oho, täytyypä illemmalla katsoa mikä sitä riivaa.

2 tykkäystä

Niin @Prophier onko tuo yahoofinance siis kukonaan sinun tekemä?

@Winston1 Joo omatekoinen on.

Yahoolla oli muutettu vähän sivun rakennetta joten changepct muuttui. Tämän pitäisi taas toimia:

Ensin Cheerio-kirjaston asennus ID:llä 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0

Sitten skriptiksi:

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()});
var nameArr =  $("div#quote-header-info").children().children().toArray().map((element) => { return $(element).text()});

if (mode === "price") return Number(arr[0].replace(/\,/g, ""));
  else if (mode === "name") return nameArr[0].split(" (")[0] || "N/A";
  else if (mode === "change") return Number(arr[1].split("(")[0].replace(/\+/g, "").replace(/\,/g, "")) || 0;
  else if (mode === "changepct") return Number(arr[2].split("(")[1].split("%")[0].replace(/\+/g, "").replace(/\,/g, "")) || 0;
  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] || "N/A";
  else if (mode === "divdate") return summaryArr[14].split("Date")[1] || "N/A";
  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].replace(/\,/g, ""));
}
11 tykkäystä

@Prophier nyt lähti toimimaan!

Suuret kiitokset tästä funktiosta omastakin puolesta! :pray: On ollut mielettömän hyödyllinen!

1 tykkäys

Toimii täydellisesti poislukien, kun muutos on 0, prosenteissa sekä euroissa, jolloin antaa vastauksen N/A.

Höhö kaikkea sitä löytyy. Tein tuohon edellä olevaan purkkakorjauksen.

1 tykkäys

Onkohan oheinen ilmoitus sukua purkkakorjaukselle?

”Exception: Service invoked too many times for one day: urlfetch. (rivi 2).”

Google antaa tehdä 100000 fetchiä vuorokaudessa, tai jos epäonnisesti laukaiset 100000/86400 operaatiota sekunnissa niin sekin ilmeisesti rikkoo rajoittimen ja antaa loppupäiväksi tuon errorin. Itselle ei ole koskaan sattunut kohdalle, mutta näköjään sekin on mahdollista. Huomenna pitäisi siis taas pelittää.

Ilmoittele, jos tuota alkaa tulla jatkuvasti, niin sitä voidaan koittaa kiertää CacheServicen avulla. Se on minulle vieras homma, joten ei pysty ihan lonkalta heittämään että meneekö kätevästi vai tuntien kiroilun kautta.

Kun luon kopion taulukoista, niin errorit ei seuraa mukana.

Tänään toiminut erinomaisesti. Erroritkin pysyneet pois.
”Purkkakorjauksesi” pelittää.

1 tykkäys

Onko jossain julkisia rest tai graphql apeja joista saisi Suomifirmojen historiallisia päätöskursseja ilmaiseksi?

Vai ainoastaan “screen scrape” tekniikalla löytyy?

Jos kokeilee samaa rajapintaa jota Inderes käyttää
Olen käyttänyt itse Inderesin omia rajapintoja yritysten tietojen hakuun, mutta en kurssien hakuun noita millistream.com-rajapintoja. Ehkä toimivat ok ?

Edit Eli tarkoitin, että Inderesin sivustolla jonkin yhtiön sivulle. Firefox Ctrl+shift+E ja sivun uudelleen lataus. Näkee kaikki sivun kutsumat API:t, joista yksi on yrityksen historiatiedot esim Admicom historia

1 tykkäys

Yahoon APIn kautta ainakin saa kätevästi, esimerkiksi:
https://query1.finance.yahoo.com/v7/finance/chart/REG1V.HE?range=2y&interval=1d&indicators=quote&includeTimestamps=true

1 tykkäys

@Prophier Saakos tuolta Yahoosta ROIC:in suoraan, tai siihen vaadittavat fundat, jotta voisi itse laskeskella sheetsiin? En muista olenko jo kysynyt tätä.

ROE ja ROA löytyy näköjään valmiina lukuina, mutta ROIC pitäisi sitten itse laskea.

ROIC on muutenkin aika kinkkinen luku, kun sen “oikeaan” laskutapaan on niin monta näkemystä eikä oikeinta varmaan ole löytynyt. Jos tyytyy ymmärtääkseni hiukan mutkia suoristaen kaavaan (net income – dividends) / (total assets) niin sen varmaan saa tuosta kasattua.

Tuolla simppelillä kaavalla koitin sitä saadakin kasattua, mutta taidot ei riittäneet. Ei ole niin pilkun tarkkaa, kun tarkoitus on vaan pystyä vertaamaan seurantalistan osakkeita sektorien sisällä noin suunnilleen, juurikin mm. ROE/ROA/ROIC avulla.

Olen tähän asti seurannut salkkuni tuottoa simppelisti laskemalla salkun (sis. osakkeet ja käteinen) tuoton suhteessa hankintahintaan, eli tässä tapauksessa

kassavirta yhteensä + osakkeiden tuotto
jaettuna
kassavirta yhteensä

missä
kassavirta yhteensä = talletukset - nostot (yhteensä laskentapäivään saakka)
osakkeiden tuotto = realisoitumaton arvonnousu/tappio + realisoitu voitto + osingot

Eihän tuo ole täysin oikea tapa seurata tuottoa, mutta minulle se on riittänyt (kertoo suurin piirtein paljonko tuottoa on vrt. talletettu pääoma). Kirjanpitoa Excelissä on noin 2,5 vuotta ja sen osalta voittoprosentti näyttää tällä hetkellä alkuvuoden laskun jälkeen noin 85 %. Lisäsin TWR-laskennan Exceliini ja tällä hetkellä se näyttää noin 67 %.

Sinänsä tuo TWR-laskenta on hyvin simppeli toteuttaa, kun kaava on päiväkohtaisesti

(salkun arvo tänään - salkun rahavirta tänään) * eilisen indeksiluku
jaettuna
salkun arvo eilen

Salkkuun on pääosin talletettu käteistä (eli nostoja on hyvin vähän), suuremmissa määrin koronakuopan jälkeen. Onkohan TWR-laskenta mennyt oikein, eli voiko prosenteissa olla noin suuri heitto?

WAU! Loistavaa, iso kiitos!

Itse pääosin osinkosijoittajana olen vuosia hieronut omaa Exceliä osinkojen seuraamiseen ja ennustamiseen. Ainahan näihin jotain uutta “tarpeellista ja hienoa” keksii.

Vuosien saatossa Excelistä tullut aikamoinen sekamelska. Ongelmaksi muodostunut juurikin import ja muut vastaavat komennot mitä olen keräillyt eri nettifoorumeilta, jolloin tarvittava tieto on noudettu monilta eri sivustoilta ja saatu jossain muodossa muokattua taulukkoihin sopiviksi. Hetken päästä taas osa komennoista ei ole toiminut ja taas on googletettu korvaavia tapoja.

Omat atk taidot näiden osalta ovat hyvin rajalliset, mutta nämä komennot sain toimimaan muutaman kokeilu kerran jälkeen ja toistaiseksi toimineet loistavasti! Muutamia itselle tärkeitä lukuja listasta uupuu, mutta mikä tärkeintä, saatavilla olevat komennot toimivat! Kiitos vielä :raised_hands:

1 tykkäys