Volume indicatoren

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Volume indicatoren

Bericht door Janus » zo mei 25, 2014 6:05 pm

Volume indicatoren

25-05-2014.
De prijs van aandelen op de beurs komt tot stand vanuit de vraag en aanbod gedaan door beleggers en/of speculanten; zo eenvoudig is het allemaal.
Wanneer de vraag het aanbod overstijgt zal de prijs stijgen en wanneer het aanbod de vraag overstijgt zal de prijs dalen.
De beslissing tot aankoop of verkoop wordt gedaan door mensen en of computer programma’s die op hun beurt weer ‘gestuurd’ worden door ‘krachten’ die van tevoren niet altijd even duidelijk zijn waar te nemen.
Wanneer een transactie eenmaal is gepasseerd zal het resultaat ervan zichtbaar zijn in de koers grafiek.
Het eerste zichtbare effect is natuurlijk de prijs.
Na een aantal gedane transacties zullen er vaak ook patronen zichtbaar worden in de koers grafiek, denk aan driehoeken, trendlijnen, kop-schouder-patronen enzovoorts.
Wat daarbij vaak wordt vergeten mee te nemen bij analyse van de koersgrafiek is het aantal verhandelde aandelen waaronder een patroon zichtbaar wordt, het volume.
Door niet alleen de prijs maar ook het aantal verhandelde aandelen (volume) mee te nemen bij het bekijken van een grafiek komen er signalen tevoorschijn die voorlopen op de patronen in de koersgrafiek alleen.

Nu zijn er al veel volume indicatoren aanwezig in de technische analyse kist vandaag de dag, maar ik wilde er nog een aantal aan toevoegen waarvan sommigen ook de opgebouwde energie in de grafiek weergeven, zoals de potentiële energie en de kinetische energie.
.
We beginnen eenvoudig, ik bespreek de koersgrafiek op dag basis, maar het hierna volgende gaat op voor elk tijdframe.
Ik schrijf er tevens een stukje ta-script code voor welke u kan downloaden vanaf het ta-script forum onder de volgende link:viewtopic.php?f=2&t=1314
.
Elke dag zien we een hoogste koers en een laagste koers in de dagelijkse koersbar verschijnen. Dat is dan de beweging van die dag (of welk ander tijdframe u aan houdt).
Deze beweging noemen we ‘velocity’.
Het maakt bij de volgende indicator niet uit op welk niveau de openingskoers of de slotkoers plaats vond, het gaat om de beweging van die dag, the velocity.
Het tweede item wat we meenemen in de indicator is het aantal verhandelde aandelen, het volume.
Wie de formule in de indicator bekijkt zal zien dat het volume zwaarder weegt dan de prijsrange bij een gegeven koersbar, waardoor accumulatie en distributie eerder zichtbaar wordt wat resulteert in eerdere signalen van een mogelijke uitbraak boven/onder een trendlijn dan in de koers grafiek alleen.
Onderstaand een voorbeeldje van deze indicator in de koersgrafiek van de AEX:
Grafiek 1:
Afbeelding

Eind Maart ziet u in de koersgrafiek een koopsignaal ontstaan wanneer de koers van de index boven de dalende trendlijn uit stijgt (blauwe pijl), in de indicator onder de koersgrafiek ziet u dat dit koop signaal al veel eerder gegeven wordt (blauwe pijl).
Met verkoop signalen werkt dat exact zo, zie onderstaande grafiek waarin eerder een verkoop signaal wordt aangegeven in de indicator grafiek dan in de koersgrafiek.

Grafiek 2:
Afbeelding

In bovenstaande twee voorbeeldjes met daarin een eenvoudige indicator ziet u al hoe belangrijk het volume is .

ta-script van deze indicator:

Code: Selecteer alles

{- Filename: Wcumveloc -}

{ versie 1.01 }
{ Volume indicator }
{ www.jstas.com    }

var
i                 : integer;
sRange,sWcumveloc : TSeries;
cond1,cond2       : Boolean;

begin

With Indicator Do
 Begin
  Newband      := True;
  RequiredBars := 10;
  ShortName    := 'Wcumveloc';
 End;
 
sRange  := CreateSeries(BarCount);
sWcumveloc := FillSeries(CreateSeries(BarCount),0);

For i := 1 To (BarCount-1) Do
 Begin
  If (H[i]<H[i-1]) And (L[i]<L[i-1])Then Cond1 := True Else Cond1 := False;
  If (H[i]>H[i-1]) And (L[i]>L[i-1])Then Cond2 := True Else Cond2 := False;
  sRange[i] := Abs(H[i]-L[i]);
   If i>1 Then
   Begin
    If Cond1 Then sWcumveloc[i] := sWcumveloc[i-1]-(sRange[i]*V[i]);
    If Cond2 Then sWcumveloc[i] := sWcumveloc[i-1]+(sRange[i]*V[i]);
    If Not(Cond1) And Not(Cond2)Then sWcumveloc[i] := sWcumveloc[i-1];
   End;
 End;

CreateLine(sWcumveloc).color:=ClRed;

