Utilisation de FinalBarIndex()

XXEROFF
Posts: 23
Joined: 25 Mar 2016 08:36

Utilisation de FinalBarIndex()

Post by XXEROFF »

À propos de cette définition donnée dans le manuel du langage Express:

Définition: int FinalBarIndex ()
Signification: Retourne l’index de la période finale dans la période d’évaluation.
Exemple:
if IsFirstBar() then
begin
ExpMovingAverage(close, ema1, 5);
ExpMovingAverage(close, ema2, 33);
for i = 0 to FinalBarIndex()
helper[-i] = ema1[-i] – ema2[-i];
end



Je ne comprends pas la signification de cet extrait de programme. (Je retrouve ce schéma de programme dans le code du sentimentor Linear_regression_slope dans le répertoire Express).

Apparemment, l'indice de série "-i" est négatif (ou nul) => calcule-t'on des valeurs en aval de la première barre ?
Si oui, les valeurs de ema1[-i] et ema2[-i] doivent-elles être calculées auparavant par un autre extrait de programme en amont de celui-ci ?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Merci d'avance
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: Utilisation de FinalBarIndex()

Post by WHS Support »

Bonjour,

for i = 0 to FinalBarIndex() signifie tout simplement que i commence au début de la première barre et doit être calculé à chaque barre jusqu'à la dernière barre.

Votre barre de depart est donc la barre 0. Les barres suivantes vers la droite seront dans l'ordre -1, -2, -3 etc. Les barres vers la gauche seront les barres 1, 2, 3 etc. Les indices des barres suivantes vers la droite sur votre graphique auront donc une valeur négative : -i. Il s'agit donc effectivement des valeurs en aval
de la première barre.
Par contre, je crains de ne pas bien comprendre votre dernière question : Le calcul de l'EMA est fait à chaque barre -i.

Cordialement

WHS Lux
Ceres
Posts: 73
Joined: 31 Mar 2014 09:53

Re: Utilisation de FinalBarIndex()

Post by Ceres »

Bonjour ,

