Universiteit Gent Faculteit Ingenieurswetenschappen
Vakgroep Telecommunicatie en Informatiesystemen Voorzitter: Prof. Dr. Ir. H. BRUNEEL
Ontwikkeling van een rekenblad voor portefeuillebeheer en beleggingsratio’s door Lic. Dieter FURNIERE
Promotor: Prof. Dr. lr. W. PHILIPS Scriptiebegeleider: E. VANSTEENKISTE
Scriptie ingediend tot het behalen van de academische graad Master in de Toegepaste Informatica Academiejaar 2005-2006
Voorwoord In het secundair onderwijs kwam ik voor het eerst echt in aanraking met economie. In het begin vond ik het maar wat stroef en wiskundig, maar al vlug sloeg de vonk over. De laatste vier jaren van het secundair koos ik dan ook voor de richting economiewiskunde en voor ik het wist studeerde ik in 2005 af als 'licentiaat in de Handelswetenschappen, optie financieel management'. Ik had de microbe weldegelijk sterk te pakken en mede door verscheidene nieuwsberichten, artikels en de terug opkomende interesse in aandelen in 2004, begon ik mij gepassioneerd met beleggingen bezig te houden. Als student-leek in beleggingen ging een totaal nieuwe wereld voor mij open en al vlug stootte ik op enkele belemmeringen. Er bestaan verscheidene sites waar ik mijn portefeuille kan bijhouden, meer zelfs er bestaan beleggingscompetities alom, maar hoe of eerder gezegd waar kan ik mijn aandelen analyseren? Telkens ik een nieuwe onderneming onder de loep wens te nemen moet ik dezelfde berekeningen uitvoeren. Hier is toch behoorlijk wat tijd voor nodig, want daarnaast dient een belegger op de hoogte te blijven van de financiële berichtgeving alom. Deze scriptie richt zich dan ook naar alle particuliere beleggers die op een gratis wijze gebruik willen maken van een analysemodel voor aandelen. De richting 'Master in de toegepaste informatica' biedt mij de mogelijkheid om zelf naar een informaticamodel op zoek te gaan om mijn aandelen aan een grondige analyse te onderwerpen. Graag dank ik hiervoor mijn promotor Prof. Dr. lr. W. Philips voor het mogelijk maken van deze scriptie, dit samen met E. Vansteenkiste voor de nodige ondersteuning, begeleiding en oplossing van mogelijke problemen. Daarnaast ook graag een woord van dank aan L. Deman voor het nalezen van dit afstudeerwerk en W. Schaubroeck voor correcties en hulp bij de uitwerking van mijn model. “De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.” 30 mei 2006
Ontwikkeling van een rekenblad voor portefeuillebeheer en beleggingsratio’s door Lic. DIETER FURNIERE Scriptie ingediend tot het behalen van de academische graad van Master in de Toegepaste Informatica
Academiejaar 2005-2006 Promotor: Prof. Dr. lr. W. PHILIPS Scriptiebegeleider: E. VANSTEENKISTE Faculteit Ingenieurswetenschappen Universiteit Gent Vakgroep: Telecommunicatie & Informatieverwerking Voorzitter: Prof. dr. ir. H. BRUNEEL
Samenvatting: In het eerste deel van deze scriptie wordt dieper ingegaan op wat beleggen juist inhoudt. Daarnaast wordt de fundamentele en technische analyse van aandelen besproken in diverse punten. Een kort besluit beschrijft het belang van beide analysevormen. Het tweede deel bespreekt het opbouwen van de eigenlijke spreadsheet in diverse hoofdstukken. Eerst wordt ingegaan op de diverse programma’s die gebruikt worden. Vervolgens komt de opbouw van de fundamentele analyse aan bod, waarin het opstellen van formulieren uitvoerig besproken wordt. Daarna wordt de gebruikte databank besproken, met eventuele problemen. In een volgend punt komt de technische analyse aan bod waar de opbouw van grafieken besproken wordt. Er wordt besloten met een kort hoofdstuk betreffende de beveiliging van een spreadsheet. Tot slot wordt in een conclusie het algemene beeld van wat in deze scriptie bereikt werd weergegeven. Enkele mogelijke verdere uitbreidingen komen hier eveneens aan bod.
Trefwoorden: aandelen, beleggingssoftware, ratio’s, aandelenanalyse, …
Inhoudstafel Deel 1 Financiële achtergrond
1
Hoofdstuk 1 Beleggen
1
Hoofdstuk 2 Analyse
2
2.1 Fundamentele analyse
2
2.1.1 Solvabiliteit
3
2.1.2 Rentabiliteit
3
2.1.3 Liquiditeit
5
2.2 Waardering
6
2.3 Technische analyse
9
2.3.1 Koersverloop
10
2.3.2 Indicatoren
11
Hoofdstuk 3 Besluit
14
Deel 2 Opbouw spreadsheet Hoofdstuk 1 Gebruikte informaticatools
15 15
1.1 Excel
15
1.2 Access
16
1.3 VBA
16
1.4 SQL
16
1.5 DAO
16
Hoofdstuk 2 Fundamentele simulator
18
2.1 Button
18
2.2 Formulieren
18
2.2.1 Toevoegen
19
2.2.2 DCF / DDM / Verwacht Rendement
22
2.2.3 Opvragen
23
2.2.4 Tweevoudige analyse
25
2.2.5 Leeg maken werkblad
25
Hoofdstuk 3 Databank
26
3.1 Creatie tabellen
26
3.2 Toevoegen data
26
3.3 Dubbele rijen
27
3.4 Analysecontrole
29
Hoofdstuk 4 Technische analyse 4.1 Formulier
31 31
4.1.1 Tijdshorizon
31
4.1.2 Ophalen historische data
32
4.1.3 Selecteren kolommen
33
4.2 Grafiek
34
4.2.1 Technische analyse en volume
34
4.2.2 RSI
35
4.2.3 OBV
37
4.2.4 MACD
38
4.2.5 Moving Average
39
4.3 Errorafhandeling
40
4.3.1 Data range
40
4.3.2 Wissen en terug aanmaken vorige werkbladen
40
4.3.3 Boodschap
41
4.3.4 Punt/komma
41
4.3.5 Screenupdates & DisplayAlerts
42
4.3.6 Verborgen werkbladen
42
Hoofdstuk 5 Beveiliging 5.1 Werkblad
43 43
5.1.1 Fundamentele analyse
43
5.1.2 Technische analyse
44
5.2 Werkmap
44
5.3 VBA
45
Besluit
46
Bronnen
48
Boeken
48
Websites
48
Figuren Figuur 1:
Userform VBA rasteropmaak
19
Figuur 2:
Toevoegen aandeel
21
Figuur 3:
Formulier Toevoegen Aandeel
23
Figuur 4:
Formulier opvragen analyse
23
Figuur 5:
Messagebox: Aandeel al geanalyseerd
28
Figuur 6:
Formulier DDM (Controle)
29
Figuur 7:
Messagebox aandeel nog niet geanalyseerd
29
Figuur 8:
Screenshot technische analyse
34
Figuur 9:
Screenshot grafiek RSI
37
Figuur 10: Screenshot grafiek OBV
38
Figuur 11: Screenshot MACD
39
Figuur 12: Screenshot Moving Average
39
Figuur 13: Venster Blad beveiligen
43
Figuur 14: Werkmap beveiligen
45
Figuur 15: VBA-code vergrendelen
45
Inleiding Professionele beleggingssoftware kost stukken van mensen, dit terwijl we met Excel een gebruiksvriendelijk, alom gekend en veelgebruikt programma hebben om praktisch gratis een eigen stukje “beleggingssoftware" te creëren. In deze scriptie wordt een dergelijk gebruiksvriendelijk, functioneel en persoonlijk analysemodel gebouwd voor het bestuderen van aandelen. Het eerst waar naar gezocht wordt is een methode om aandelen/bedrijven te analyseren aan de hand van diverse ratio’s. De gebruiker beschikt op die wijze over de mogelijkheid cijfermatige gegevens uit de jaarrekening en balans in te geven, die op hun beurt automatisch verwerkt worden tot ratio’s. Op die ratio’s baseren we aan- of verkoopbeslissingen. Daarnaast wordt de gebruiker bovendien een model aangeboden om een aandeel via diverse grafieken te analyseren. De zoektocht naar een ideaal ontwerp wekt echter diverse vragen op. Op welke manier zijn de ratio’s en grafieken te interpreteren op financieel vlak? Welke programma's/programmeertalen zijn nodig om een deftige spreadsheet te ontwerpen? Hoe krijgt een belegger een gebruiksvriendelijke interface aangeboden om zijn data in te geven en terug op te vragen? Waar en hoe kunnen de ingegeven gegevens bijgehouden worden en terug opgevraagd worden? Waar zijn de nodige gegevens voor de technische analyse van aandelen terug te vinden en hoe kunnen ze opgevraagd worden? Hoe kunnen mooi opgemaakte grafieken voor technische analyse gepopulariseerd en weergegeven worden? En zo kunnen we blijven doorgaan. In het eerste deel van deze scriptie wordt uitvoerig ingegaan op de financiële achtergrond van het beleggen. Het eerste hoofdstuk van dat deel geeft weer wat beleggen juist inhoudt en om welke reden mensen beleggen. Vervolgens bespreekt het tweede hoofdstuk de twee analysetechnieken. In het tweede deel wordt het eigenlijke werk weergegeven. Eerst bekijken we de softwareprogramma’s waarmee deze thesis tot stand komt. Daarna wordt de code van de fundamentele analyse onder de loep genomen, samen met het opzetten van de databank. In de laatste twee hoofdstukken van dat deel gaan we ook nog wat dieper in op het opzetten van de technische analyse en het beveiligen van de spreadsheet.
Deel 1 Financiële achtergrond Hoofdstuk 1 Beleggen Het opbouwen van een mooi vermogen is iets waar iedereen naartoe streeft. Is het niet voor nu, dan misschien voor een pensioen, voor de kinderen of zelfs de kleinkinderen. Al jaren belegt men in diverse producten zoals obligaties, aandelen, kasbons, opties, futures, het spaarboekje, ... en dit alles om een mooi kapitaal te verzamelen. Door inflatie brokkelt het verdiende kapitaal echter af en aan de huidige rentevoeten is er van een rendement op het spaarboekje nauwelijks te spreken. Men gaat bijgevolg steeds meer op zoek naar alternatieven. Hierbij heeft men de keuze tussen het besteden van het geld, ofwel kan men het laten renderen. Dat laatste is echter niet altijd zonder risico. Met een spaarboekje gaat nauwelijks risico gepaard, maar dit uit zich onder andere in een 'lagere' opbrengst. Tegen de huidige lage interestvoeten gaan steeds meer personen op zoek naar andere beleggingsinstrumenten. Eén van de meest gekozen producten hiervoor is de beurs, meer specifiek de aandelenmarkt. Aandelen zijn misschien wel risicovoller, maar er staat dan ook een hoger rendement tegenover. Tijdens de crash van 2001-2002 trokken veel beleggers zich terug van de aandelenmarkt, maar sinds de heropleving van de koersen in 2002 - 2003 stroomt steeds meer kapitaal naar de beurs. De stijging van de beursindices brengt dit duidelijk in kaart. Door deze al dan niet gegronde stijgingen is het nodig dat men met de nodige aandacht en eventueel argwaan de verschillende beleggingen onder de loep neemt. Steeds minder koopjes zijn aanwezig en sommige ondernemingen zijn overgewaardeerd. Een fundamentele en technische analyse van deze aandelen dringt zich op en het is dit waar veel nieuwe beleggers weinig aandacht aan besteden. Ze kopen op advies van banken, institutionele fondsen, fora, … terwijl eigen onderzoek moet voorkomen dat men instapt waar het al te laat is, of dat geld uitgegeven wordt aan minder rendabele, solvabele of liquide ondernemingen die in het geval van technische analyse, negatieve signalen vertonen. Het volgende hoofdstuk gaat in op die verscheidene analysevormen.
1
Hoofdstuk 2 Analyse Dit hoofdstuk schept een duidelijk beeld met welke analysevormen een belegger rekening moet houden. Een selectie van aandelen gebeurt namelijk niet in een plotse opwelling, maar in verscheidene stappen. Eerst zal de beleggingshorizon worden bepaald, daarna de termijn waarop men wenst te beleggen, vervolgens het risico dat men wil nemen en ten slotte welk rendement men wil behalen, ... Eenmaal dit bepaald is wordt overgegaan naar het selecteren van de eigenlijke aandelen. Ook hieraan moet men veel tijd spenderen. Vele factoren beïnvloeden immers de evolutie van een aandelenkoers. Inflatie, rente, politiek, conjunctuur en wisselkoersen zijn slechts enkele ervan, maar een analyse van het bedrijf zelf (management, winst, omzet, jaarrekening, balans, koersverloop, …) is nog altijd het voornaamste. In deze scriptie worden vervolgens twee verschillende methodes besproken om een individueel aandeel onder de loep te nemen. Het gaat om fundamentele- en technische analyse. Diverse strekkingen geven hun voorkeur aan technische analyse, terwijl anderen zweren bij selectie aan de hand van fundamentele analyse. Hier wordt ingegaan op beide vormen, want een optimale combinatie van beide analysevormen zorgt voor nog meer informatie/zekerheid.
2.1 Fundamentele analyse Fundamentele analyse is de techniek in de beleggingswereld waarbij beleggingsanalisten de (relatieve) aantrekkelijkheid van een aandeel (of een aandelensector) ten opzichte van andere beleggingsmogelijkheden beoordelen door middel van een analyse van de gang van zaken in die onderneming of bedrijfstak. Fundamentele analyse hecht belang aan het bedrijf en alles wat uiting geeft aan het bepalen van de resultaten. Dit alles wordt in een breder macro-economisch kader bekeken. Het voorspellen van de toekomst is hierbij van groot belang. Een belegger moet oog hebben voor rentevoeten, inflatie, muntschommelingen, grondstofprijzen, … Ook het gebruik van diverse ratio's kan hier enig soelaas brengen. De ratio's bepalen onder andere de (1) solvabiliteit, (2) liquiditeit en (3) rentabiliteit van de onderneming en geven aan of een onderneming op dit ogenblik gezond is. Een vierde vorm van ratio's, de (4) waarderingsratio's, trachten een toekomstbeeld van een onderneming te scheppen. In het opzicht van deze scriptie, waar de nadruk toch wel ligt op het informaticaconcept, worden striktere en uitgebreidere waarderingsmethodes achterwege gelaten. Aan de hand van de fundamentele analyse is het de intentie een oordeel te vellen betreffende het al dan niet investeren in een aandeel. Beleggingsadviseurs komen
2
hierbij veel op de proppen met termen als “buy”, “strong buy”, “reduce”, “add”, “hold”, “sell”, “strong sell”, “overwegen”, “onderwegen”, ...
2.1.1 Solvabiliteit Algemene solvabiliteitscoëfficiënt
= EV/BT EV = Eigen Vermogen. BT = Balanstotaal = Vreemd Vermogen + Eigen Vermogen De algemene solvabiliteitscoëfficiënt geeft de graad van zekerheid weer die schuldeisers hebben om terugbetaald te worden. De ratio bepaalt bovendien de financiële autonomie van de onderneming, of anders gezegd, welk deel zelf gefinancierd de onderneming zelf financiert. De norm is het financieren van 1/3 (33%) via eigen vermogen. De algemene solvabiliteitscoëfficiënt is één van 3 alarmpeilen, wat betekent dat indien deze ratio onder 15% daalt dit duidt op een falingsindicator en dus een te mijden aandeel is (R. Aernoudt, 2000, 28).
Cashflow/BT
= (nettowinst + afschrijvingen)/BT Dit is het tweede alarmpeil en moet hoger zijn als 6% (R. Aernoudt, 2000, z.p.). In deze ratio wordt de nettowinst inclusief afschrijvingen gedeeld door het balanstotaal. Het bijtellen van de afschrijvingen, die kosten zijn en geen uitgaven, kunnen in een latere fase nog gebruikt worden. Bij vele analyses wordt geen rekening gehouden met de afschrijvingen, maar eigenlijk zijn ze erg belangrijk gezien het bedrijf ook over dit geld kan beschikken.
2.1.2 Rentabiliteit De rentabiliteit, de term zegt het zelf, geeft weer hoe rendabel of winstgevend een onderneming, in ons geval de beursgenoteerde onderneming, is. Een hoger rendement is logischerwijze beter, want dan is de onderneming meer waard, kan de onderneming meer dividend uitkeren en is er een hoger rendement mogelijk voor eventuele aandeelhouders/beleggers. Hieronder zijn enkele rentabiliteitsratio's
3
weergegeven. Terug wordt in de optiek van de scriptie slechts een beperkt aantal ratio's bestudeerd.
Rendabiliteit op het eigen vermogen
= nettowinst na belastingen / eigen vermogen De rentabiliteit op het eigen vermogen, ofwel de verhouding tussen de winst ten opzichte van het eigen vermogen, moet hoger zijn dan de marktrente. Indien dit niet zo is kan een ondernemer zijn geld beter op een bankrekening plaatsen. Een hogere rentabiliteit zal voor aandeelhouders duiden op hogere dividenden indien de onderneming die uitkeert.
Dividendrendement
= dividend/beurskoers Het dividendrendement is een procentuele uitdrukking van het ontvangen dividend in relatie tot de huidige beurskoers. Het dividendrendement is wat men noemt een extra rendement waar veel defensieve beleggers of beleggers op lange termijn hun aandacht op vestigen. Naast stijgende aandelenkoersen wordt doorgaans naar deze indicator gekeken. Hoe hoger dit rendement hoe beter. Deze ratio hangt in belangrijke mate af van de dividendenpolitiek van de onderneming. Zo keren groeiondernemingen nauwelijks dividenden uit en herinvesteren ze de winst.
Winst per aandeel
= nettowinst/aantal uitstaande aandelen De winst per aandeel (WPA) is de totale winst van een onderneming gedeeld door het aantal uitstaande aandelen. De winst per aandeel is een weergave van de winstgevendheid van een onderneming uit het oogpunt van de aandeelhouder. Een hogere winst per aandeel bezorgt de aandeelhouder een hogere return op zijn investering.
4
2.1.3 Liquiditeit De liquiditeit van een onderneming geeft aan of een onderneming aan haar lopende betalingsverplichtingen kan voldoen.
Bedrijfskapitaal
= PK – VA = Vl. A – VVKT Als je vaste activa van de hand moet doen om de bedrijfscyclus (=productie) te laten doorgaan, dan zit je niet goed. Het bedrijfskapitaal is eigenlijk een veiligheidsmarge die weergeeft dat het permanent kapitaal (PK) gebruikt wordt voor andere doeleinden dan de financiering van vaste activa (VA). Het bedrijfskapitaal moet dus voldoende groot zijn om de bedrijfscyclus van een onderneming staande te houden. De tweede definitie - de Vlottende Activa (Vl. A) min het Vreemd Vermogen op Korte Termijn (VVKT) - slaat op de veiligheidsmarge die een onderneming heeft onder het voorwendsel van vlottende activa ter financiering van het vreemde vermogen op korte termijn (VVKT) (R. Aernoudt, 2000, 31-32).
Bedrijfskapitaal/BT
= Bedrijfskapitaal/BT Dit tweede alarmpeil mag nooit onder 10% dalen. Dit duidt er op dat er te weinig productiviteit is, of dat er teveel lopende schulden zijn die op korte termijn aflopen.
Liquiditeitscoëfficiënt
= Vlottende activa / Opvraagbaar op korte termijn De liquiditeitscoëfficiënt geeft aan in welke mate de activa, die geacht worden liquide te zijn, het opvraagbaar op korte termijn overstijgen. Het percentage van de liquiditeitscoëfficiënt groter dan 100% is de veiligheidsmarge. Hier moeten we wel rekening houden met het soort activiteit van het bedrijf. Grootwarenhuizen kunnen een klein of negatief bedrijfskapitaal hebben, terwijl hun leverancier over veel bedrijfskapitaal moeten beschikken (R. Aernoudt, 2000, 32).
5
Acid test
= bedrijfskapitaal/voorraden De acid test is een indicator die meet of het bedrijfskapitaal voldoende groot is om de voorraden te financieren. Deze indicator moet steeds groter zijn dan 1, maar ook een te hoge ratio is niet goed. In een dergelijke situatie kan men zich afvragen waarom de onderneming geen langlopende schulden heeft aangegaan in plaats van kortlopende (R. Aernoudt, 2000, 33).
Current ratio
= vlottende activa / vreemd vermogen op korte termijn De current ratio is een andere veelgebruikte liquiditeitsratio. Deze ratio geeft weer in welke mate de kortlopende schulden terugbetaald kunnen worden met de korte beschikbare bezittingen van de onderneming, ook wel vlottende activa genoemd. Ondernemingen moeten streven naar een hogere current ratio, want dit betekent dat het goed zit met de liquiditeit van de onderneming.
Quick ratio
= vlottende activa - voorraden / vreemd vermogen op korte termijn De quick ratio is gelijkaardig aan de current ratio, buiten het feit dat hier de voorraden buiten beschouwing gelaten worden. Deze zijn namelijk niet bedoeld om kortlopende schulden mee af te lossen en geven dan ook een nog beter beeld van de liquiditeit van de onderneming.
2.2 Waardering Ten slotte is er de waardering van de onderneming. De waardering gebeurt op basis van de huidige balans, jaarrekening, maar ook aan de hand van voorspellingen. Deze scriptie, met zijn voorzichtige aanpak, zal voorspellingen praktisch buiten beschouwing laten.
6
Koers/winst
= koers/nettowinst De koers winst (KW), ofwel price earnings (PE), geeft weer hoeveel keer de winst van de onderneming op de beurs door beleggers wordt betaald, of hoeveel jaar het duurt voordat bij een gelijkblijvende winst de betaalde prijs terugverdiend is. De gemiddelden van de verscheidene beurzen zijn divers. Een k/w van 10 betekent dat men gemiddeld 10x de jaarwinst betaalt voor een aandeel. Lagere k/w-verhoudingen worden aanzien als koopkansen. Deze ratio op zich zegt niet veel, maar een vergelijking over jaren, met sectorgemiddelden en andere gelijkaardige ratio’s, kan duidelijkheid brengen. Het is een simpele en dan ook veel gebruikte ratio.
Koers/cashflow
= koers / ((nettowinst + afschrijvingen) /aantal uitstaande aandelen) De koers/cashflow is meer betrouwbaar dan de winst per aandeel, gezien afschrijvingen en provisies kosten zijn, maar geen uitgaven en hier verrekend worden. Ze worden bij de winst opgeteld omdat men met dit geld kan beslissen waarvoor men het zal aanwenden. De operationele resultaten van een bedrijf worden op die manier perfect weergegeven.
Boekwaarde
= Eigen vermogen / aantal uitstaande aandelen De boekwaarde van een aandeel is de weergave van de waarde van de onderneming indien men de bedrijfsuitvoering stopzet. Men noemt dit ook wel eens de ‘minimumwaarde’, in de veronderstelling het bedrijf geen verlies boekt. Vooral voor bedrijven die nog weinig groeien en vervangingsinvesteringen uitvoeren is deze ratio van belang. Meerwaarden op participaties worden hier niet in rekening gebracht.
7
Intrinsieke waarde
= Eigen vermogen + meerwaarden / aantal uitstaande aandelen In tegenstelling tot de boekwaarde, wordt bij de intrinsieke waarde wel rekening gehouden met de meerwaarden die een onderneming kan boeken op participaties. Voor holdings is dit dan ook één van de belangrijkste indicatoren.
DDM (Dividend Discount Model)
K = D / (k – g) Het DDM (Dividend Discount Model) is één van de meest gebruikte waarderingsmodellen van aandelen. We trachten de huidige waarde van de onderneming te berekenen en dit door de toekomstige dividenden te verdisconteren. In onze formule komen volgende symbolen voor: K: waarde van het aandeel D: eerst verwachte dividend k: rente waarmee de toekomstige dividenden geactualiseerd worden k = Rf + B x Rm Rf = Riscovrije rente (Staatslening op 10 jaar) B = Systematische risico (<1: minder risicovol; >1 meer risicovol) (Rm – Rf) = riscopremie g: verwachte groeivoet (in percent) dividend Het verwachte dividend kan men terugvinden in het jaarverslag en voor de AEX en AMX onder andere op de site http://www.dividendpagina.nl/. Rf vindt men dagelijks terug in de krant en schommelt op dit ogenblik rond 4,00%. B (Bèta) is een eerder moeilijk terug te vinden factor, maar na wat opzoekwerk kan deze teruggevonden worden. Een Bèta van 1 is reëel. Rm, het marktrisico, is ongeveer gelijk aan 3,5%. Ten slotte kan men de groeivoet (g) van het dividend afleiden door de evolutie van de uitgekeerde dividenden te bestuderen. Enkele opmerkingen zijn hier op hun plaats. Het DDM kan namelijk niet op elk bedrijf toegepast worden. Zo keren groeiondernemingen geen dividend uit waardoor deze factor in onze formule vervalt. Daarnaast zijn er ook ondernemingen waarvan de groei van het dividend de verwachte rendementswaarde overschrijdt. In onze formule betekent dit een negatieve noemer waardoor het aandeel een negatieve waarde heeft, wat natuurlijk niet kan (dividendenpagina, 2006, z.p.).
8
DCF (Discounted Cashflow Model) Veelal wordt niet het dividend gebruikt, maar de cashflow die gegenereerd wordt door het bedrijf. Dividenden zijn eigenlijk de uitgekeerde cashflow aan de aandeelhouders en om die reden belangrijker voor de belegger. Omdat er veel personen zijn die meer belang hechten aan de cashflow, wordt ook deze ratio opgenomen Gelijkaardig aan het DDM-model kan hetzelfde dus toegepast worden met de cashflow van een onderneming.
K = CF / (k – g) Voor g (verwachte groeivoet), houden we rekening met de inflatie en de verwachte groeivoet van de cashflow, die uit vorige jaren kan afgeleid worden. De inflatie bedraagt op dit ogenblik ongeveer 2.4% voor België en kan in verscheidene onderzoeken, magazines en kranten teruggevonden worden.
Verwacht rendement Bij de berekening van het verwachte rendement is het nodig de groeivoet in te schatten, samen met de cashflow en de huidige koers. Het gaat om een procentuele waarde in tegenstelling tot bovenstaande waarderingstechnieken.
K = CF / Koers + g Voor het berekenen van andere waarderingsmethodes, zoals het ‘gecorrigeerd nettovermogen’ of ‘de rendementswaarde’, gaan we deze scriptie te buiten. Hiervoor zijn geen vaste formules, waardoor voor een goede analyse de jaarrekening en balans uitgespit moet worden (beursbrief, 2006, z.p.).
2.3 Technische analyse Ook de technische analyse is een analysevorm die we niet links mogen laten liggen. Aan de hand van technische analyse tracht de belegger toekomstige koersdoelen in te schatten. Dit gebeurt via een dubbel luik. Enerzijds wordt de trend van de eigenlijke koers onder de loep genomen en anderzijds kijkt de belegger naar de diverse indicatoren zoals volume-indicatoren, glijdende gemiddelden en relatieve sterkte indicatoren.
9
2.3.1 Koersverloop De grafiek is het eerste waar een technisch analist naar kijkt als hij een aandeel analyseert. De grafiek is een visuele weergave weer van het koersverloop van een aandeel. Er bestaan verschillende methodes en theorieën om een dergelijke chart te gebruiken bij het analyseren.
Hoekentheorie Een eerste vorm is de hoekentheorie. Deze theorie kijkt naar de uiterste hoogte -en laagtepunten op een grafiek. Er wordt verwacht dat na hogere bodem bijvoorbeeld een hogere top gevormd wordt. De belegger tracht hier trendwijzigingen op te sporen, wat wil zeggen dat bijvoorbeeld de koers in een stijgende trend terug daalt tot een vorige bodem.
Trendlijnen Bij het opstellen van trendlijnen verbinden we de uiterste hoogtepunten of de uiterste laagtepunten met elkaar. Bij een stijging worden enkele bodems met elkaar verbonden. Dit noemen we de steunlijn. Indien er een daling optreedt worden de toppen met elkaar verbonden. Dit wordt de weerstandslijn genaamd. Nadat een lijn getekend is wordt parallel met die lijn een evenwijdige getekend met minstens één top (bij een stijging) of één bodem (bij een daling). Deze lijnen worden op korte of lange termijn getekend. In een grafiek kunnen verscheidene al dan niet tegengestelde trendlijnen opgenomen worden. Het algemene principe is: kopen bij een stijgende trend, verkopen bij een dalende trend en trendwijzigingen/omkeerpatronen opsporen. Onder omkeerpatronen zijn 3 belangrijke vormen te onderscheiden: de hoofd– en schouderformatie, driedubbele toppen en dubbele toppen of bodems. Voor een uitvoerige uitleg wordt verwezen naar www.cash.be.
Voortschrijdend gemiddelde Bij een voortschrijdend gemiddelde worden de slotkoersen over een bepaalde periode opgeteld en gedeeld door het aantal dagen in die periode. Elke dag wordt de oudste dag vervangen door de jongste dag. Op die wijze geeft het gemiddelde een evolutie aan. De meest gebruikte gemiddelden zijn: het 10-daagse, het 25-daagse, het 50-daagse, het 100-daagse of het 200-daagse gemiddelde. Hier kunnen aan- en verkoopsignalen opgespoord worden.
10
Aankoopsignalen
Verkoopsignalen
Als na een daling het gemiddelde Als het gemiddelde na een stijging zijdelings beweegt en de koers deze lijn zijdelings beweegt en de koers deze lijn naar boven verbreekt. naar beneden doorbreekt. Als de koers het stijgend gemiddelde Als de koers een eind boven het sterk opwaarts doorbreekt . dalende gemiddelde gestegen is. Als de koers, dalend boven het Als de koers onder het gemiddelde in de voortschrijdende gemiddelde, dit richting van dit gemiddelde stijgt, maar gemiddelde benadert zonder het te het niet doorbreekt. doorbreken. Na een daling van de koers onder het Als het gemiddelde daalt en de koers in voortschrijdend gemiddelde, maar als dat de daling dit gemiddelde doorkruist. gemiddelde blijft stijgen. Als de koers té ver onder het gemiddelde is gevallen, kan er meestal een technisch herstel verwacht worden in de richting van dat gemiddelde.
Als de koers zeer ver boven het gemiddelde gestegen is, mag er een reactie verwacht worden in de richting van het lager gelegen gemiddelde.
Volume Het volume is niet echt een indicator in de zuivere zin van het woord, maar eerder een versterker van een trend, trendbreuk, … Bij hogere volumes zal een trendbreuk of een inwerking van een indicator veel belangrijker zijn dan bij lagere volumes.
2.3.2 Indicatoren Bij het gebruik van technische analyse worden diverse indicatoren gebruikt. Er bestaan verschillende groepen indicatoren en binnen een bepaalde groep wijzen de meeste indicatoren dezelfde richting uit. Het is dan ook van belang de verschillende indicatoren over de groepen heen te combineren. Ten eerste bestaan er oscillatoren (RSI), daarnaast trendindicatoren (MACD), anderzijds hebben we ook nog volumeindicatoren (Volume, OBV) en ten slotte de momentums. Van de eerste drie groepen wordt hier een voorbeeld besproken.
11
RSI Een veelgebruikte technische indicator is de RSI (Relative Strength Index). De RSI kan over verscheidene periodes lopen, maar de standaardperiode is 14 dagen, wat in deze scriptie ook wordt toegepast. Aan de hand van deze indicator wordt gekeken of een aandeel dat daalt, oververkocht is en of een stijgend aandeel overkocht is. Dit moet vervolgens een trendwijziging teweegbrengen. De RSI-grafiek moet in 3 verschillende zones ingedeeld worden: 0 - 25 = de koopzone 25 - 75 = de neutrale zone 75 - 100 = de verkoopzone De belangrijkste koop en verkoopmomenten zijn: - kopen: als de RSI in de koopzone een dubbele bodem vormt waarbij de tweede bodem hoger ligt dan de eerste. - verkopen: als de RSI in de verkoopzone een dubbele top vormt waarbij de tweede top lager ligt dan de eerste. Het bekijken van deze signalen gebeurt het beste binnen een tijdsspanne van 4 tot 8 weken. Bij drie toppen, waarbij de tweede de laatste is, mag deze tweede top buiten beschouwing gelaten worden. Een signaal is krachtiger indien er divergentie optreedt tussen de RSI-grafiek en de koersgrafiek. Een signaal van trendommekeer wordt bekrachtigd indien deze met grotere volumes gepaard gaat. De berekening van de RSI gaat als volgt: RSI = 100 - (100/1+ RS) waarbij RS over een bepaalde periode (14 dagen) het gemiddelde is van de slotkoersen als de koers hoger sluit, gedeeld door het gemiddelde van de slotkoersen als de koers lager sluit.
OBV (On Balance Volume) Bij het OBV wordt elke dag de slotkoers van de vorige dag opgeteld (als de slotkoers hoger is) of afgetrokken (als de slotkoers lager is) t.o.v. het totale volume. -
indien slotkoers hoger dan vorige dag: OBV = vorige OBV + totale dagvolume indien slotkoers lager dan vorige dag: OBV = vorige OBV - totale dagvolume
12
Een OBV die op een gelijkaardige wijze beweegt als de koersgrafiek (convergentie) bevestigt de bestaande koersbeweging. Het is echter vooral bij divergentie dat er belang gehecht wordt aan de OBV. Als bijvoorbeeld een kleine stijging (bij koersbodems) samengaat met hogere volumes die hoger zijn dan de volumes bij kleine dalingen, zal de OBV-grafiek ten opzichte van de koersgrafiek al een eerste divergerend teken geven. Volgende signalen kunnen onderscheiden worden: -
koopsignaal: stijgende bodems in de OBV, maar nog niet in de koersgrafiek verkoopsignaal: dalende toppen in de OBV, maar nog niet in de koersgrafiek.
MACD (Moving Average Convergence Divergence) De MACD, die rond de nullijn schommelt, is het verschil tussen het 12-daags exp. gemiddelde en het 26-daags exp. gemiddelde. Het werken met twee gemiddelden zorgt dat de MACD vloeiend verloopt. Een koopsignaal wordt gevormd bij het divergeren van een hogere bodem met een lagere bodem in de koersgrafiek. Een verkoopsignaal ontstaat met een lagere top in de MACD terwijl de koers nog een hogere top vormt.
13
Hoofdstuk 3 Besluit Bij de analyse van een aandeel/bedrijf is het combineren van de diverse ratio’s de beste oplossing. Onder de 4 groepen (solvabiliteit, liquiditeit, rentabiliteit en waardering) staan telkens enkele ratio’s vermeld. Het moet duidelijk zijn dat binnen een bepaalde groep de ratio’s dezelfde richting zullen uitwijzen. Om die reden is het dan ook belangrijk om niet enkel naar de liquiditeit of de solvabiliteit te kijken, maar naar beide. Er kan misschien wel gesproken worden van een vorm van synergie. Daarnaast zal het eveneens van belegger tot belegger afhangen aan welke ratio’s de meeste aandacht geschonken wordt. Voorlopig kijken particuliere beleggers enkel naar rentabiliteit of waarderingsratio’s, daar waar de andere twee groepen eveneens van groot belang zijn. Hoewel er dus enige subjectiviteit in keuze mee gemoeid is, zal een combinatie van de vier de beste oplossing zijn. Voor het gebruik van de technische analyse indicatoren geldt eenzelfde principe. Het zal afhangen van gebruiker tot gebruiker waar zijn voorkeur naar gaat, maar wat wel belangrijk is, is dat ze allemaal samen gebruikt worden. Zowel de volumeindicatoren, oscillatoren en de trendindicatoren combineren met het koersverloop is een optimale mix om een goed oordeel te bekomen. Vele indicatoren bepalen dus de beslissing van een belegger. In deze scriptie hanteren we diverse indicatoren, maar macro-economische gegevens mogen niet genegeerd worden evenals het bestuderen van de werkzaamheden en het management van het bedrijf. Ook ‘behavior’ is een belangrijke factor in het beleggen. Kuddegedrag, gierigheid, angst en andere gevoelsfactoren, zorgen veelal dat fundamentele en technische analyses teniet worden gedaan. Zoals gezegd is het van belang dat de fundamentele en technische analyse gecombineerd worden. Indien enkel op één bepaalde analyse de nadruk wordt gelegd, is er gevaar dat bepaalde beslissingen genomen worden die indruisen tegen de andere analysevorm. In het volgende hoofdstuk wordt dit alles uitgewerkt in een goedgevormde spreadsheet.
14
Deel 2 Opbouw spreadsheet Nu de financiële achtergrond gekend is kan overgegaan worden naar het eigenlijke werk. In dit deel wordt in verscheidene hoofdstukken op zoek gegaan naar de optimale oplossing om bovenstaande ratio’s zo gebruiksvriendelijk mogelijk in een model te gieten. Het eerste hoofdstuk bespreekt hierbij de gebruikte informaticatools. Daarna wordt het fundamentele model uitgelegd, om in het derde hoofdstuk wat meer te zeggen over de databank. In het vierde hoofdstuk wordt de opbouw van de tweede analysevorm - de technische analyse - besproken. Er wordt besloten met een hoofdstuk over de beveiliging van de spreadsheet.
Hoofdstuk 1 Gebruikte informaticatools In de zoektocht naar een optimaal programma stuiten we al vlug op het Microsoft Officepakket. Waarom een ingewikkeld programma creëren in één van de vele programmeertalen zoals C++, JAVA, ... als het veel eenvoudiger en gebruiksvriendelijker kan. De keuze was dan ook vlug gemaakt, want Office biedt onder andere volgende voordelen: het is gebruiksvriendelijk en eenvoudig voor de gebruiker, het is een alom bekend informaticapakket, het is gemakkelijk aanpasbaar via VBA, er is een databank ingebouwd voor het bijhouden van de ingegeven data.
1.1 Excel Bij een aandelenpakket is het van belang dat de gebruiker er vlot mee kan werken. Een rekenblad zoals Excel biedt ons deze mogelijkheid. Bijna iedereen in het bezit van een computer heeft wel eens Excel geopend, zelfs gebruikt. Hoe Excel functioneert, hoeft niet iedereen aangeleerd te worden en dit is ook een streefdoel op zich. We trachten de gebruiksvriendelijkheid echter nog te optimaliseren door het toevoegen van eenvoudige knoppen en formulieren die simpel in te vullen zijn, dit in samenwerking met zelfgegenereerde foutboodschappen. Bijkomend is er met behulp van VBA een vlotte wisselwerking met een ander Office programma, Access.
15
1.2 Access Access is een tweede Microsoft Office programma. Het is niet iedereen gegeven hier even vlot mee om te gaan. Daarom werd ook gekozen om alles in Excel te implementeren, maar op de achtergrond wordt Access gebruikt zonder dat een gebruiker hier iets van merkt. Access biedt ons de mogelijkheid om een eenvoudige niet veeleisende databank op te bouwen. Aan de hand van onze Access databank wordt het mogelijk de ingegeven data bij te houden en in een latere fase terug op te vragen.
1.3 VBA Visual Basic for Applications is een quasi objectgeoriënteerde programmeertaal bedoeld om applicatieprogramma's te automatiseren en is in de dagelijkse wereld bekend van onder andere Microsoft Office. Aan de hand van VBA kunnen extra functies aan applicatieprogramma's zoals Excel en Access toegevoegd worden. VBA is een afgeleide vorm van Visual Basic, met dit verschil dat VB onafhankelijke programma's kan schrijven, daar waar VBA afhankelijk is van de moederapplicatie. Hoewel de functionaliteiten van Excel en Access onbeperkt zijn, is er vaak nood aan extra mogelijkheden. We denken voornamelijk aan knoppen en formulieren die ons een mooie interface bezorgen, evenals bijkomende formulemogelijkheden.
1.4 SQL Bij de ontwikkeling van de eerste relationele DBMS's (Database Management Systems) was geen standaard opvragingstaal aanwezig. Elke groep had zo zijn eigen taal, maar na wat zoekwerk ontwikkelde QUEL en IBM uiteindelijk SEQUEL, waar de naam uiteindelijk veranderde in SQL (Structured Query Language). Wat ook interessant is om weten is dat SQL uit twee aparte delen bestaat. Enerzijds is er DDL (Data Definition Language), wat gebruikt wordt om de structuur van de databank te definiëren en aan te passen. Anderzijds is er DML (Data Manipulation Language) die gebruikt wordt om gegevens uit de databank op te vragen en te wijzigen. Voor het opvragen van Access wordt gebruik gemaakt van SQL-code.
1.5 DAO Het toevoegen van data aan onze databank gebeurt dan weer aan de hand van DAO (Data Access Objects). Er wordt veel gesproken over welke taal de beste is, DAO of ADO (ActiveX Data Objects), maar dit gaat deze scriptie te buiten. Mijn keuze voor
16
DAO had geen specifieke reden, maar ik vond de taal alvast voldoende om de gegevens in de databank op te nemen. Meer informatie over het verschil tussen beide is terug te vinden op http://www.trigeminal.com/usenet/usenet025.asp?1033.
17
Hoofdstuk 2 Fundamentele simulator Dit tweede hoofdstuk heeft tot doel, het op zoek gaan naar een gebruiksvriendelijke interface die het mogelijk maakt om gegevens in Excel via een formulier in te geven. Daarnaast moet dit formulier opvraagbaar zijn via een aangemaakte button in het Excel rekenblad. Aan de hand van de diverse codevensters en screenshots wordt getracht een beeld te schetsen hoe tewerk wordt gegaan en welke problemen hoe opgelost zijn. Niet elke code wordt opgenomen, want dit zou leiden tot een onoverzichtelijk beeld. Enkel daar waar relevant, wordt de code weergegeven.
2.1 Button Het openen van de formulieren gebeurt zoals al gezegd via een button die zich in een Excel-werkblad bevindt. De diverse formulieren, zoals het toevoegen van een nieuw te analyseren aandeel, worden aan die buttons gelinkt. Het oproepen van een dergelijk formulier gebeurt via de volgende code: Private Sub ComToevoegen_Click() UserForm1.Show End Sub
De spreadsheet omvat diverse buttons zoals: toevoegen, opvragen, DCF, verwacht rendement, DDM, leeg maken werkblad, Tweevoudige analyse en Technische analyse. Elk van deze buttons openen een formulier en het zijn die formulieren en de achterliggende code die verder besproken worden.
2.2 Formulieren De diverse formulieren in de spreadsheet worden aangemaakt in VBA en dragen de naam UserForm. Zoals men in onderstaande figuur kan zien worden de formulieren aangemaakt aan de hand van een raster en bijhorende buttons. In volgende punten wordt de opbouw van de verschillende te onderscheiden formulieren van de simulator besproken.
18
Figuur 1: Userform VBA rasteropmaak
2.2.1 Toevoegen Het formulier “Toevoegen” is het eerste formulier dat in de spreadsheet wordt aangemaakt en moet er voor zorgen dat de data in een databank gegoten wordt, die dan later terug kan opgevraagd worden. Voor we beginnen met het aanmaken van dit eerste formulier moet bepaald worden welke gegevens nodig zijn. Daarbij houden we onder andere rekening met mogelijke latere aanpassingen (actualiseren databank) en de formules (omrekening achter de schermen en overflow), ... In de databank is te merken dat indien het scheidingsteken ‘punt’ gebruikt wordt, de getallen voluit geschreven worden. Dit is echter geen informaticaprobleem, maar een standaard notering voor Europese waardes die met een komma gescheiden worden. In eerste instantie werd gedacht hier een oplossing voor te vinden, maar dit zou indruisen tegen de algemene regels van getalnotatie. Indien we het aandeel op zich nemen, zonder naar onze formules te kijken, hebben we volgende invulvelden nodig: Yahoo Ticker Symbool: Mogelijkheid voor latere automatisering van de databank, zoals online ophalen van koersgegevens. Het correct noteren van deze symbolen is erg belangrijk en in dit formulier is dan ook gezorgd voor een rechtstreekse link met de yahoo website. Voor het correct ingeven van dat Tickersymbool en de naam van het aandeel, wordt gerekend op de gebruiker
19
zelf. Het is onmogelijk om voor alle toe te voegen aandelen na te gaan of ze correct geschreven zijn. We raden wel aan het tickersymbool op te zoeken op http://finance.yahoo.com. Hier kan gezocht worden naar de diverse aandelen. Gezien het tickersymbool minder onderhevig is aan typfouten, wordt data in een later stadium opgevraagd aan de hand van dit symbool, te kiezen uit een lijst. Naam aandeel: Voluit geschreven naam van ons aandeel. Sector: Het toevoegen van de sector geeft ons een betere beoordeling over de waarde van onze ratio's. Bepaalde ratio's gelden niet voor zekere sectoren en wat ook van belang is, is de vergelijkingsbasis van aandelen binnen eenzelfde sector. Dit kan in een verdere uitwerking van de spreadsheet aan bod komen. De keuze viel op een ComboBox of keuzelijst met een selectie van sectoren waartussen de gebruiker kan kiezen. Het veld werd via de eigenschappen van de userform beveiligd voor handmatige invoer, dit om verwarring bij verder gebruik te vermijden. Jaar analyse: In onze databank worden de analyses per jaar opgenomen en vervolgens opgedeeld per aandeel. Meer uitleg is terug te vinden in het hoofdstuk Databank. Het jaar is heel belangrijk op dit formulier gezien aan de hand van het jaartal gekozen wordt in welke tabel de analyse komt. Onderstaande code toont aan dat aan de hand van de keuzelijst (CmbJaar) het jaar gebruikt wordt om de juiste tabel in te vullen. In een volgend punt wordt hier dieper op ingegaan. Set rs = DB.OpenRecordset (CmbJaar)
Koers: De koers wordt handmatig door de gebruiker ingevuld. Dit is een bewuste keuze, want indien de koers via het Internet zou worden opgevraagd zou een gebruiker zonder internetverbinding wel eens in de problemen komen. Voor het up to date houden van de koers zou telkens een internetconnectie tot stand moeten komen. Zoals later in dit deel besproken wordt, bestaat deze beperking al voor de technische analyse. Naast deze algemene gegevens wordt eveneens de data uit het jaarverslag ingegeven. Voor de gebruikte formules wordt verwezen naar Deel 1 van deze scriptie, de fundamentele analyse. Volgende gegevensvelden zijn nodig:
20
EV (eigen vermogen) VV (vreemd vermogen) BT (balanstotaal) VA (vaste activa) Vl. A (vlottende activa) VVKT (vreemd vermogen op korte termijn) Voorraden Dividend (totaalbedrag) Aantal uitstaande aandelen Afschrijvingen Nettowinst Het formulier ziet er als volgt uit:
Figuur 2: Toevoegen aandeel Het gaat hier om numerieke gegevens, wat zorgt voor enige problemen, want bij het invullen van tekstuele gegevens worden eventuele ratio's niet berekend. Ook de databank aanvaardt geen tekstuele gegevens voor deze vakken, waardoor een zelfgecreëerde foutmelding zich opdrong. Bijgevolg verschijnt bij het ingeven van niet-numerieke gegevens in de tekstvakken het bericht dat er numerieke gegevens moeten ingegeven worden. De gebruiker kan hier niet omheen en zal dus zelf op zoek moeten gaan, naar zijn fout. Een tweede probleem dat zich bij deze cijfers opdringt is het feit dat het invullen van 0 als waarde zorgt voor een blokkering bij bepaalde vakken. Het invullen van elk
21
ander cijfer lost dit op, maar zo bekomen we natuurlijk geen correcte formules. Dit is dus niet de bedoeling en ook hiervoor wordt naar een oplossing gezocht. Eerst werd hierbij achterhaald wat het eigenlijke probleem was. Na het wat sleutelen aan de code kwamen we uiteindelijk aan de exacte foutboodschap die het logische probleem weergeeft. In een formule kan niet gedeeld worden door nul, hierdoor bekomen we overflow. Zodoende wordt beslist een lus in te bouwen voor elk gegevensveld die in een formule gebruikt wordt als teller. In onderstaand voorbeeld is de code te zien van TekstEV, m.a.w. het eigen vermogen. In de formule om de rendabiliteit op het eigen vermogen te berekenen wordt de nettowinst door het eigen vermogen gedeeld. Het eigen vermogen zorgt voor een foutmelding. Door het inpassen van volgende code wordt indien het eigen vermogen de waarde nul meekrijgt de rendabiliteit op het eigen vermogen op nul gezet en zo aan de databank doorgegeven. TekstEV krijgt hier bijgevolg ter verduidelijking de waarde nul mee. Indien iets anders dan nul ingegeven wordt bij het eigen vermogen, dan zal de eigenlijke formule berekend worden. If TekstEV = 0 Then rs!Rendabiliteit_op_het_eigen_vermogen = 0 TekstEV = 0 Else rs!Rendabiliteit_op_het_eigen_vermogen = CDbl(TekstEV) End If
CDbl(TekstNW)
/
2.2.2 DCF / DDM / Verwacht Rendement Naast deze data uit het jaarverslag, kan de waarde van een onderneming op een andere manier bepaald worden. Voor deze berekening volgen nog enkele formulieren. Merk op dat deze ratio’s niet altijd gelden, waardoor het invullen van deze formulieren geen verplichting vormt. In de paragraaf over de fundamentele analyse werd ons al gewezen op enkele belemmeringen van het DCF en het DDM model. Niet iedereen is er even tuk op om deze waarderingsmethodes te gebruiken en bijgevolg maken we aparte UserForms aan, die de waardering van het bedrijf uitrekenen aan de hand van deze modellen. Daarnaast wordt een aparte tabel aangemaakt om deze waarderingstechnieken in op te nemen. De nodige data zijn: d (verwacht dividend) rf (OLO-rente, rente overheidsobligaties met een looptijd 10 jaar) g (verwachte groeivoet)
22
rm (marktrisico, op dit ogenblik 3,5%) B (Beta = risicopremie) Elk van deze formulieren geniet éénzelfde opbouw. Zo ziet het formulier DDM er als volgt uit:
Figuur 3: Formulier Toevoegen Aandeel
2.2.3 Opvragen Het formulier ‘Toevoegen’ gebruiken we enkel bij het opslaan van data in onze Access databank. Het opvragen zelf gebeurt via een apart formulier: “Opvragen”. Omdat het gebeurt dat bepaalde jaren niet ingegeven zijn, zou het kunnen gebeuren dat bij een opvraging, kolommen data bevatten van een voorgaande analyse. Dit willen we voorkomen en daarom wordt het werkblad eerst leeg gemaakt. Een Messagebox waarschuwt de gebruiker met de tekst: “Wenst u het werkblad leeg te maken en een nieuw aandeel te analyseren?”. Dit is een ingebouwde veiligheid om niet ongewild, data te verwijderen. Na het aanklikken van Ja, verschijnt het eigenlijke formulier zoals te zien in volgende figuur.
Figuur 4: Formulier opvragen analyse
23
Er wordt gewerkt met een list waar de al ingevulde aandelen via Tickersymbool weergegeven worden. Bij het toevoegen van een aandeel wordt via volgende code het tickersymbool in een werkblad toevoegen opgenomen. Het formulier Opvragen zal in datzelfde werkblad de tickersymbolen ophalen. sData1 = TekstTicker.Text Sheets("Toevoegen").Activate If Cells(1, 1).Value = "" Then lRowNum1 = 1 Else lRowNum1 = ActiveSheet.UsedRange.Rows.Count + 1 End If Cells(lRowNum1, 1).Value = sData1
Vervolgens wordt de data, horend bij het geselecteerde Tickersymbool, uit de databank opgehaald en in de bijhorende tabel opgenomen. Dit gebeurt via een lus zodat indien een aandeel in een bepaald jaar niet geanalyseerd is, deze tabel leeg blijft en overgegaan wordt naar het volgende jaar. Zelf jaren invullen was geen optie, daarom werd gekozen om aan de hand van de jaren een bepaalde cel aan te duiden. Volgend stukje code geeft dit perfect weer. Range(Chr$(i - 1935) & "12").CopyFromRecordset data:=Algemene_solvabiliteitscoëfficiënt
Aan de hand van Range wordt een bepaalde cel aangeduid. Gezien er overgegaan wordt naar verschillende kolommen – die met letters werken – moet de kolomletter wijzigen. In onze lus gebruiken we de letter i, die een lus vormt van 2002 tot 2006. Door i in de Range formule te gebruiken kan telkens de juiste kolom geselecteerd worden. Als i staat voor 2002 en we trekken 1935 af en zetten dit om naar een letter via Chr$, bekomen we de letter of kolom B. De data wordt vervolgens opgehaald uit de databank en in die cel geplakt. Dit gebeurt voor alle formules om vervolgens in de lus over te gaan naar 2003, ... Voor bepaalde ratio's bestaan er breekpunten waardoor bij een positieve gradatie het getal groen wordt en indien negatief rood. Een opgenomen macro, voorwaardelijke opmaak, zorgt hiervoor. Het laatste wat zich in het formulier 'Opvragen’ afspeelt, is het toevoegen van extra informatie bij de diverse ratio's. Hier is gekozen voor comments die bij het overschrijden met de muis verschijnen. Op die wijze is het eenvoudig om de betekenis van de diverse ratio's te openen, te lezen en te laten verdwijnen. Eerst verschenen de comments in een lang kader, maar via verscheidene stukjes code wordt de shape nu automatisch aangepast aan de inhoud van het commentvak.
24
2.2.4 Tweevoudige analyse In deze spreadsheet heeft de gebruiker de mogelijkheid de fundamentele analyse van een individueel aandeel op te vragen, maar daarnaast kan hij eveneens twee aandelen op fundamenteel vlak met elkaar vergelijken. Dit gebeurt via het formulier “Tweevoudige analyse”, opgevraagd via de gelijknamige button en weergegeven in een nieuw werkblad. De twee te vergelijken aandelen worden naast elkaar geplaatst en er wordt een vergelijking gemaakt tussen de diverse ratio’s aan de hand van voorwaardelijke opmaak.
2.2.5 Leeg maken werkblad Om terug met een mooi werkblad te beginnen is er tevens een optie ingebouwd om het werkblad “Nieuw Aandeel” leeg te maken. Enkel de buttons blijven op hun plaats. Een klik op de button, die zorgt voor het leeg maken van het werkblad en die dus eigenlijk niet echt een formulier is, geeft eerst een waarschuwingsbericht. Hiermee willen we voorkomen dat het werkblad ongewild gewist wordt. Er wordt gewerkt met Messageboxen waar diverse standaardopties ingebouwd zijn, zoals hier vbYesNo gebruikt wordt. Indien Yes, wordt het werkblad gewist en wordt er gezorgd dat de achtergrondkleur zwart blijft. Bij het aanklikken van No blijven de huidige records, die zich in de body van het werkblad bevinden, behouden.
25
Hoofdstuk 3 Databank Als databank wordt gebruik gemaakt van Access. Enkele oplossingen worden hier gezocht. Ten eerste wordt gezocht naar een optimale manier om de gegevens op te slaan in de diverse tabellen. Daarnaast moeten de diverse data uit deze tabellen opgehaald worden. Vervolgens wordt ook gezocht om onze berekende formules in tabellen op te nemen. Ook voor het DDM en DCF model wordt naar een aparte tabel gezocht. Ten slotte zoeken we een oplossing om dubbele data te vermijden.
3.1 Creatie tabellen Het aanmaken van onze databank verloopt in verschillende stappen. De vraag wordt gesteld hoe de diverse data in onze tabellen terecht komt en eenmaal gecreëerd, terug opgevraagd wordt. De eerste stap is de creatie van de databank. Gezien het rudimentaire karakter zorgt dit voor niet veel problemen. Er werd gekozen voor een niet te ruime tijdshorizon, gezien dergelijke data minder navenant is. In de databank worden tabellen aangemaakt die 5 jaar teruggaan in tijd. Daarnaast wordt een tabel aangemaakt van het huidige jaar, die gebaseerd is op schattingen en kwartaalresultaten die door de belegger zelf getransponeerd worden over een looptijd van een gans jaar. In een verder stadium kan gezocht worden om automatisch databanken aan te maken vanuit Excel. Ook voor het verwachte rendement, de DCF en het DDM worden drie tabellen aangemaakt.
3.2 Toevoegen data Het toevoegen van de waarden aan de databank en dit in de verschillende tabellen, gebeurt via VBA-code geïmplementeerd in UserForm1 (Toevoegen Aandeel). Onderstaande code wordt gebruikt: s_Path = "C:\Documents and Settings\Eigenaar\Mijn documenten\Thesis\thesis.mdb" Set db = OpenDatabase(s_Path) Set rs = db.OpenRecordset(CmbJaar) With rs rs.AddNew rs!Naam = TekstAandeel rs!Sector = CmbSector rs!Ticker = TekstTicker rs.Update End With
26
In de eerste regel wordt het pad aangemaakt waar de databank zich bevindt en dit wordt doorgegeven aan s_Path, die vervolgens via Set db de databank, die zich op dat pad bevindt achter de schermen, opent. In die databank wordt vervolgens de juiste kolom geopend (CmbJaar) die geselecteerd is door de gebruiker. Aan deze tabel, die de naam rs wordt meegegeven, wordt data toegevoegd. Hier is dit de naam van het aandeel (TekstAandeel), de sector (CmbSector) en het tickersymbool (TekstTicker). Vervolgens wordt via Update de data weggeschreven. Niet alle code is hier opgenomen, maar dit geeft al een mooie kijk hoe de data in de databank wordt opgenomen. In bovenstaand voorbeeld wordt gebruikgemaakt van een absoluut pad om de databank in te vullen. Dit is echter niet handig als we de Excel en Access bestanden op een andere computer gebruiken. Een relatieve verwijzing dringt zicht op. Bijgevolg wordt volgende code gebruikt: s_Path = ActiveWorkbook.Path s_Path = s_Path & "\Thesis.mdb" Set DB = OpenDatabase(s_Path)
In plaats van aan s_Path de eigenlijke directory van de databank mee te geven, wordt de directory van het gebruikte rekenblad opgevraagd om daarbij de naam van de Access databank bij te voegen. Dit relatieve pad wordt vervolgens automatisch opgemaakt en kan opgevraagd worden op elke computer op voorwaarde dat de databank en de spreadsheet zich in dezelfde map bevinden.
3.3 Dubbele rijen De tabellen zijn aangemaakt en data wordt toegevoegd, maar een probleem moet nog opgelost worden. Bij het toevoegen van een aandeel kan een aandeel verscheidene malen in de databank voorkomen. Bij het toevoegen zorgt dit voor het overschrijven van vorige records en bij het terugschrijven naar Excel wordt data bijgevolg willekeurig overschreven. Het is duidelijk dat het de bedoeling is dat een aandeel slechts één maal in een tabel voorkomt. Het gaat hier om de 8 tabellen: 2002, 2003, 2004, 2005, 2006, DDM, DCF en Verwacht_rendement. Dit betekent dat aan de formulieren “Toevoegen Aandeel”, “DDM”, “DCF” en “Verwacht rendement” een aanpassing van de code moet gebeuren zodat de gebruiker bij het analyseren van een al toegevoegd aandeel de huidige data overschrijft en niet een record toevoegt met eenzelfde naam. Bij het uitwerken van een oplossing wordt in de databank Ticker als Primary Key aangeduid. Elk tickersymbool mag bijgevolg slechts één maal in de databank opgenomen worden. In codevorm wordt bijgevolg gezocht of het tickersymbool zich al in de databank bevindt. Indien dit zo is, verschijnt een messagbox met de vraag of 27
de gebruiker de data wil overschrijven. Het aanklikken van ja vervangt uiteraard de gegevens door de nieuwe gegevens. Een negatief antwoord zal ervoor zorgen dat de Userform verlaten wordt.
Figuur 5: Messagebox: Aandeel al geanalyseerd Bevindt het tickersymbool (het aandeel dus) zich nog niet in de databank, dan zal de gebruiker hier geen bericht van krijgen. Het te analyseren aandeel wordt vervolgens toegevoegd aan de databank. In codevorm ziet dit alles er als volgt uit: With rs .Index = "PrimaryKey" .Seek "=", TekstTicker If rs.NoMatch Then .AddNew !naam = TekstAandeel !Sector = CmbSector … .Update 'Tickersymbool in werkblad Toevoegen gieten 'Wissen van dubbele tickersymbolen in de lijst op het werkblad Toevoegen Else Dim vraag As Integer vraag = MsgBox("Het aandeel is reeds geanalyseerd. Wenst u het aandeel opnieuw te analyseren? Hierbij gaan de originele gegevens verloren.", vbYesNo, "Opgelet! Aandeel al geanalyseerd.") 'Indien keuze JA is If vraag = vbYes Then .Edit !naam = Te Aandeel !Sector = CmbSector … .Update Else Unload UserForm3 End If End If
28
3.4 Analysecontrole Na het voorkomen van dubbele records wordt een functie ingebouwd waar de gebruiker een al geanalyseerd aandeel via het formulier kan opvragen. Zo wordt bij een al geanalyseerd aandeel de tekstvakken van de userform ingevuld en kan de gebruiker hier aanpassingen aan verrichten. Bij de analyse van een aandeel op basis van de balans of jaarverslag is dit echter niet nodig, gezien die gegevens niet plots veranderen. Onze drie andere fundamentele analysevormen zijn echter wel zeer veranderlijk van aard. Bij deze drie userforms is de functie bijgevolg ingebouwd. Bij het invullen van het tickersymbool kan de gebruiker op controle klikken. Daarna zal indien het aandeel nog niet geanalyseerd is, een Messagebox verschijnen. Indien het aandeel wel al in de databank aanwezig is, worden de aanwezige gegevens weergegeven. Hieraan kan de gebruiker aanpassingen doen. Gezien het een al geanalyseerd aandeel is, zal na het klikken op OK - door wat in vorige paragraaf besproken is - het bericht komen met de vraag of de gebruiker de huidige analyse wil overschrijven. Onderstaande figuren tonen het formulier met de extra functie controle, samen met de bijhorende Messagebox.
Figuur 6: Formulier DDM (Controle)
Figuur 7: Messagebox aandeel nog niet geanalyseerd Eerst wordt via het tickersymbool gekeken of het aandeel al aanwezig is in onze databank. Een Messagebox verschijnt indien er geen ‘match’ is. Indien het tickersymbool wel aanwezig is dan zullen we enkele variabelen als objecten
29
declareren en de nodige gegevens ophalen uit de databank. Die gegevens worden daarna weggeschreven in de diverse tekstvakken in het formulier. Hieronder is dit in codevorm terug te vinden: s_Path = ActiveWorkbook.Path s_Path = s_Path & "\Thesis.mdb" Set DB = OpenDatabase(s_Path) Set rs = DB.OpenRecordset("DDM") With rs .Index = "PrimaryKey" .Seek "=", TekstTicker If rs.NoMatch Then MsgBox ("Aandeel nog niet geanalyseerd") Else TekstAandeel.Text = rs("Aandeel") & "" TekstRente.Text = rs("Rente") & "" TekstDiv.Text = rs("Dividend") & "" TekstGroeivoet.Text = rs("Groeivoet") & "" TekstBeta.Text = rs("Beta") & "" TekstMarktrisico.Text = rs("Marktrisico") & "" End If End With Set rs = Nothing Set DB = Nothing
Zoals in vorige paragrafen al gebeurt bij het bevragen van de databank wordt een relatief pad aangelegd. Vervolgens wordt de databank en de recordset geopend. Een vergelijking van de ticker gebeurt in de eerste stap. Bij het aanwezig zijn in de databank wordt uit de geopende recordset de nodige data gehaald. Bij het ingegeven van een nulwaarde zal er geen fout optreden door de twee “” op het einde van de code.
30
Hoofdstuk 4 Technische analyse 4.1 Formulier Het laatste formulier in deze spreadsheet is het formulier “Technische analyse”, die tevens de tweede analysevorm is. Daar waar fundamentele analyse de gezondheid van een onderneming test aan de hand van de balans en jaarrekeningen, berust de technische analyse op het creëren van grafieken en de analyse ervan. Het opbouwen van het luik technische analyse gebeurt in diverse stappen. Het belangrijkste punt is het ophalen van de historische data en het omzetten van die data in grafische vorm. Bij het invullen van het formulier “Technische analyse” wordt om die reden een tickersymbool ingegeven dat vervolgens gebruikt wordt om het te analyseren aandeel via het Internet (http://finance.yahoo.com) op te zoeken. Bij grafische analyse is de tijdshorizon eveneens van groot belang. Om die reden wordt een groepsvak met enkele optionbuttons aangemaakt die de gebruiker de keuze laat te kiezen tussen een grafisch verloop op 1, 3 of 5 jaar. Onderstaande paragrafen geven verdere uitleg betreffende deze tijdshorizon en het verwerken en analyseren van de opgehaalde gegevens.
4.1.1 Tijdshorizon De tijdshorizon is een belangrijk begrip bij het gebruik van technische analyse. Bepaalde beleggers prefereren een langer koersverloop, voor anderen is een koersverloop op 1 jaar een optimale horizon. Deze scriptie kiest voor 3 verscheidene looptijden - 1, 2 en 5 jaar – die de standaard looptijden zijn om aandelen te analyseren. Bovenstaande horizonten gelden echter enkel voor Amerikaanse aandelen. Voor andere “wereldwijde aandelen”, zoals Yahoo deze noemt, wordt enkel de aanwezige data uit de Yahoo databank weergegeven. In het formulier worden de drie looptijden aan de hand van optionbuttons in een groepsbox geplaatst. Op die wijze is het enkel mogelijk één van de drie looptijden te selecteren. Bij het openen van de tekstbox is 1 jaar als standaard horizon aangeduid. Als de gebruiker uitsluitend het tickersymbool ingeeft krijgt hij een grafisch verloop op 1 jaar. Dit initialiseren we als volgt: Private Sub UserForm_initialize() jaar1 = True End Sub
31
Aangezien we de keuze automatisch verwerken in het volgende stuk van de code, wordt de gekozen horizon in het al aangemaakte werkblad “Data” opgenomen en herbewerkt zodat de juiste tijdshorizon bekomen wordt. Die data kunnen we vervolgens terug toevoegen aan de code. Eerst wordt de looptijd (in jaren) in cel D1 op het blad “Data” weggeschreven. Vervolgens komt in cel E2 de datum van vandaag ( =Vandaag() ). Dit is nodig om de datum in het verleden up to date te houden. In een volgende stap wordt via de formule: =DATUM(JAAR(E1)-D1;MAAND(E1);DAG(E1)) de datum uit het verleden berekend en opgenomen in cel F1. Ten slotte bekomen we respectievelijk de dag, de maand en het jaar in cellen G1, H1 en J1. Deze berekende getallen worden terug opgevraagd en doorgegeven aan enkele variabelen in de VBA-code. Deze variabelen worden x, y en z genaamd en worden vervolgens terug omgezet in mooi gevormde datums via DateSerial en terug omgezet naar dag, maand en jaar om bij het opvragen te gebruiken. Hetzelfde gebeurt voor de startdatum. Volgende code illustreert dit: Sheets("Data").Select x = Range("I1").Value y = Range("H1").Value z = Range("G1").Value u = Range("I2").Value v = Range("H2").Value w = Range("G2").Value StartDate = DateSerial(x, y, z) EndDate = DateSerial(u, v, w) a = Format(Month(StartDate) - 1, "00") b = Day(StartDate) c = Year(StartDate) d = Format(Month(EndDate) - 1, "00") e = Day(EndDate) f = Year(EndDate)
4.1.2 Ophalen historische data Nu de tijdshorizon bepaald is, wordt overgegaan naar het eigenlijk ophalen van de data. Bij het ophalen van historische data wordt gebruik gemaakt van de doorgaans gehanteerde site http://finance.yahoo.com. Er kon eveneens gebruik gemaakt worden van de sites http://finance.google.com of http://moneycentral.msn.com, maar de keuze voor de yahoo-site ligt eerder voor de hand. Voordelen van deze site zijn dat ze veel gebruikt wordt, goed verzorgd en alom gekend is, maar vooral door velen als de beste site bestempeld wordt voor het ophalen van financiële data.
32
De achtergrond van onze keuze is gekend, dus gaan we over naar het ophalen van de data. Dit gebeurt via volgend stukje code: StrURL = "URL;http://table.finance.yahoo.com/table.csv?" StrURL = StrURL & "s=" & Aandeel & "&a=" & a & "&b=" & b StrURL = StrURL & "&c=" & c & "&d=" & d & "&e=" & e StrURL = StrURL & "&f=" & f & "&g=d&ignore=.csv" ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "Aandeel"
In de code staat StrURL voor bevraagde pagina. De exacte pagina wordt hier in verscheidene stappen aangevuld. Dat aanvullen van de URL gebeurt via verscheidene symbolen gaande van a tot en met g, inclusief s. In de eerste stap wordt de URL van de table.csv van finance.yahoo aangemaakt. Dit is de standaardbrok van de URL waaraan we parameters toevoegen. De volgende stap bestaat erin de naam van het aandeel aan de URL toe te voegen. Dit gebeurt via s=" & Aandeel & ". Daarna vullen we het tijdsverloop in, dat hierboven aangemaakt is. De diverse getallen worden op de juiste plaats toegevoegd. Deze opgehaalde gegevens worden tenslotte in een nieuw werkblad gegoten die de naam “Aandeel” met zich meekrijgt. De opgevraagde gegevens bevinden zich nu in de eerste kolom van het nieuw aangemaakte werkblad. Om deze gegevens te gebruiken moeten ze verspreid worden over diverse kolommen.
4.1.3 Selecteren kolommen De opgevraagde data in diverse kolommen gieten is nodig om ze later in een grafiek op te nemen. Het opvragen van websites en de bijhorende data gebeurt hier via het csv (comma-separated values) principe. Dat is een dataformaat dat werkt met tabellen waar de verscheidene velden van elkaar gescheiden zijn aan de hand van een komma, tab, ... Hier worden 7 kolommen gevormd: Date, Open, High, Low, Close, Volume, Adj. Close*. De Datum (Date) en de Slotkoers (Adj. Close*) hebben we nodig om de grafiek te vormen. We gebruiken Adj. Close, ofwel het aangepaste slot, omdat dit een vlotter verloop weergeeft. Hierin worden splits (het opsplitsten van een aandeel in kleiner stukken) en dividenduitkeringen niet opgenomen. Ook het volume gebruiken we in een grafiek. De code die zich hieronder bevindt voert dit uit: Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ Array(7, 1))
33
Eerst wordt de tekst die zich in kolom A bevindt geselecteerd. Die tekst moet omgezet worden in verscheidene kolommen startend bij cel A1. De data, waarvan de afscheiding gebeurt via Tab en Komma, wordt via een Array in de correcte kolommen (1 t.e.m 7) en bijhorende cellen ingebracht. Op die wijze komt een overzichtelijke weergave van de data tevoorschijn. De breedte van de kolommen past zich vervolgens automatisch aan, aan de data. De eerste kolom, startend vanaf cel A2, wordt omgezet in datumformaat. Daarna worden de gegevens volgens datum gerangschikt om in een grafiek op te nemen. De eerste datum bevindt zich zo in de eerste cel, A2.
4.2 Grafiek 4.2.1 Technische analyse en volume Eenmaal de gegevens in het werkblad opgenomen zijn wordt een grafiek toegevoegd. Dit gebeurt automatisch na het ingeven van het “correcte” tickersymbool en de looptijd. Bij het aanklikken van OK in het formulier start een macro die een grafiek toevoegt. Deze macro is opgenomen in Excel en aan onze vereisten aangepast in VBA. De grafiek wordt vervolgens in een werkblad “Koersverloop” geplaatst, die bij elke nieuwe analyse verwijderd en terug aangemaakt wordt. Ook de opmaak van de grafiek wordt via een opgenomen macro bepaald. Zo gaat de voorkeur uit naar een aangepast grafiektype “Gekleurde lijnen ”, dat met zijn zwarte achtergrond, geel-rood-witte lijnen, assen, … mooi oogt.
Figuur 8: Screenshot technische analyse 34
Het aanmaken van een grafiek met het volume gebeurt op eenzelfde wijze als het toevoegen van de grafiek met het koersverloop. Ditmaal wordt kolom F geselecteerd in plaats van kolom G en wordt de opmaak van de grafiek vooral zelf gekozen om zoveel mogelijk aan te leunen bij kleur en uitzicht van de grafiek die het trendverloop weergeeft. Aan de hand van de volumegrafiek kan een gebruiker zien of stijgingen of dalingen van de koers al dan niet ondersteund worden door het volume. Na enkele aanpassingen komen we tot een beter uitziende grafiek die het volume en het koersverloop combineert. Deze grafiek krijgt hier de naam “Technische analyse”. Die grafiek vormt zich door een aangepast grafiektype (Lijn-Kolommen met 2 assen) toe te passen op kolommen A, F en G. Na latere aanpassingen wordt het werkblad “Koersverloop” weggenomen in ruil voor het werkblad “Technische analyse” met zowel koersverloop als volume. Het volume op zich is wel nog terug te vinden. Het volume wordt op die wijze gemakkelijker als ondersteuningspunt vergeleken met de diverse indicatoren.
4.2.2 RSI Voor bovenstaande grafieken hebben we de gegevens al tot onze beschikking. De data wordt opgehaald via Yahoo en in het werkblad “Aandeel” gegoten. Deze data is rechtstreeks bruikbaar bij het opstellen van die grafieken. Voor de hierop volgende grafieken hebben we nieuwe data nodig. In het werkblad “Aandeel” worden daarom verscheidene nieuwe kolommen aangemaakt. Zo zijn er voor het berekenen van de RSI 5 extra kolommen nodig. In de eerste kolom (H) wordt het verschil tussen de laatste koers en de koers van de vorige beursdag weggeschreven, indien die laatste koers hoger is dan die koers van de vorige dag. Als de koers niet hoger is wordt 0 weggeschreven. In formulevorm komt dit neer op: =((ALS(G3
opgeteld, om vervolgens te delen door 14. Hetzelfde gebeurt in kolom K bij dalende koersen. Nu we over de nodige gegevens beschikken gaan we over naar het grafische verloop van de RSI. Een macro wordt opgenomen om die grafiek te vormen, maar die macro moet nog bewerkt worden samen met extra VBA-code. Dit onder andere om errors uit te sluiten. Wat standaard gebeurt bij het vormen van een grafiek die steeds dezelfde naam heeft is bij het opstarten van de macro, het terug deleten van de vorige grafiek. Sheets("RSI").Delete
Daarna wordt aan de respectievelijke kolommen die gebruikt worden een kolomtitel toegekend. Bijvoorbeeld voor kolom H: Range("H1").Value = "Omhoog"
De in Excel ingegeven code wordt vervolgens in de subform “Technische analyse” verwerkt. De eerste cel die gebruikt wordt, wordt geselecteerd. Daar komt de formule die via VBA toegevoegd wordt. Dit gebeurt met relatieve verwijzingen naar de diverse cellen. Eenmaal de formule is toegevoegd, willen we deze toevoegen aan de overige onderstaande rijen. Via AutoFill gebeurt dit automatisch vanaf de eerste cel tot de laatste rij. Terug maken we gebruik van de letter t om de laatste rij voor te stellen. Range("H3").Select ActiveCell.FormulaR1C1 = "=(IF(RC[-1]>R[-1]C[-1],RC[-1]-R[-1]C[-1],0))*1" Selection.AutoFill Destination:=Range("H3: H" & t)
De opgenomen macro zorgt voor het opstellen van de grafiek. Daarbij gebeuren enkele wijzigingen aan de code zoals het selecteren van een variabel databereik in het blad “Aandeel” en het aanpassen van de locatie. Terug aan de hand van de letter t wordt de laatste kolom geselecteerd. ActiveChart.SetSourceData Source:=Sheets("Aandeel").Range("A37:A" & t & ",Q37:Q" & t )_ ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="MACD"
Indien het Tickersymbool verkeerd gespeld wordt – bijvoorbeeld MSF in plaats van MSFT - of een niet bestaand Tickersymbool - zoals bijvoorbeeld het woord “basgitaarkist” - ingegeven wordt, dan gaat de subroutine over naar de Foutafhandeling. Daardoor worden de huidige werkbladen met grafieken verwijderd. Bij het opvragen van een nieuw aandeel zorgde dit in de eerste plaats voor problemen. In de code zouden werkbladen verwijderd worden die er niet meer zijn,
36
door het foute tickersymbool. Als oplossing worden in de foutafhandeling die werkbladen terug aangemaakt. In die terug aangemaakte werkbladen staan geen gegevens, dus het weergeven ervan leidt tot niets. Daarom worden deze terug onzichtbaar gemaakt.
Figuur 9: Screenshot grafiek RSI
4.2.3 OBV Voor de berekening van het On Balance Volume hebben we kolom F nodig waar het volume in opgenomen is. Het OBV kan in één enkele cel berekend worden via volgende formule: =(((ALS(G3>G2;T2+F3;T2-F3))*1)*1)*1. Indien het volume van de huidige beursdag groter is dan het volume van de vorige beursdag, wordt bij het geaccumuleerde volume dat volume bijgeteld. Bij een daling zal het volume worden afgetrokken van het vorige geaccumuleerde volume. Op eenzelfde wijze als bij de RSI worden werkbladen aangemaakt, verwijderd, formules aan de subroutine “Technische analyse” doorgegeven en een grafiek gecreëerd.
37
Figuur 10: Screenshot grafiek OBV
4.2.4 MACD De MACD is een derde indicator. Hier maken we gebruik van 5 kolommen. In kolom M, N en P worden respectievelijke de voortschrijdende exponentiële gemiddeldes op 12, 26 en 9 dagen berekend. Voor bijvoorbeeld het 12-daags voortschrijdend exponentieel gemiddelde hanteren we volgende formule in cel M13, wetende dat aan M1 de waarde 12 is meegegeven: =((M13+1/(M$1+1)*(G14-M13))*1)*1. Bij de berekening van de eigenlijke MACD wordt het voortschrijdende gemiddelde op 26 dagen afgetrokken van dat op 12 dagen. Daarna berekenen we het voortschrijdende gemiddelde op 9 dagen dat we aftrekken van de vorige berekende MACD. Het is deze indicator die gebruikt wordt in de grafiek. Als grafiektype wordt gekozen voor kolom, die het mogelijk maakt de gevonden data ten opzichte van de nul-as te extrapoleren. Hierbij was het nodig de waardes op de X-as naar onder te drukken. Voor het verdere opmaken van de code kan terug verwezen worden naar de RSI.
38
Figuur 11: Screenshot MACD
4.2.5 Moving Average Het exponential moving average op 20 en 50 dagen wordt hier berekend. Dit gebeurt op dezelfde wijze als bij de MACD. Als grafiek worden echter geen kolommen gebruikt, maar een lijngrafiek waar de voortschrijdende gemiddeldes ten opzichte van het koersverloop weergegeven worden.
Figuur 12: Screenshot Moving Average 39
4.3 Errorafhandeling Deze paragraaf gaat in op diverse problemen die de kop opsteken en hoe deze opgelost worden. Het gaat hier over de data range, verwijderen en terug aanmaken van werkbladen, boodschappen, punt komma probleem, verborgen werkbladen en screenupdates.
4.3.1 Data range De data varieert naargelang de gekozen tijdshorizon, maar eveneens het verschil tussen de verscheidene landen zorgt voor problemen. Zo zijn er bepaalde dagen waar er in Amerika wel handel is, dit terwijl er in België een feestdag is. We hebben bijgevolg een variabele range van gegevens die in een grafiek moeten komen. Het automatisch aanpassen van die range kan gebeuren via de functie offset, maar hier werd een eenvoudig zelf in VBA geprogrammeerd stukje code toegevoegd dat voor een variabele lengte zorgt. In onderstaande code is te zien dat in het werkblad “Aandeel” de laatste rij toegekend wordt aan de variabele t. We moeten 1 er van aftrekken omdat in de eerste rij kolomhoofden staan die niet mogen ingecalculeerd worden. Sheets("Aandeel").Select t = Range("A2").CurrentRegion.Rows.Count – 1
De gegevens worden vervolgens aan de grafiek toegevoegd, gebruikmakend van de variabele t om de range te bepalen: ActiveChart.SetSourceData Source:=Sheets("Aandeel").Range("A1:A" & t & ",G1:G" & t), _ PlotBy:=xlColumns
4.3.2 Wissen en terug aanmaken vorige werkbladen Bij het oproepen van de data is er zoals gezegd een verschillende looptijd. Dit betekent dat ook bij de diverse analyses een verschillend aantal cellen ingevuld is. We willen overlappingen met andere analyses voorkomen, want anders zorgt dit voor een verkeerd beeld van de technische analyse en klopt het grafiekverloop niet. Er wordt gekozen om het werkblad “Aandeel” om die reden volledig te wissen en bij het ophalen van de data terug aan te maken. Zo hebben we steeds de juiste gegevens. Ook bij het blad “Technische analyse” wordt telkens de macro uitgevoerd wordt, het blad verwijderd en terug aangemaakt. Het verwijderen van de cellen in het blad werkt niet gezien het een volledige grafiek is die opgenomen is. De gemakkelijkste manier is dan ook het volledig weghalen van het later terug aan te maken werkblad. Het weghalen en aanmaken van bijvoorbeeld een werkblad “Aandeel” gebeurt als volgt:
40
Sheets("Aandeel").Delete ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "Aandeel"
4.3.3 Boodschap Verder zorgt het ingeven van verkeerde Tickersymbolen voor een foutboodschap. Dit is niet wat bedoeld wordt met een gebruiksvriendelijke spreadsheet. Een gebruiker wenst niet naar VBA verwezen te worden, noch het vastlopen of niets doen van zijn spreadsheet. Om die reden wordt bij een Error overgegaan naar FoutAfhandeling. In het begin van de code wordt volgende lijn toegevoegd die geen verdere uitleg hoeft: On Error GoTo FoutAfhandeling
Die foutafhandeling zorgt voor een pop-up onder de noemer van een messagebox, Foutief Tickersymbool genaamd. Bij het opmaken van de messagebox stond alles op één lijn, daarom wordt een enter ingevoegd: & vbCr &. Op het einde wordt via Go to Einde, overgegaan naar “Einde:”, wat er voor zorgt dat de subroutine correct wordt afgesloten. Volgende code vat dit nog eens allemaal samen: Einde: Exit Sub FoutAfhandeling: Dim boodschap As Integer boodschap = MsgBox("Een foutief Tickersymbool werd opgegeven. Bij verdere problemen," & vbCr & "gelieve contact op te nemen met de ontwerper van deze spreadsheet " & vbCr & " op volgend adres:
[email protected].", , "Foutief Tickersymbool") Go to Einde
4.3.4 Punt/komma Het grootste probleem dat ondervonden is bij het aanmaken van de grafiek was het feit dat de getallen in Amerikaanse notatie waren, dus gescheiden aan de hand van punten. Het omzetten naar komma’s bleek geen sinecure, maar via een omweg werd de oplossing uiteindelijk gevonden. In het werkblad “Data” wordt een cel B15 opgemaakt als getal. In die cel wordt de waarde 1 geschreven. Vervolgens wordt die waarde 1 gekopieerd, waarna in het werkblad “Aandeel” de waarden geselecteerd worden die we wensen om te zetten naar Europese getallen. Vervolgens wordt via paste special de gekopieerde waarde 1 vermenigvuldigd met die waardes, waardoor een correct getal bekomen wordt. Dit is te zien in de diverse formules bij het vormen van de grafieken ("=(IF(RC[-1]>R[-1]C[1],RC[-1]-R[-1]C[-1],0))*1"), waar op het einde de *1 duidt op deze aanpassing. Deze
41
gegevens kunnen vervolgens perfect in de grafiek gebruikt worden. Sheets("Data").Select Range("B15").Select Selection.NumberFormat = "0.00" ActiveCell.FormulaR1C1 = "1" Selection.Copy Sheets("Aandeel").Select Range("B2:B" & t & ",G2:G" & t).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, SkipBlanks:=False, Transpose:=False
4.3.5 Screenupdates & DisplayAlerts Bij het verwijderen van werkbladen krijgen we een pop up die vraagt aan de gebruiker of die weldegelijk het werkblad wil verwijderen. Gezien de gebruiker niets van de code weet, is het ook niet nodig dat dit gevraagd wordt. Het verwijderen moet gewoon achter de schermen gebeuren. Om die reden worden de Display Alerts afgezet, want zo noemen dergelijke pop ups. Daarnaast worden tevens de Screenupdates afgezet. Zo ziet de gebruiker niet wat er zich juist afspeelt en verpinkt het beeld niet iedere seconde. Na het OK klikken, zal het formulier eventjes blijven staan tijdens de verwerking van de opvraging, om uiteindelijk het gewenste resultaat weer te geven.
4.3.6 Verborgen werkbladen Om de spreadsheet mooi te houden worden de diverse werkbladen verborgen. De gebruiker heeft sommige werkbladen niet nodig en hoeft ze dan ook niet te zien, laat staan aanpassen. Het verbergen van werkbladen kan simpel in Excel gebeuren, maar bij het opstarten van het formulier “Technische analyse” en bij het in werking treden van de macro krijgen we een foutboodschap. In de subroutine kan geen werkblad gevonden worden, deze zijn namelijk verborgen. Om die reden wordt in de code zelf het werkblad zichtbaar gemaakt. Dit is niet te zien, want ScreenUpdating is als False aangeduid. Op het einde van de bewerkingen worden de werkbladen terug onzichtbaar gemaakt, dit allemaal zonder dat de gebruiker ook maar iets merkt.
42
Hoofdstuk 5 Beveiliging 5.1 Werkblad 5.1.1 Fundamentele analyse Het is de bedoeling dat de gebruikers niets in de cellen kunnen ingeven. Zo wordt geen valse informatie weergegeven. Voor de fundamentele analyse geldt dit voor de werkbladen “Nieuw aandeel” en “Tweevoudige analyse”. Het is mogelijk de werkbladen handmatig te beveiligen via Opties: Beveiliging: Blad beveiligen, maar bij het terug opvragen van een analyse zal er een foutboodschap verschijnen. Reden hiervoor is dat via VBA-code geen toegang meer gevonden wordt tot het werkblad. Bij bewerkingen op het werkblad, zoals het opvragen van een nieuwe analyse of het verwijderen van de gegevens, mag het werkblad niet beveiligd zijn. De oplossing hiervoor is het opheffen van de beveiliging in de code van het formulier “Opvragen analyse”. Op het einde van de subroutine wordt de beveiliging vervolgens terug ingesteld. Bij de tweevoudige analyse wordt hetzelfde gedaan. Een probleem echter is dat de beveiliging in het werkblad “Nieuw aandeel” terug opgegeven wordt. Daarom wordt in de code ook het eerste werkblad opnieuw beveiligd. Hieronder is de code terug te vinden samen met het venster indien de beveiliging via Excel wordt ingesteld. ActiveSheet.Unprotect ‘Code ActiveSheet.protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Figuur 13: Venster Blad beveiligen
43
5.1.2 Technische analyse De zes werkbladen met grafieken die aangemaakt worden bij het opvragen van een technische analyse worden eveneens beveiligd. Het lijkt qua uitzicht mooier als er geen grafieken vervormd of verwijderd worden. Aan de andere kant is het nu wel niet meer mogelijk de kleur te veranderen of aantekeningen te maken op de grafiek. Een slimme gebruiker kan wel nog zelf beslissen de beveiliging op te heffen in Excel zelf. De beveiliging verloopt gelijkaardig met de fundamentele analyse. Met dit verschil dat bij de technische analyse een foutafhandeling volgt bij het ingeven van een foutief tickersymbool. Ook na die foutafhandeling moeten de werkbladen opnieuw beveiligd worden. Indien twee maal na elkaar een foutief tickersymbool ingegeven wordt, zorgt dit echter opnieuw voor een foutboodschap. Na de foutafhandeling worden de werkbladen immers onzichtbaar gemaakt, wat zorgt dat Excel/VBA de werkbladen die op unprotect moeten gezet worden niet terugvindt. Door in het begin van de code van het formulier “Technische analyse” de werkbladen terug zichtbaar te maken wordt dit opgelost.
5.2 Werkmap Ook de beveiliging van het werkblad dringt zich op. We wensen te voorkomen dat de gebruiker cruciale veranderingen aanbrengt waardoor de werking van de spreadsheet in het gedrang komt. Zo zou een gebruiker een werkblad van de technische analyse kunnen verwijderen waardoor bij een volgende technische analyse de spreadsheet vastloopt. Via Extra: Beveiliging: Werkmap beveiligen, wordt de Structuur beveiligd. Indien gewenst kan een wachtwoord gebruikt worden, maar we vertrouwen erop dat enkel geoefende gebruikers aan de beveiliging van de werkmap gaan sleutelen. De code die hierboven gebruikt wordt bij het beveiligen van de werkbladen wordt hier op een gelijkaardige wijze gebruikt, met dit verschil dat de code slechts eenmaal mag ingegeven worden. Het gaat namelijk om de volledige werkmap. Indien zoals hierboven voor elk werkblad de beveiliging zou worden ingesteld zou de code bij het tweede werkblad al blokkeren gezien de volledige werkmap beveiligd is. In zowel code- als venstervorm ziet dit er als volgt uit: ActiveWorkbook.Unprotect ‘Code ActiveWorkbook.protect Structure:=True, Windows:=False
44
Figuur 14: Werkmap beveiligen
5.3 VBA Naast het beveiligen van de diverse werkbladen en de werkmap in zijn geheel is het ook wensbaar de VBA-code te verbergen. Het is niet de bedoeling dat de gebruiker hieraan sleutelt, wat opnieuw tot nare gevolgen kan leiden, maar vooral de zekerheid naar plagiaat toe wordt hiermee ingebouwd. Voor het goede inzicht van deze thesis werd dit nog niet ingesteld, maar bij het verspreiden van deze spreadsheet kan dit wel ingesteld worden. Via Extra: Eigenschappen van VBA-project: tab Beveiliging in het VBA-venster kan door het project te vergrendelen voor weergave en een bijhorend wachtwoord voorkomen worden dat buitenstaanders de VBA-code te zien krijgen.
Figuur 15: VBA-code vergrendelen
45
Besluit De doelstelling van deze scriptie was het bouwen naar een gebruiksvriendelijk aandelenmodel voor de belegger. Dit is ook aardig gelukt. Zowel een fundamentele als technische analyse kan opgeroepen worden en aan de hand van diverse messageboxen wordt de gebruiker in de juiste richting gewezen, waardoor geen ongewenste foutmeldingen optreden. Voor het fundamenteel analyseren van een aandeel zijn er vier mogelijke vormen opgenomen. De belangrijkste vorm is de fundamentele analyse aan de hand van de jaarrekening en balans. Hierbij kan de gebruiker de gegevens toevoegen en worden ratio’s berekend. Voor de overige drie vormen wordt een bepaald mogelijk rendement of waarde berekend van een aandeel. Hierbij krijgt de gebruiker de extra functionaliteit om al eerder geanalyseerde aandelen aan te passen. Na het toevoegen van een analyse wordt via de knop opvragen een te selecteren aandeel weergegeven. Daarnaast is ook een knop leegmaken toegevoegd die voor een schoon werkblad zorgt. Een knop tweevoudige analyse laat de gebruiker toe, twee verschillende aandelen met elkaar te vergelijken. Natuurlijk nadat beide eerste door de gebruiker zelf zijn ingegeven. De technische analyse op zijn beurt gebeurt volledig automatisch en de gebruiker hoeft geen enkele data, buiten het tickersymbool van het te analyseren aandeel, in te geven. Op die wijze wordt data van het Internet gehaald en grafisch weergegeven in diverse werkbladen. Zo kan de gebruiker diverse technische indicatoren analyseren en met elkaar vergelijken, dit in combinatie met de fundamentele analyse. Een groot voordeel bij het opvragen van een online technische analyse is dat geen databank moet aangehouden worden. Bij het niet beschikken over een internetverbinding zal de gebruiker wel geen technische analyse kunnen ophalen, maar in de huidige Internetwereld gaan we er van uit dat de meeste mensen constant een internetverbinding ter beschikking hebben. Uiteindelijk kan de niet getrainde gebruiker door het beveiligen van de werkbladen geen schade aanbrengen aan de spreadsheet, waardoor een goede werking gegarandeerd blijft. Paspoortbeveiliging wordt niet toegepast. We doen dit zo om geoefende gebruikers toch de toelating te geven de spreadsheet aan te passen.
46
Doorheen deze scriptie nam ik de gelegenheid mij verder te verdiepen in zowel het financiële als het informaticagerichte, met de nadruk dan op het vlak van de informatica. Zo kon ik mijn VBA en Excel kennis verder uitdiepen. Dit zijn toch twee programma’s waarvan ik verwacht in mijn verdere carrière mee te werken. Het bouwen van een programma is echter nooit ten einde. Wegens de tijdspanne van deze scriptie werd het nodige geprogrammeerd, maar er zijn toch nog enkele dingen die nog beter kunnen of extra kunnen. Zo zouden volgende punten aangepast of toegepast kunnen worden: toevoegen van een deletebutton, waarbij gegevens uit de databank verwijderd kunnen worden, toevoegen van extra fundamentele en technische indicatoren, vergelijkende analyse over de sectoren heen, inbouwen van een portefeuillesysteem en online op te halen nieuwsberichten. Aan een programma kunnen steeds bijkomende implementaties verricht worden. Het zal ook afhangen van de verscheidene gebruikers wat zij zelf wensen. In de toekomst zal dit programma dan zeker ook nog verder worden uitgebreid.
47
Bronnen Boeken Aernhoudt, R., (2000), 'Bedrijfsfinanciering: Een benadering uit de praktijk', Roularta Books, Roeselare. Bell. D. en M. Parr, (2003), ‘Visual Basic .NET voor studenten’, Pearson Education Limited, United Kingdom. Bott, E. en W. Leonhard, (2004), 'Using Microsoft Office 2003'. Simpson, A., (2004), ‘Access VBA Programming’. Van der Elst, R., (1999), ‘Winnen met Aandelen. In vragen en antwoorden’, Standaard Uitgeverij, Antwerpen.
Websites Beursbrief, (2006 a), ‘Fundamentele analyse van aandelen’, http://www.beursbrief.be/fundamentele_analyse/default.asp, - 16 maart 2006 Beursbrief, (2006 b), ‘Technische analyse van aandelen’, http://www.beursbrief.be/technische_analyse/default.asp - 5 mei 2006 Cash, (2006), ‘Technische analyse’, http://www.cash.be/dossiers/technischeanalyse/technischeAnalyse.asp - 5 mei 2006 Dividendpagina, (2006), ‘Dividend Discount Model of DDM’, www.dividendpagina.nl/research/dividend-discount-model.asp, - 12 maart 2006
48
This document was created with Win2PDF available at http://www.win2pdf.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only. This page will not be added after purchasing Win2PDF.