End.
Volgende keer meer over het volume.
De indicator onder in de grafiek is nog experimenteel, het is een oscillator waaruit de ruis ten gevolge van aliasing is verwijderd.
Wordt vervolgt,
Vriendelijke groet,
Jan ;)
Laatst gewijzigd door Janus op zo sep 07, 2014 4:29 pm, 1 keer totaal gewijzigd.
Vriendelijke groet,
JanS ;)

AlbertH
Berichten: 169
Lid geworden op: di apr 27, 2010 12:47 pm
Locatie: Oegstgeest

Re: Volume indicatoren

Bericht door AlbertH » ma mei 26, 2014 10:30 am

Hallo Jan,

Enkele kleine opmerkingen.

Ik heb je indicator script uitgeprobeerd op de AEX in Alex Plus.
Het resultaat is een "Flat line".
Bij het nalopen van je script blijkt dat je gebruik maakt van de waarde V wat het volume is.
Het probleem is echter dat in Alex Plus er voor de AEX er geen volumes zijn (=0) vandaar de "flat line".
Volgens mij zijn er al eerder posts geweest die dit hebben aangekaart.

In je voorbeeld figuur zijn er wel volumes zichtbaar voor de AEX ? Gebruik je Wallstreet ?

Bij "normale" aandelen, zoals RD gaat het wel goed in Alex Plus.

In de "for loop" loop je van i:=1 omdat je anders een probleem krijgt met indexen [i-1].
Is het if statement "If (i>1) Then Begin...End" dan niet overbodig ? op deze wijze is het eerste element sWcumveloc[0] altijd 0. of zie ik dat verkeerd en is dit de bedoeling.

groeten,

Albert

PaulM
Berichten: 431
Lid geworden op: do apr 06, 2006 11:56 pm
Locatie: Enschede

Re: Volume indicatoren

Bericht door PaulM » ma mei 26, 2014 10:40 am

Hallo Jan,

sRange := Abs(H-L);
Is de High - Low niet altijd >=0?

Groeten,
Paul

Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Volume indicatoren

Bericht door Janus » ma mei 26, 2014 11:40 am

AlbertH en PaulM, bedankt voor jullie reacties.

Allereerst het volume van de AEX index; die voeg ik elke dag handmatig toe omdat de data verstrekker deze niet meer meegeeft (de reden daartoe is mij nog altijd onduidelijk).
Het aanwezig zijn van volume voor deze volume-indicator is natuurlijk wel een voorwaarde.
Omdat veel lezers die volume data niet bijhouden voor de AEX plaats ik voor hen een grafiekje van de index die laat zien dat het bijhouden daarvan wel nut heeft.

Dan is inderdaad zoals AlbertH opmerkt de loop if( i>1) overbodig geworden, deze was blijven staan vanuit een eerder opzetje van deze indicator.
En zoals PaulM al opmerkt, H-L is altijd groter of gelijk aan nul, dus abs() mag weggelaten worden.
Hieronder de aangepaste code.

Ik gebruik zowel WallStreet als Alex en diverse andere programma´s.

Code: Selecteer alles

{- Filename: Wcumveloc -}

{ versie 1.02 }
{ Volume indicator }
{ www.jstas.com    }

var
i                 : integer;
sRange,sWcumveloc : TSeries;
cond1,cond2       : Boolean;

begin

With Indicator Do
 Begin
  Newband      := True;
  RequiredBars := 10;
  ShortName    := 'Wcumveloc';
 End;
 
sRange  := CreateSeries(BarCount);
sWcumveloc := FillSeries(CreateSeries(BarCount),0);

For i := 1 To (BarCount-1) Do
 Begin
  If (H[i]<H[i-1]) And (L[i]<L[i-1])Then Cond1 := True Else Cond1 := False;
  If (H[i]>H[i-1]) And (L[i]>L[i-1])Then Cond2 := True Else Cond2 := False;
  sRange[i] := H[i]-L[i];
  If Cond1 Then sWcumveloc[i] := sWcumveloc[i-1]-(sRange[i]*V[i]);
  If Cond2 Then sWcumveloc[i] := sWcumveloc[i-1]+(sRange[i]*V[i]);
  If Not(Cond1) And Not(Cond2)Then sWcumveloc[i] := sWcumveloc[i-1];
 End;

CreateLine(sWcumveloc).color:=ClRed;

End.
Vriendelijke groet,
JanS ;)

paulkr
Berichten: 372
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Re: Volume indicatoren

Bericht door paulkr » ma mei 26, 2014 8:32 pm

Beste AlbertH,
Wanneer je niet beschikt over de volume gegevens is het wellicht een optie om de future van de index te nemen als uitgangspunt.
Mvg,
Paul

AlbertH
Berichten: 169
Lid geworden op: di apr 27, 2010 12:47 pm
Locatie: Oegstgeest

Re: Volume indicatoren

Bericht door AlbertH » di mei 27, 2014 9:56 am

Beste Paul,

Goed idee, het blijft natuurlijk wel een beetje aanmodderen.

Mvg,

Albert

paulkr
Berichten: 372
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Re: Volume indicatoren

Bericht door paulkr » zo jul 20, 2014 2:24 pm

Beste Janus,