Merci pour cette explication ça m'aide aussi à progresser en algorithmique et stochastique :)
On peut donc distinctement commencer les instructions par IsFinalBar ou IsFirstBar.
On peut donc aussi utiliser dans ce premier cas ( IsFinalBar) , la structure répétitive FOR/DOWNTO (i.e turbo pascal)
Puis sublimer [-i] en (avec un vers l'amont ?)
Exemple ci-dessous par "décrémentation"

On décrémente une variable d'une valeur supérieure jusqu'à une valeur inférieure puis en exécutant l'instruction à chaque décrémentation (et non plus incrémentation )
On aura exactement le même résultat enfin je crois ( pour avoir vérifié en soustrayant les deux macd on a une ligne qui s’annule totalement )

NB : on peut aussi remplacer for i = FinalBarIndex() downto 0 ... par for i = CurrentBarindex() downto 0 ... on aura le même résultat - (mais on n'utilisera pas "for i = 0 to Currentbarindex()" :!: )

I.e. 2 structures répétitives {} en utilisant ou [-i] - IsFinalBar / Is FirstBar - For..DownTo / For..to

Code: Select all

express MacdHisto
vars

series EmaFast,EmaSlow,EmaSignal,macd,macdhisto,zero;
numeric i;
input $FastP(1,200,12),$SlowP(1,200,26),$Signal(1,200,9);


calculation
  calculateAtEveryTick (false);
  
  // Calculate the moving average convergence divergence with "if IsFirstBar() then and "For...to"
  // For .... to increment the variable of the lower value to a higher value
  // and to execute the intruction to each incrementation
  
   { if IsFirstBar() then
    begin
      ExpMovingAverage(c,EmaFast,$FastP);
      ExpMovingAverage(c,EmaSlow,$SlowP);
      
      for i = 0 to FinalBarIndex()
      macd[-i] = EmaFast[-i] - EmaSlow[-i];
      ExpMovingAverage(macd,EmaSignal,$Signal);
      for i = 0 to FinalBarIndex()
      macdhisto[-i] = macd[-i] - EmaSignal[-i];
    end }

  
  // Calculate the moving average convergence divergence with with if IsFinalBar() and "For ... Downto"
  // For .... Downto decrement the variable of the higher value to a lower value
  // and to execute the intruction to each decrementation
  
    if IsFinalBar() then
    begin
      ExpMovingAverage(c,EmaFast,$FastP);
      ExpMovingAverage(c,EmaSlow,$SlowP);
    
      for i = FinalBarIndex() downto 0
      macd[i] = EmaFast[i] - EmaSlow[i];
      ExpMovingAverage(macd,EmaSignal,$Signal);
      for i = FinalBarIndex() downto 0
      macdhisto[i] = macd[i] - EmaSignal[i];
    end
  
    
interpretation

begin
end

plotcandles(zero,macdhisto,macdhisto,zero);
nb par curiosité , sous l'invité dos (CMD) en vous plaçant sur le dossier express (cd express , ici sur partition g:) , vous trouverez tout les codes contenant cette chaîne de caractères en tapant par exemple : find /n "[-i]" g: *.txt
si cela peut vous aider.

Bien cordialement

ceres
mpcdmu
Posts: 19
Joined: 29 Jun 2013 00:11

Re: Utilisation de FinalBarIndex()

Post by mpcdmu »

Bonjour Ceres,

Je rencontre deux difficultés sur des codes en Express que je n'arrive pas à résoudre et que je ne souhaite traiter sur le forum.

Pourriez-vous me contacter en direct ?

Cordialement.

mpcdmu
Last edited by mpcdmu on 08 Jun 2016 08:08, edited 1 time in total.
Ceres
Posts: 73
Joined: 31 Mar 2014 09:53

Re: Utilisation de FinalBarIndex()

Post by Ceres »

Bonjour à vous
@ mpcdmu oui , c'est réalisable .
@ xxeroff plus de détails dans le Manuel Express function section "forloop2"

Cordialement

Ceres
XXEROFF
Posts: 23
Joined: 25 Mar 2016 08:36

Re: Utilisation de FinalBarIndex()

Post by XXEROFF »

WHS Support wrote:Bonjour,

for i = 0 to FinalBarIndex() signifie tout simplement que i commence au début de la première barre et doit être calculé à chaque barre jusqu'à la dernière barre.

Votre barre de depart est donc la barre 0. Les barres suivantes vers la droite seront dans l'ordre -1, -2, -3 etc. Les barres vers la gauche seront les barres 1, 2, 3 etc. Les indices des barres suivantes vers la droite sur votre graphique auront donc une valeur négative : -i. Il s'agit donc effectivement des valeurs en aval
de la première barre.
Merci, , cela confirme mes suppositions.
WHS Support wrote: Par contre, je crains de ne pas bien comprendre votre dernière question : Le calcul de l'EMA est fait à chaque barre -i.
Ah, très bien ! çà, je n'avais pas compris du tout !

Un grand merci au support, à Ceres, et à tous ceux qui ont contribué !

xxeroff
XXEROFF
Posts: 23
Joined: 25 Mar 2016 08:36

Re: Utilisation de FinalBarIndex()

Post by XXEROFF »

Bonjour,

Je reviens sur ce bout de programme, car finalement, tout n'est pas parfaitement clair pour moi:

Définition: int FinalBarIndex ()
Signification: Retourne l’index de la période finale dans la période d’évaluation.
Exemple:
if IsFirstBar() then
begin
ExpMovingAverage(close, ema1, 5);
ExpMovingAverage(close, ema2, 33);
for i = 0 to FinalBarIndex()
helper[-i] = ema1[-i] – ema2[-i];
end


Qu'est-ce exactement que la période d'évaluation ?
Y-a-t'il une différence entre la FinalBar et la CurrentBar ?

L'instruction : ExpMovingAverage(close, ema1, 5);
est-il un calcul ou la définition de la série ema pour tous les appels à cette série qui pourraient être faits dans les lignes postérieures du programme ?

Cette instruction est appelée pour IsFistBar(), donc si ce n'est qu'un calcul, il n'est fait que pour la première barre soit pour ema[0] ?

Si c'est une définition de la série ema quel que soit l'indice auquel on l'appliquera par la suite, je comprendrais, mais alors, on ne peut pas dire que l'instruction est véritablement un calcul,
le calcul est fait au moment de l'appel ema1[-i], c'est plutôt la définition d'une série (ce qui change de mes habitudes dans la programmation classique).

Merci d'avance pour vos lumières !

xxeroff
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: Utilisation de FinalBarIndex()

Post by WHS Support »

Bonjour,

Période d'évaluation : la partie du graphique à laquelle s'applique l'évaluation.

FinalBar : dernière bougie sur votre graphique.

CurrentBar : une bougie que vous allez designer spécifiquement dans votre code de programmation. Par ex. CurrentBar = FinalBar-20 (vous souhaitez désigner la 20ème bougie avant la fin du graphique).

ExpMovingAverage(close, ema1, 5); Est un calcul.
Vous l'appliquez à chaque bougie, puisque vous avez indiqué dans votre code que i = 0 to FinalBarIndex()

Cordialement

WHS Lux
XXEROFF
Posts: 23
Joined: 25 Mar 2016 08:36

Re: Utilisation de FinalBarIndex()

Post by XXEROFF »

Bonjour, et merci pour votre patience !
WHS Support wrote: Période d'évaluation : la partie du graphique à laquelle s'applique l'évaluation.
Cette partie est donc précisée dans le code par une boucle explicite (ou implicite peut-être ?),
et sinon va de la firstbar à la finalbar : c'est bien çà ?
FinalBar : dernière bougie sur votre graphique.

CurrentBar : une bougie que vous allez designer spécifiquement dans votre code de programmation. Par ex. CurrentBar = FinalBar-20 (vous souhaitez désigner la 20ème bougie avant la fin du graphique).
parfait
ExpMovingAverage(close, ema1, 5); Est un calcul.
Vous l'appliquez à chaque bougie, puisque vous avez indiqué dans votre code que i = 0 to FinalBarIndex()
Là, mes habitudes mentales sont vraiment remises en cause, c'est peut-être une question de vocabulaire;
Mais l'instruction ExpMovingAverage(close, ema1, 5); n'est pas à l'intérieur du corps de la boucle mais précède l'exécution de la boucle.

Je fais une différence entre la définition de la série ema1 (ou ema2) et l'exécution du calcul sur une valeur donnée d'indice.

en effet, si j'ai bien compris, le calcul des ema1[-i] et ema2[-i] n'a lieu que lors des appels ema1[-i] et ema2[-i] quand les itérations de la boucle sont exécutées itérativement..
Lors de ces appels, la définition de ema1 est utilisée, à savoir ExpMovingAverage(close, ema1, 5),
idem pour ema2.
Voilà pourquoi je crois comprendre que l'instruction ExpMovingAverage(close, ema1, 5) ne fait que préparer le calcul qui va avoir lieu dans la boucle,
voilà pourquoi je dis que c'est une définition de la série ema1.
Si le corps de la boucle était vide, j'imagine qu'aucun calcul ne serait fait ?
ou peut-être le seul calcul de la moyenne mobile exponentielle à l'instant de la barre courante au moment de l'instruction ExpMovingAverage(close, ema1, 5),
à savoir dans le cas présent, la firstbar puisqu'on est dans cette branche du test if.
Dans cette hypothèse, ExpMovingAverage(close, ema1, 5); serait à la fois:
-> l'exécution d'un calcul pour cette première barre, soit un calcul redondant avec celui de ema1[0] de la boucle,
-> et une définition de la série, à utiliser pour la boucle qui suit.

Est-ce que c'est comme cela qu'il faut voir les choses ?

Merci encore pour vos précisions.

xxeroff
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: Utilisation de FinalBarIndex()

Post by WHS Support »

Bonjour,

Pour être le plus précis possible, ExpMovingAverage(close, ema1, 5) est une fonction. Votre moyenne mobile évolue à chaque nouvelle barre et sa valeur change à chaque barre. Elle doit donc être recalculée à chaque barre. Il n'est donc pas juste de dire que c'est l'exécution d'un calcul pour la première barre, soit un calcul redondant avec celui de ema1[0] de la boucle.

C'est cependant bien une définition de la série, à utiliser pour la boucle qui suit. Puisque la boucle qui suit est le résultat, à chaque barre, de ema1 - ema2.

Vous avez donc dans votre programme deux 'calculs' consécutifs à chaque barre : les 2 ema et la différence entre les deux.

J'espère avoir pu vous éclaircir. La programmation n'est pas chose simple à expliquer. Avez-vous également lu le manuel des fonctions en Express disponible sous Aide sur la plateforme. Un section est consacré à IsFinalBar()/IsFirstBar() et elle vous aidera peut-être à comprendre son utilité.

Cordialement

WHS Lux
Post Reply

Return to “WHS NanoTrader”