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:

.
AEX uur grafiek uit het 'Wallstreet for Windows' pakket met daaronder weer de drie indicatoren:
Grafiek 2:

.
AEX daggrafiek via het platform van Alex met daaronder weer de drie indicatoren:
Grafiek 3:

.
AEX uur grafiek via het platform van Alex met daaronder de drie indicatoren:
Grafiek 4:

.
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.
.