De Wcumveloc indicator werkt prima, zoals in het intraday venster is te zien. Hij heeft alleen wat moeite met de omvang van de sp500 dag volumes. Wellicht dat dit is op te vangen om volumes boven een bepaalde waarde te delen, zodat de verschillen beter zichtbaar worden?
Heeft allemaal geen haast (zeker niet met deze hitte en vakantieperiode). Mocht je een keer willen kijken, dan zien we wel een update verschijnen. Overigens ben ik wel nieuwsgierig wat de ontwikkelingen zijn rond de experimentele sinusvormige ruisfilter …We hebben al een tijdje niets meer van je mogen vernemen. Zeker druk met vakantie en het gesloten forum . Veel plezier en geniet ervan en we zien je graag weer eens een interessante leerzame post plaatsen

Hierbij een plaatje van de Wcumveloc indicator in de dag grafiek (links) en de intraday grafiek (rechts) ;

Afbeelding

rechts valt een beetje weg van het het plaatje op het forum, vandaar nog een schreenshot
Afbeelding

Hierbij de sp500 volume tabel (dagwaardes);
Afbeelding

Mvg,
Paul

Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Volume indicatoren

Bericht door Janus » zo sep 07, 2014 4:00 pm

Hallo Paul,
Het volume vermenigvuldigd met de koerswaarde neemt inderdaad grote waarden aan, maar op zich is dat niet erg omdat WallStreet etc. dit automatisch aanpast en de waarde van de indicator op zich geen betekenis heeft, het gaat om 'het beeld' wat deze neerzet.
Ik heb echter toch even de mogelijkheid ingebouwd voor je om de komma in de indicator waarde op te schuiven naar links.
Delen door 10 is immers het opschuiven van de komma één plaats naar links, delen door 100 twee plaatsen etc.
Hieronder als eerste de aangepaste code en daarna een dag grafiek van de AEX waarbij de komma negen plaatsen is opgeschoven.

Code:

Code: Selecteer alles

{- Filename: Wcumveloc -}

{ versie 1.03 }
{ Volume indicator }
{ www.jstas.com    }

var
i,Dlr             : integer;
sRange,sWcumveloc : TSeries;
cond1,cond2       : Boolean;

begin

With Indicator Do
 Begin
  Newband      := True;
  RequiredBars := 10;
  ShortName    := 'Wcumveloc';
 End;

Dlr := CreateParameterInteger('Komma naar links Indic.wrde',0,30,0,False);
 
sRange  := CreateSeries(BarCount);
sWcumveloc := FillSeries(CreateSeries(BarCount),0);

For i := 1 To (BarCount-1) Do
 Begin
  If (H[i]<H[i-1]) And (L[i]<L[i-1])Then Cond1 := True Else Cond1 := False;
  If (H[i]>H[i-1]) And (L[i]>L[i-1])Then Cond2 := True Else Cond2 := False;
  sRange[i] := H[i]-L[i];
  If Cond1 Then sWcumveloc[i] := sWcumveloc[i-1]-(sRange[i]*V[i]);
  If Cond2 Then sWcumveloc[i] := sWcumveloc[i-1]+(sRange[i]*V[i]);
  If Not(Cond1) And Not(Cond2)Then sWcumveloc[i] := sWcumveloc[i-1];
 End;
 
sWcumveloc := DivideSeriesBy(sWcumveloc,Power(10,Dlr));

CreateLine(sWcumveloc).color:=ClRed;

End.
En dan even een grafiekje met deze indicator.
Grafiek:
Afbeelding

Begin Augustus is leuk om te zien dat de koers een lagere bodem neerzet, ook de RSI maar niet de Wcumveloc, die geeft een hoger bodempje, een vorm van divergentie, ik heb er even paarse streepjes en de letter A bijgeplaatst.
Ook geeft het ADX cluster en de DMI+ cluster een mooi signaal op dat moment.
Ook de doorbraak van de Wcumveloc door het dalende weerstandlijntje gaf een mooi signaaltje.
Succes,
Vriendelijke groet,
JanS ;)

paulkr
Berichten: 372
Lid geworden op: ma jun 25, 2007 1:34 pm
Locatie: Den Bosch

Re: Volume indicatoren

Bericht door paulkr » ma sep 08, 2014 8:28 am

Beste Janus,

Bedankt voor de aanpassing van het script en ga er vanavond mee aan de stag.
Het doet me goed weer een post van je op dit forum te zien.

Mvg,
Paul

Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Volume indicatoren

Bericht door Janus » vr sep 26, 2014 11:06 pm

Voor die mensen die het volume van de AEX vanaf Yahoo halen is het script van de Wcumveloc licht gewijzigd.
Het volume staat pas de volgende dag op de Yahoo site.
De indicator is dusdanig aangepast, dat wanneer het volume van vandaag nog niet is ingevuld, het volume van de voorgaande dag wordt gebruikt.
Dit voorkomt een horizontale lijn, maar u moet wel opletten dat de indicator niet de juiste waarde geeft wanneer het (nog niet ingevulde) volume sterk afwijkt.

Code: Selecteer alles

{- Filename: Wcumveloc -}

{ versie 1.04 }

