Utilisation de FinalBarIndex()
Utilisation de FinalBarIndex()
À 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
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
- WHS Support
- Posts: 2434
- Joined: 14 Feb 2013 10:27
Re: Utilisation de FinalBarIndex()
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
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
Re: Utilisation de FinalBarIndex()
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
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
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);
si cela peut vous aider.
Bien cordialement
ceres
Re: Utilisation de FinalBarIndex()
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
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.
Re: Utilisation de FinalBarIndex()
Bonjour à vous
@ mpcdmu oui , c'est réalisable .
@ xxeroff plus de détails dans le Manuel Express function section "forloop2"
Cordialement
Ceres
@ mpcdmu oui , c'est réalisable .
@ xxeroff plus de détails dans le Manuel Express function section "forloop2"
Cordialement
Ceres
Re: Utilisation de FinalBarIndex()
Merci, , cela confirme mes suppositions.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.
Ah, très bien ! çà, je n'avais pas compris du tout !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.
Un grand merci au support, à Ceres, et à tous ceux qui ont contribué !
xxeroff
Re: Utilisation de FinalBarIndex()
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
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
- WHS Support
- Posts: 2434
- Joined: 14 Feb 2013 10:27
Re: Utilisation de FinalBarIndex()
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
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
Re: Utilisation de FinalBarIndex()
Bonjour, et merci pour votre patience !
et sinon va de la firstbar à la finalbar : c'est bien çà ?
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
Cette partie est donc précisée dans le code par une boucle explicite (ou implicite peut-être ?),WHS Support wrote: Période d'évaluation : la partie du graphique à laquelle s'applique l'évaluation.
et sinon va de la firstbar à la finalbar : c'est bien çà ?
parfaitFinalBar : 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).
Là, mes habitudes mentales sont vraiment remises en cause, c'est peut-être une question de vocabulaire;ExpMovingAverage(close, ema1, 5); Est un calcul.
Vous l'appliquez à chaque bougie, puisque vous avez indiqué dans votre code que i = 0 to FinalBarIndex()
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
- WHS Support
- Posts: 2434
- Joined: 14 Feb 2013 10:27
Re: Utilisation de FinalBarIndex()
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
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