Update: In juni 2018 is de API aangepast. En mijn macro dus ook. De nieuwe versie vind je in dit bericht.
Geldnerd is eigenlijk heel lui. Maar werkt soms ook heel hard om die luiheid naar nieuwe hoogten te doen stijgen. Zo ook afgelopen week. Jullie kennen mijn voorliefde voor spreadsheets. Alles automatisch, met één druk op de knop. En daar ga ik steeds een stukje verder in.
Bij de eerste versie van mijn beleggingsspreadsheet moest ik elke transactie handmatig invoeren. Inmiddels experimenteer ik met een versie waarin ik gewoon de geldtransacties en beleggingstransacties importeer. Die kan ik downloaden bij mijn broker. De macro’s zijn nog niet 100% perfect, maar de meeste problemen zijn nu wel opgelost.
Daar zat nog wel één handmatig dingetje bij waar ik mij aan stoorde. Niet alle fondsen waar ik in handel zijn genoteerd in Euro’s. Er zijn er ook die in Amerikaanse dollars genoteerd zijn. Of nog in andere valuta. En omdat ik mijn beleggingen in Euro’s bijhoud, moest ik dan bij iedere transactie de actuele wisselkoers invullen. En die moest ik opzoeken. Gewoon, handmatig. Op een website zoals deze.
Tsja, en dat kan natuurlijk niet. Dat moet handiger. Automatisch. Het heeft me een uurtje of vier gekost, maar het is gelukt. Ik heb gezocht naar een website die via een API benaderbaar is. Een API is een Application Programmable Interface, oftewel een soort ‘stekkerdoos’ op een website die je door een ander programma (bijvoorbeeld mijn spreadsheet) kunt laten benaderen. Die zijn er verschillende. Maar ik zocht (uiteraard) naar een gratis en liefst open-source variant. Ik vond deze, fixer.io. Die verstrekt de gegevens in JSON format (JavaScript Object Notation), een relatief eenvoudige methode voor gegevensuitwisseling.
Dat is handig. Als je bijvoorbeeld de code
http://api.fixer.io/2017-05-12?symbols=USD
naar de website stuurt, krijg je de volgende respons:
{"base":"EUR","date":"2017-05-12","rates":{"USD":1.0876}}
In gewone mensentaal: op vrijdag 12 mei 2017 was de wisselkoers van € 1,00 in Amerikaanse dollars USD 1,0876. Ik heb eerst nog geprobeerd om die respons keurig in te lezen als JavaScript, maar dat werd me al gauw te ingewikkeld. Ik wil daar ook geen extra tooltjes of zo voor installeren, het moet gewoon werken in ‘standaard’ Excel. Dus heb ik besloten om het antwoord van de API gewoon als String in te lezen, en de koers eruit te ‘knippen’. In onderstaande code doe ik dat voor de duidelijkheid nog even in drie stappen, maar je kunt het ook in één stap doen.
Function GetExchangeRate(Datum As Date, toCurr As String) As Double
Dim TempDate As String
Dim qurl As String
Dim TempString As String
Dim TempString2 As String
Dim TempString3 As String
TempDate = CStr(Format(Datum, "yyyy-MM-DD"))
qurl = "http://api.fixer.io/" & TempDate & "?symbols=" & toCurr
TempString = Application.WorksheetFunction.WebService(qurl)
TempString2 = Right(TempString, 8)
TempString3 = Left(TempString2, 6)
GetExchangeRate = CDbl(TempString3 / 10000)
End Function
En dat werkt. Nu hoef ik niet meer handmatig naar valutakoersen te zoeken. Voor de “toCurr” kun je elke valuta gebruiken die Fixer accepteert. Mijn nerdhart is weer blij, ook al weet ik zelf ook wel dat ik uren heb besteed aan iets wat mij nog geen minuut per transactie kostte…
Heb jij nog mooie functies in elkaar geknutseld?
Je begint me al te overtuigen om mijn spreadsheets ook eens wat verder te automatiseren. Nu nog tijd daarvoor vinden 😉
‘Geen tijd’ bestaat niet, het is altijd ‘geen prioriteit’….
Klopt, het is idd geen prioriteit 🙂 Maar je bent van harte welkom om langs te komen als je je verveelt.
Mooi, in excel is het me nog niet gelukt, in google spreadsheets wel, is er gewoon een functie voor… En die werkt “live” bij…
Laat ook zien dat ons dividendinkomen, ondanks extra aankopen de laatste tijd niet gestegen is door de verzwakking van de dollar tov de euro..
Ja, dat effect van de dollar zie ik ook… Ik ben deze functie gaan uitvogelen omdat het wel in Google Spreadsheets zit, maar niet in Excel. Wil eigenlijk ook nog aan de slag met automatisch aandelenkoersen bijwerken, zoals GoogleFinance dat kan. Maar daarvoor ontbreekt het even aan de benodigde vrije tijd.
Dit is de laatse feature die ik zoek voor mijn google sheet…
Nu er nog een prioriteit van maken (ik heb de comment hierboven gelezen…)
Er even een prioriteit van gemaakt en ik bereken nu nauwkeuriger mijn open riscio en tussentijdse maandelijkse P&L… dat scheelt! Nu hetzelfde doen voor de amberindex. Thx for the inspiration