// aanpassing in versie 1.04 :
// wanneer volume van 'vandaag'nog niet bekend is,
// dan wordt volume van de voorgaande dag gebruikt.
// voor die mensen die het volume van bijv. de AEX-index vanaf Yahoo halen
// link naar AEX volume Yahoo is:
//     http://finance.yahoo.com/q/hp?s=%5EAEX+Historical+Prices

{ Volume indicator }
{ www.jstas.com    }

var
i,Dlr             : integer;
sRange,sWcumveloc : TSeries;
cond1,cond2       : Boolean;

begin

With Indicator Do
 Begin
  Newband      := True;
  RequiredBars := 10;
  ShortName    := 'Wcumveloc';
 End;

Dlr := CreateParameterInteger('Komma naar links Indic.wrde',0,30,0,False);
 
sRange  := CreateSeries(BarCount);
sWcumveloc := FillSeries(CreateSeries(BarCount),0);

For i := 1 To (BarCount-1) Do
 Begin
  If (V[i]=0) Then V[i] := V[i-1];
  If (H[i]<H[i-1]) And (L[i]<L[i-1])Then Cond1 := True Else Cond1 := False;
  If (H[i]>H[i-1]) And (L[i]>L[i-1])Then Cond2 := True Else Cond2 := False;
  sRange[i] := H[i]-L[i];
  If Cond1 Then sWcumveloc[i] := sWcumveloc[i-1]-(sRange[i]*V[i]);
  If Cond2 Then sWcumveloc[i] := sWcumveloc[i-1]+(sRange[i]*V[i]);
  If Not(Cond1) And Not(Cond2)Then sWcumveloc[i] := sWcumveloc[i-1];
 End;
 
sWcumveloc := DivideSeriesBy(sWcumveloc,Power(10,Dlr));

CreateLine(sWcumveloc).color:=ClRed;

End.
Link naar historical prices op de Yahoo site: http://finance.yahoo.com/q/hp?s=%5EAEX+ ... cal+Prices
.
Vriendelijke groet,
JanS ;)

Cash
Berichten: 86
Lid geworden op: za okt 16, 2010 12:08 pm
Contacteer:

Re: Volume indicatoren

Bericht door Cash » za sep 27, 2014 3:38 pm

AEX volume_Pagina_1.jpg
Goedemiddag,

Interessant stukje.
Ik heb even wat zitten puzzelen in Excel. Kom tot de volgende grafiekjes:
1. van vanaf januari
2. kort de maand september.
Wat zien we:
1. lange termijn positief beide grafieken boven de lineaire lijn.
2. korte termijn negatief beide grafieken onder de lineaire lijn.
Maar dat wisten we natuurlijk al :lol:

Groet,
Cash
Geld is een vreemd goedje: wanneer je het bewaart heb je er niets aan en wanneer je het uitgeeft ben je het kwijt.

Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Volume indicatoren

Bericht door Janus » do okt 02, 2014 11:42 pm

Post door mij verwijderd, zie post verderop op 5-Oktober.
Er werd door mij hulp gevraagd voor wat betreft de smaenstelling van de AEX in oorgaande jaren, bedankt voor de reacties.
.
Laatst gewijzigd door Janus op zo okt 05, 2014 9:07 pm, 2 keer totaal gewijzigd.
Vriendelijke groet,
JanS ;)

Cash
Berichten: 86
Lid geworden op: za okt 16, 2010 12:08 pm
Contacteer:

Re: Volume indicatoren

Bericht door Cash » vr okt 03, 2014 8:35 am

Goedemorgen Jan,

Ik heb volume van Yahoo vanaf okt. 2004 in Excel.
Als je belangstelling hebt stuur ik het wel naar je mail.
Ik hoor het wel.

Groet,
Cash
Geld is een vreemd goedje: wanneer je het bewaart heb je er niets aan en wanneer je het uitgeeft ben je het kwijt.

AlbertH
Berichten: 169
Lid geworden op: di apr 27, 2010 12:47 pm
Locatie: Oegstgeest

Re: Volume indicatoren

Bericht door AlbertH » vr okt 03, 2014 12:11 pm

Hallo Jan,

Probeer deze site eens:
http://www.behr.nl/informatie/mandjes

Albert

Janus
Berichten: 1231
Lid geworden op: wo jan 30, 2008 2:07 am
Contacteer:

Re: Volume indicatoren

Bericht door Janus » zo okt 05, 2014 9:04 pm

