Arkistot kuukauden mukaan: huhtikuu 2013

Sijoitusten seurannan automatisointi


Taloudellinen riippumattomuus kirjoitti sijoitusten seurannan automatisoinnista Google Spreadsheetsin avulla. Omalla kohdallani ongelmana on kuitenkin se, että Spreadsheets välillä kirjoittaa salkun arvoksi #N/A. Olen huomannut, että muillakin on esiintynyt tätä ongelmaa. Tästä syystä päätin toteuttaa Pythonilla skriptin, joka kirjoittaa päivämäärän ja salkun arvon tiedostoon. Miinuksena tässä on se, että skripti on ajettava koneella. Itse laitoin skriptin palvelimelle ja ajan sitä crontabilla. Käyn kirjoituksessa läpi kaksi vaihtoehtoista tapaa tehdä kyseinen skripti.

Skripti Google Spreadsheets Python API:n avulla

Tämä on yksinkertaisempi tapa, mutta tämä tapa vaatii Pythonin lisäksi gsprad API:n. API:n saa ladattua esimerkiksi tästä. Lisäksi ennen skriptin käyttämistä on luotava Google Spreadsheets taulukko, jonka avulla seurataan oman portfolion kehitystä. Mallin taulukon luomiseen voi katsoa Taloudellisen riippumattomuuden kirjoituksesta, johon löytyy linkki kirjoituksen alusta. Skriptin koodi on seuraavanlainen:

import gspread

#Kirjautuminen Google Spreadsheetsiin
client = gspread.login('kayttajanimi@gmail.com', 'salasana')

#Avataan taulukko
worksheet = client.open('taulukon_nimi').sheet1

#Valitaan solu, jossa päivämäärä on
date = worksheet.acell('G2').value

#Valitaan solu, jossa portfolion arvo on
content = worksheet.acell('H2').value

#Avataan tiedosto, johon päivämäärä ja portfolion arvo kirjoitetaan
text_file = open("log.txt", "a")

#Kirjoitetaan päivämäärä ja portfolion arvo tekstitiedostoon
text_file.write(date + "|" + content+"\n")

#Suljetaan tiedosto
text_file.close()

Tämän jälkeen lisätään crontabiin seuraavanlainen rivi:

0 5 * * 2-6 python portfolio.py

Tämä ajaa skriptin tiistaista lauantaihin klo 5 aamuyöllä. Eli maanantain ja tiistain välisenä yönä kirjoitetaan maanantain päätösarvo jne. Arvot tulostuvat tekstitiedostoon muodossa "PVM|Portfolion_arvo". Tekstitiedosto voidaan helposti tuoda esimerkiksi Exceliin, jolloin portfolion arvoja voidaan käyttää esimerkiksi TWR-tuoton laskemiseen.

Skripti ilman gspread API:a

Mikäli ei ole mahdollisuutta asentaa gspread API:a palvelimelleen, voi seurannan toteuttaa myös ilman kyseistä API:a. Tässä tapauksessa tehdään taulukko omasta portfoliosta samalla tavalla kuin ylempänä. Tämän jälkeen tehdään taulukkoon uusi tyhjä taulukko, johon laitetaan soluun A1 arvoksi "today()" ja soluun A2 arvoksi portfolion arvo. Taulukon nimeksi voi laittaa vaikkapa "portfolion_arvo" Seuraavaksi jaetaan kyseinen taulukko menemällä tiedosto -> julkaise internetissä -> valitaan "portfolion_arvo" -taulukko kohdasta, jossa määritetään mitkä taulukot halutaan julkaista ja tämän jälkeen aloitetaan julkaisu. Seuraavaksi tarvitsemme linkin kyseiseen taulukkoon. Tämän saa, kun alempaa valitaan linkin muodoksi "TXT (Plain text)" ja taulukoksi valitaan "portfolion_arvo". Seuraavaksi tarvitsemme skriptin, joka tallettaa kyseisen arvon päivittäin. Skripti on seuraavanlainen:

import urllib

#Avataan Google Spreadsheets taulukko ja käydään se läpi
url = 'tähän taulukon url, joka saatiin Google Spreadsheetsistä'
sock = urllib.urlopen(url)
content = sock.read()
sock.close()

#Avataan tiedosto, johon päivämäärä ja portfolion arvo tallennetaan
text_file = open("log.txt", "a")

#Tallennetaan päivämäärä ja portfolion arvo
text_file.write("%s\n"%content)

#Suljetaan tiedosto
text_file.close()

Yllä oleva skripti kirjoittaa päivämäärän ja salkun arvon log.txt -tiedostoon, josta myös arvot voidaan tuoda vaikkapa Exceliin.

Itse käytän Google Spreadsheetsiin tehtyä skriptiä, joka löytyy Taloudellisen riippumattomuuden kirjoituksesta. Spreadsheetsin skriptin ohella käytän myös kuitenkin Python-skriptiä, koska Googlen skripti välillä kirjoittaa portfolion arvoksi #N/A ja Python-skripti ei ainakaan tähän asti ole sitä kertaakaan tehnyt (ollut käytössä noin kaksi kuukautta). Tällöin Googlen kirjoittaessa #N/A:ta, voin katsoa portfolion arvon Python-skriptin antamasta logista ja kirjoittaa sen Spreadsheets-taulukkooni.