Het voortschrijdend gemiddelde (moving average) is een indicator die dikwijls gebruikt wordt in technische analyse1 van aandelenkoersen. Meer info: Investopedia2.

Het voorschrijdend gemiddelde is het rekenkundig gemiddelde van een vast aantal opeenvolgende elementen in een tijdsreeks. Het doel ervan is om kortstondige prijsschommelingen uit te middelen over een bepaalde periode en op die manier een indicatie te krijgen van de trend van een aandeel over een langere periode.

Hieronder zie je een voorstelling van het voortschrijdende gemiddelde (N = 50 en N= 200) van de aandelenkoers van het Apple aandeel samen met de effectieve beurswaarden. Je kan zien dat de schommelingen uitgemiddeld worden en dat het voortschrijdende gemiddelde "achterloopt" op de eigenlijke beurswaarden (zogenaamde lagging indicator).

moving average
voortschrijdende gemiddelde, N = 21

Databestand

Voor deze opgave beschik je over een databestand WIKI-AAPL.csv gedownload via Quandl.com3.

Het bevat de gegevens van het Apple aandeel tussen 1/1/2015 en 27/3/2018. Hieronder zie je een schermafdruk van de eerste 6 rijen.

csv schermafdruk
Visuele voorstelling van de eerste 5 records
Hier zie je de eerste 6 rijen in de dataset. De eerste rij bevat de namen van de velden, daarna volgen 813 data-rijen.

Voor deze oefening zijn we enkel geïnteresseerd in de datum (kolom Date) en de prijs bij sluiting van de beurs (kolom Close).

Merk op dat de datums in aflopende volgorde staan en dat hier gaat over dagen dat de beurs geopend is. Elke dag in deze dataset komt overeen met één tijdseenheid voor de berekening van het voortschrijdend gemiddelde. Er wordt geen rekening met weekend of andere sluitingsdagen.

Het databestand is beschikbaar in het working directory van Dodona.

Als je de oefening lokaal wilt maken (in PyCharm of in een Jupyter Notebook), dan moet je het databastand downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.

Je kan het bestand hier downloaden: WIKI-AAPL.csv4

Opgave

Schrijf een functie calculate_ma die drie argumenten heeft:

De functie leest het databestand in en berekent het voortschrijdend gemiddelde van het aandeel op de opgegeven datum. Dit is het rekenkundig gemiddelde van de n voorgaande prijzen in de dataset (waarden in de kolom Close op de n voorgaande werkdagen, de datum zelf niet inclusief).

De functie retourneert een reëel getal. Als de opgegeven datum niet in de dataset voorkomt, of als er niet voldoende voorgaande dagen beschikbaar zijn, dan wordt de string 'data not available' geretourneerd.

Voorbeeld

>>> calculate_ma('AAPL', '2016-08-19', 125)
100.92768000000002
>>> calculate_ma('AAPL', '2015-09-16', 30)
112.77933333333337
>>> calculate_ma('AAPL', '2015-06-25', 138)
'data not available'

Opmerking: Grafiek

Als je het voortschrijdend gemiddelde kan berekenen, is het niet moeilijk om bovenstaande grafiek te maken. Hieronder zie je een schermafdruk van een Jupyter Notebook waarin de functie calculate_ma in voorgaande cellen gedefinieerd is.

moving average visualisation code
Code om de grafiek hierboven te maken

Geïnteresseerde studenten kunnen deze code overnemen in een Jupyter notebook om te experimenteren. Meer info en tutorials over matplotlib vind je hier: https://matplotlib.org/tutorials/index.html5. (Dit maakt geen deel uit van de examenleerstof.)