Albert en Cash, bedankt voor het meedenken, ik heb er het volgende van gemaakt:
.
Volume van de AEX -index
Het volume van de AEX-index wordt helaas niet meer met de koersen meegegeven
Om toch 'realtime' het volume onder een grafiek weer te geven kunnen we gebruik maken de programmeer tool welke in diverse technische analyse programma's aanwezig is.
Een bekend programmeer programma wat in diverse technische analyse pakketten gebruikt wordt is ta-script.
Ikzelf gebruik ta-script in onder andere 'WallStreet for Windows' en voor het platform van Alex.
De ta-script code in dit stukje berekent het volume voor de AEX index door middel van het optellen van het volume van de onderliggende fondsen.
In 'Wallstreet for Windows' is de data van die fondsen op de harddisk aanwezig en dat bevordert de snelheid.
Bij de eerste opvraag in bijvoorbeeld Alex zal het even duren voordat de volume data onder de grafiek verschijnt omdat eerst de data van de onderliggende fondsen moet worden opgevraagd omdat die niet lokaal op de harddisk aanwezig is.
De code voor zover nu geschreven zet het volume voor de AEX neer vanaf Juni-2012 in 'Wallstreet for Windows'. In principe kan in dit analyse programma vanaf 1983 het volume worden weergegeven, ik heb gegevens gevonden wat betreft de samenstelling van de AEX index vanaf 1983.
In Alex kunnen we niet zover terug voor het volume, omdat fondsen die niet meer bestaan, zoals D.E. Masterblenders, niet meer kunnen worden opgevraagd; wat logisch is omdat Alex een handelsplatform is. Het volume in Alex gaat daarom terug tot September 2013.
De code is voor diverse tijdframes te gebruiken.
De samenstelling van de AEX wordt meestal in de maanden Maart, Juni, September of December gewijzigd, bij elke wijziging moet de code even worden aangepast.
Ik zal de code later nog uitbreiden met diverse volume tools, op dit moment is de code geschikt voor het weergeven van het volume via een vloeiende lijn, weergave van het volume via koers-staafjes, en natuurlijk kan de indicator de Wcumveloc weergeven.
Hieronder alvast een eerste opzet.
De ta-script code is te downloaden onder de volgende link: viewtopic.php?f=2&t=1314&p=8425#p8425
En dan even wat grafieken met daaronder de volume indicator.
.
AEX daggrafiek uit het 'Wallstreet for Windows' pakket, met daaronder het volume via een vloeiende lijn, het volume weergegeven via koers-staafjes en de wcumveloc:
Grafiek 1:
Afbeelding
.
AEX uur grafiek uit het 'Wallstreet for Windows' pakket met daaronder weer de drie indicatoren:
Grafiek 2:
Afbeelding
.
AEX daggrafiek via het platform van Alex met daaronder weer de drie indicatoren:
Grafiek 3:
Afbeelding
.
AEX uur grafiek via het platform van Alex met daaronder de drie indicatoren:
Grafiek 4:
Afbeelding
.
Dit bericht is ook te lezen op: http://www.jstas.com/Volume/volume_van_de_aex.htm
Succes ermee.
De ta-script code:

Code: Selecteer alles

{- Filename: Volume AEX -}

//Versie 1.02 dd. 05-10-2014
//Berekent AEX volume via onderliggende fondsen
// www.JSTAS.com

 Type
  Verzameling = Record
   Dlr      : Integer;
   sFondsId : array[0..24] of String;
   sIndexVol,sIndexVolE,sWcumveloc,sVolBar,sVolMa,sVolLijn : TSeries;
  End;

Var
 Fdv : Verzameling;
//*************************************************************

Procedure Jaar2011_2();
Begin

{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AAPERAM';      // Aperam
  Fdv.sFondsId[4]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[5]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[6]  := 'AVIB';         // Corio
  Fdv.sFondsId[7]  := 'AAIR FRANCE';  // Air France
  Fdv.sFondsId[8]  := 'ABOSKALIS';    //Boskalis
  Fdv.sFondsId[9]  := 'ADSM';         // DSM
  Fdv.sFondsId[10] := 'AFUGRO';       // Fugro
  Fdv.sFondsId[11] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[12] := 'AING';         // ING
  Fdv.sFondsId[13] := 'AKPN';         // KPN
  Fdv.sFondsId[14] := 'APHILIPS';     // Philips
  Fdv.sFondsId[15] := 'APOSTNL';      // Post NL
  Fdv.sFondsId[16] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[17] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[18] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[19] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[20] := 'ATOMTOM';      // TomTOm
  Fdv.sFondsId[21] := 'ATNT EXPRESS'; // TNT Express
  Fdv.sFondsId[22] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[23] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[24] := 'AWOLT.KLUW';   // Wolters Kluwer
{$ENDIF}

End;
//*************************************************************

Procedure Jaar2012_3();
Begin

{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AAPERAM';      // Aperam
  Fdv.sFondsId[4]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[5]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[6]  := 'AVIB';         // Corio
  Fdv.sFondsId[7]  := 'AAIR FRANCE';  // Air France
  Fdv.sFondsId[8]  := 'ABOSKALIS';    //Boskalis
  Fdv.sFondsId[9]  := 'ADOUWE EGBERT';// DE Master Blenders
  Fdv.sFondsId[10] := 'ADSM';         // DSM
  Fdv.sFondsId[11] := 'AFUGRO';       // Fugro
  Fdv.sFondsId[12] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[13] := 'AING';         // ING
  Fdv.sFondsId[14] := 'AKPN';         // KPN
  Fdv.sFondsId[15] := 'APHILIPS';     // Philips
  Fdv.sFondsId[16] := 'APOSTNL';      // Post NL
  Fdv.sFondsId[17] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[18] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[19] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[20] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[21] := 'ATNT EXPRESS'; // TNT Express
  Fdv.sFondsId[22] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[23] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[24] := 'AWOLT.KLUW';   // Wolters Kluwer
{$ENDIF}

End;
//*************************************************************

Procedure Jaar2013_1();
Begin

{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AAPERAM';      // Aperam
  Fdv.sFondsId[4]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[5]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[6]  := 'AVIB';         // Corio
  Fdv.sFondsId[7]  := 'AAIR FRANCE';  // Air France
  Fdv.sFondsId[8]  := 'ADOUWE EGBERT';// DE Master Blenders
  Fdv.sFondsId[9]  := 'ADSM';         // DSM
  Fdv.sFondsId[10] := 'AFUGRO';       // Fugro
  Fdv.sFondsId[11] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[12] := 'AING';         // ING
  Fdv.sFondsId[13] := 'AIMTECH';      // Imtech
  Fdv.sFondsId[14] := 'AKPN';         // KPN
  Fdv.sFondsId[15] := 'APHILIPS';     // Philips
  Fdv.sFondsId[16] := 'APOSTNL';      // Post NL
  Fdv.sFondsId[17] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[18] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[19] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[20] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[21] := 'ATNT EXPRESS'; // TNT EXPRESS
  Fdv.sFondsId[22] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[23] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[24] := 'AWOLT.KLUW';   // Wolters Kluwer
{$ENDIF}

End;
//*************************************************************

Procedure Jaar2013_2();
Begin

{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[4]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[5]  := 'AVIB';         // Corio
  Fdv.sFondsId[6]  := 'AAIR FRANCE';  // Air France
  Fdv.sFondsId[7]  := 'ADOUWE EGBERT';// DE Master Blenders
  Fdv.sFondsId[8]  := 'ADSM';         // DSM
  Fdv.sFondsId[9]  := 'AFUGRO';       // Fugro
  Fdv.sFondsId[10] := 'UGEMALTO';     // Gemalto
  Fdv.sFondsId[11] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[12] := 'AING';         // ING
  Fdv.sFondsId[13] := 'AIMTECH';      // Imtech
  Fdv.sFondsId[14] := 'AKPN';         // KPN
  Fdv.sFondsId[15] := 'APHILIPS';     // Philips
  Fdv.sFondsId[16] := 'APOSTNL';      // Post NL
  Fdv.sFondsId[17] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[18] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[19] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[20] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[21] := 'ATNT EXPRESS'; // TNT Express
  Fdv.sFondsId[22] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[23] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[24] := 'AWOLT.KLUW';   // Wolters Kluwer
{$ENDIF}

End;
//*************************************************************

Procedure Jaar2013_3();
Begin
  Fdv.sFondsId[0]  := '28825';   // Aegon
  Fdv.sFondsId[1]  := '1246537'; // Ahold
  Fdv.sFondsId[2]  := '136';     // Akzo Nobel
  Fdv.sFondsId[3]  := '59';      // Arcelor
  Fdv.sFondsId[4]  := '723288';  // ASML
  Fdv.sFondsId[5]  := '2846';    // Corio
  Fdv.sFondsId[6]  := '109448';  // Air France
  Fdv.sFondsId[7]  := '182176';  // DSM
  Fdv.sFondsId[8]  := '178223';  // Fugro
  Fdv.sFondsId[9]  := '179762';  // Gemalto
  Fdv.sFondsId[10] := '107395';  // Heineken
  Fdv.sFondsId[11] := '110220';  // ING
  Fdv.sFondsId[12] := '233829';  // Imtech
  Fdv.sFondsId[13] := '107740';  // KPN
  Fdv.sFondsId[14] := '31747';   // Philips
  Fdv.sFondsId[15] := '420215';  // Post NL
  Fdv.sFondsId[16] := '166';     // Randstad
  Fdv.sFondsId[17] := '242786';  // Reed Elsevier
  Fdv.sFondsId[18] := '180134';  // Royal Dutch Shell
  Fdv.sFondsId[19] := '196913';  // SBM
  Fdv.sFondsId[20] := '420213';  // TNT Express
  Fdv.sFondsId[21] := '39258';   // Unibail
  Fdv.sFondsId[22] := '205556';  // Unilever
  Fdv.sFondsId[23] := '11147';   // Wolters Kluwer
  Fdv.SFondsId[24] := '549256';  // Ziggo
  
{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[4]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[5]  := 'AVIB';         // Corio
  Fdv.sFondsId[6]  := 'AAIR FRANCE';  // Air France
  Fdv.sFondsId[7]  := 'ADSM';         // DSM
  Fdv.sFondsId[8]  := 'AFUGRO';       // Fugro
  Fdv.sFondsId[9]  := 'UGEMALTO';     // Gemalto
  Fdv.sFondsId[10] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[11] := 'AING';         // ING
  Fdv.sFondsId[12] := 'AIMTECH';      // Imtech
  Fdv.sFondsId[13] := 'AKPN';         // KPN
  Fdv.sFondsId[14] := 'APHILIPS';     // Philips
  Fdv.sFondsId[15] := 'APOSTNL';      // Post NL
  Fdv.sFondsId[16] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[17] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[18] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[19] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[20] := 'ATNT EXPRESS';  // TNT Express
  Fdv.sFondsId[21] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[22] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[23] := 'AWOLT.KLUW';   // Wolters Kluwer
  Fdv.SFondsId[24] := 'AZIGGO';       // Ziggo
{$ENDIF}

End;
//*************************************************************

Procedure Jaar2014();
 Begin
  Fdv.sFondsId[0]  := '28825';   // Aegon
  Fdv.sFondsId[1]  := '1246537'; // Ahold
  Fdv.sFondsId[2]  := '136';     // Akzo Nobel
  Fdv.sFondsId[3]  := '59';      // Arcelor
  Fdv.sFondsId[4]  := '723288';  // ASML
  Fdv.sFondsId[5]  := '220883';  // Boskalis
  Fdv.sFondsId[6]  := '2846';    // Corio
  Fdv.sFondsId[7]  := '320393';  // Delta Lloyd
  Fdv.sFondsId[8]  := '182176';  // DSM
  Fdv.sFondsId[9]  := '178223';  // Fugro
  Fdv.sFondsId[10] := '179762';  // Gemalto
  Fdv.sFondsId[11] := '107395';  // Heineken
  Fdv.sFondsId[12] := '110220';  // ING
  Fdv.sFondsId[13] := '107740';  // KPN
  Fdv.sFondsId[14] := '951371';  // OCI
  Fdv.sFondsId[15] := '31747';   // Philips
  Fdv.sFondsId[16] := '166';     // Randstad
  Fdv.sFondsId[17] := '242786';  // Reed Elsevier
  Fdv.sFondsId[18] := '180134';  // Royal Dutch Shell
  Fdv.sFondsId[19] := '196913';  // SBM
  Fdv.sFondsId[20] := '420213';  // TNT Express
  Fdv.sFondsId[21] := '39258';   // Unibail
  Fdv.sFondsId[22] := '205556';  // Unilever
  Fdv.sFondsId[23] := '11147';   // Wolters Kluwer
  Fdv.SFondsId[24] := '549256';  // Ziggo  
  
{$IFDEF PLATFORM-WS}
  Fdv.sFondsId[0]  := 'AAEGON';       // Aegon
  Fdv.sFondsId[1]  := 'AAHOLD';       // Ahold
  Fdv.sFondsId[2]  := 'AAKZO';        // Akzo Nobel
  Fdv.sFondsId[3]  := 'AISPAT';       // Arcelor
  Fdv.sFondsId[4]  := 'AASM LITHO';   // ASML
  Fdv.sFondsId[5]  := 'ABOSKALIS';    // Boskalis
  Fdv.sFondsId[6]  := 'AVIB';         // Corio
  Fdv.sFondsId[7]  := 'ADELTA LLOYD'; // Delta Lloyd
  Fdv.sFondsId[8]  := 'ADSM';         // DSM
  Fdv.sFondsId[9]  := 'AFUGRO';       // Fugro
  Fdv.sFondsId[10] := 'UGEMALTO';     // Gemalto
  Fdv.sFondsId[11] := 'AHEINEKEN';    // Heineken
  Fdv.sFondsId[12] := 'AING';         // ING
  Fdv.sFondsId[13] := 'AKPN';         // KPN
  Fdv.sFondsId[14] := 'AOCI';         // OCI
  Fdv.sFondsId[15] := 'APHILIPS';     // Philips
  Fdv.sFondsId[16] := 'ARANDSTAD';    // Randstad
  Fdv.sFondsId[17] := 'AELSEVIER';    // Reed Elsevier
  Fdv.sFondsId[18] := 'AKON.OLIE';    // Royal Dutch Shell
  Fdv.sFondsId[19] := 'AIHC-CAL';     // SBM
  Fdv.sFondsId[20] := 'ATNT EXPRESS'; // TNT Express
  Fdv.sFondsId[21] := 'EUNIBAIL';     // Unibail
  Fdv.sFondsId[22] := 'AUNILEVER';    // Unilever
  Fdv.sFondsId[23] := 'AWOLT.KLUW';   // Wolters Kluwer
  Fdv.SFondsId[24] := 'AZIGGO';       // Ziggo
{$ENDIF}

End;
//*************************************************************

Procedure JaarVolume(k:integer);
Var
j      : Integer;
sFonds : array[0..24] of TSeriesEx;

Begin
If (BarCount >0)  Then
 Begin
   For j:=0 to k Do
    Begin
     sFonds[j] := ReadPrices(Fdv.sFondsId[j], BarInterval, DateTime[0], Now, 0);
     sFonds[j] := SyncSeriesEx(sFonds[j], smInsDuplicate);
     If j=0 Then
      Fdv.sIndexVol := CopySeries(sFonds[j].Volume)
     Else
      Fdv.sIndexVol := AddSeries(Fdv.sIndexVol,sFonds[j].Volume);
     End;
    End;
 End;
//*************************************************************

Procedure EindIndex(Dtbeg,DtEnd:TDateTime);
Var
i : Integer;
Begin
For i := 0 To BarCount-1 Do
 Begin
  If (DateTime[i]>DtBeg) And (DateTime[i]<DtEnd) Then
   Begin
    Fdv.sIndexVolE[i] := Fdv.sIndexVol[i];
   End;
 End;
End;
//*************************************************************

Procedure Vul_FdvsIndexVolE();
Begin

Fdv.sIndexVolE := CreateSeries(BarCount);

{$IFDEF PLATFORM-WS}
 Jaar2011_2();
 JaarVolume(24);
 EindIndex(EncodeDate(2011,06,19),EncodeDate(2013,09,22));

 Jaar2012_3();
 JaarVolume(24);
 EindIndex(EncodeDate(2012,09,23),EncodeDate(2013,03,16));

 Jaar2013_1();
 JaarVolume(24);
 EindIndex(EncodeDate(2013,03,17),EncodeDate(2013,06,22));

 Jaar2013_2();
 JaarVolume(24)
 EindIndex(EncodeDate(2013,06,23),EncodeDate(2013,09,21));
{$ENDIF}

Jaar2013_3();
JaarVolume(24);
EindIndex(EncodeDate(2013,09,22),EncodeDate(2014,03,22));

Jaar2014();
JaarVolume(24);
EindIndex(EncodeDate(2014,03,23),EncodeDate(2015,03,21));

End;
//*************************************************************

Procedure Wcumveloc(MAwrde:Integer;Gem:Boolean);
Var
i           : integer;
sRange      : TSeries;
cond1,cond2 : Boolean;

Begin
Fdv.sWcumveloc := FillSeries(Fdv.sWcumveloc,0);
sRange         := CreateSeries(BarCount);

For i := 1 To (BarCount-1) Do
 Begin
 If IsValid(Fdv.sIndexVolE[i]) Then
 Begin
  If (H[i]<H[i-1]) And (L[i]<L[i-1])Then Cond1 := True Else Cond1 := False;
  If (H[i]>H[i-1]) And (L[i]>L[i-1])Then Cond2 := True Else Cond2 := False;
  sRange[i] := H[i]-L[i];
  If Cond1 Then
         Fdv.sWcumveloc[i] := Fdv.sWcumveloc[i-1]-(sRange[i]*Fdv.sIndexVolE[i]);
  If Cond2 Then
         Fdv.sWcumveloc[i] := Fdv.sWcumveloc[i-1]+(sRange[i]*Fdv.sIndexVolE[i]);
  If Not(Cond1) And Not(Cond2)Then Fdv.sWcumveloc[i] := Fdv.sWcumveloc[i-1];
 End;
 End;

Fdv.sWcumveloc := DivideSeriesBy(Fdv.sWcumveloc,Power(10,Fdv.Dlr));
If Gem Then Fdv.sVolMa  := Ma(Fdv.sWcumveloc,MaSimple,MAwrde);
End;
//*************************************************************

Procedure VolumeBars(MAwrde:Integer;Gem:Boolean);
Begin
  Fdv.sVolBar := Fdv.sIndexVolE;
  If Gem Then Fdv.sVolMa  := Ma(Fdv.sIndexVolE,MaSimple,MAwrde);
End;
//*************************************************************

Procedure VolumeLijn(Mawrde:Integer;Gem:Boolean);
Begin
  Fdv.sVolLijn := Fdv.sIndexVolE;
  If Gem Then Fdv.sVolMa := Ma(Fdv.sVolLijn,MaSimple,MAwrde);
End;
//*************************************************************

Procedure LijnVolBar();
Begin
 With CreateLine(Fdv.sVolBar) Do
  Begin
   Color    := ClRed;
   Name     := 'VolumeBars';
   LineType := LtBar;
  End;
End;
//*************************************************************

Procedure LijnVolLijn();
Begin
 With CreateLine(Fdv.sVolLijn) Do
  Begin
   Color := ClRed;
   Name  := 'Volume lijn';
  End;
End;
//*************************************************************

var
IndKze, MAwrde : Integer;
Opties         : String;
Gem            : Boolean;

Begin
With Indicator Do
 Begin
  Newband      := True;
  RequiredBars := 10;
  ShortName    := 'AEX volume ';
 End;
Fdv.sWcumveloc := CreateSeries(BarCount);
Fdv.sVolLijn   := CreateSeries(BarCount);
Fdv.sVolBar    := CreateSeries(BarCount);
Fdv.sVolMa     := CreateSeries(Barcount);

Vul_FdvsIndexVolE();

Opties := 'Wcumveloc' #9
          'VolumeBars'#9
          'Volumelijn';

IndKze  := CreateParameterSelect('Indicator keuze:',Opties,0,False);
Fdv.Dlr := CreateParameterInteger('Cumveloc schaal-deler',0,30,0,False);
Gem     := CreateParameterBoolean('Weergave gemidddeldelijn in Indicator',
                                                                   False,False);
MAwrde := CreateParameterInteger('Waarde gemiddelde lijn',1,200,10,False);

Case IndKze Of
  0 : Wcumveloc(Mawrde,Gem);
  1 : Volumebars(MAwrde,Gem);
  2 : Volumelijn(Mawrde,Gem);
End;

CreateLine(Fdv.sWcumveloc).color:=ClRed;
LijnVolBar();
LijnVolLijn();
CreateLine(Fdv.sVolMa).Color := ClBlue;

End.
    
.
Vriendelijke groet,
JanS ;)

Plaats reactie