Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Calcul dernière bougie via IndicatorCounted()

  • Berni

    Rebonjour à tous ! Eh oui encore moi !!

    Voilà, je suis content car je progresse sur la programmation des EA, grâce à vous et à votre sympathie quant à votre volonté de répondre !!! Cela dit, on ne peut progresser sans mettre les mains dans le camboui et sans sois - même faire l'effort de chercher bien entendu ! Mais parfois, ma foie un petit coup de pouce ne fait pas de mal à un koala (ni même à tous, bien sûr !!!). D'ailleurs, je suis content d'avoir pu répondre à deux post !!! J'espère à l'avenir que je pourrais apporter ma pierre à l'édifice aux maximum d'entre vous, surtout pour les débutants dont je fais encore parti.

    Voici ma question, elle concerne le bout de code ci - dessous :

    Code
    int start() { int limit; //récupération via la fonction IndicatorCounted() du nombre de chandelier(s) japonais ou du nombre de bougie(s) //déjà traité(s) et qu'il ne faut donc pas retraiter int counted_bars=IndicatorCounted(); //test pour savoir si il n'y a pas d'erreur //Le dernier chandelier japonais ou la dernière bougie a comme index 0. //Tous les chandeliers japonais précédents ou toutes les bougies //précédentes sans exception ont pour index respectif 1 2 3 4 5 6 7 8... //L'avant dernier chandelier japonais ou l'avant dernière bougie //est au niveau de l'index 1 if(counted_bars<0) return(-1); //Le dernier chandelier japonais ou la dernière bougie correspondant //au chandelier japonais actuellement en cours //ou correspondant à la bougie actuellement en cours doit toujours être //recalculé. if(counted_bars>0) counted_bars--; }

    A propos du if(counted_bars>0) counted_bars--;

    Etant donné que la dernière bougie (l'actuelle) a l'index 0 et que l'on souhaite recalculer celle - ci (d'après les différents forums et

    divers scripts que j'ai pu consulter cela apparaît comme nécessaire), comment peut on effectuer un tel test counted_bars > 0

    sachant qu'il s'agisse de la bougie actuellement en cours (index 0) et forcément qu'il n'y a pas d'autres bougies après celle en

    cours ? On fait un décrément de 1, cela veut dire alors que nous serions sur l'avant dernière bougie ? Ou peut - être que le 0 dans

    l'instruction du test if(counted_bars>0) counted_bars--; ne correspond pas à l'index ?

    Et pourquoi doit - on recalculer la dernière bougie ?

    Voila, j'espère que j'ai été suffisamment clair sur l'exposé de mes interrogations.

    J'ai l'impression d'avoir 3 ou 4 ans !!!! Et pourquoi ceci et pourquoi cela !!! Remarque cela me rajeunis !!!!!!

    Et surtout un grand Merci (avec un M majuscule !) à ceux qui pourront m'éclairer de leur lumière !!!!!

    Bonne soirée ou bonne journée voire même bonne nuit à tous suivant l'heure à laquelle vous lirez ce message !!!

    Berni
    Modifié le 2013-05-25 14:57:13 par AliX
  • JJFlash

    Salut, c'est compliqué de comprendre ce que tu veux savoir (faut dire que c'est surement pas facile d'expliquer ^^) mais je vais tenter de te répondre.
    Le if(counted_bars>0) counted_bars--; c'est juste pour s'assurer que l'on va faire les calculs sur la dernière bougie (bougie acutelle comme tu dis). Je pense que c'est surtout pour quand on passe d'un bougie à l'autre, c'est a dire quand on est sur un graphe en H1 par exemple, et qu'il est 10h59min et 59sec, quand on passe d'un coup sur la bougie de 11h, sa il faut s'assurer que sa va bien calculer sur la toute nouvelle bougie.
    J'espère que j'ai été claire, mais je ne pense pas avoir répondu à toute tes questions
  • Berni — en réponse à JJFlash dans son message #76876

    Bonjour JJFlash,

    Merci beaucoup de m'avoir répondu. Tes explications sont toujours claires et c'est avec plaisir que je lis toujours tes posts même ceux qui ne sont pas des miens sur le site.

    Tu m'as éclairé sur le fait que cela est nécessaire lorsque l'on est sur un time H1 (passage par ex 11H59 -> 12H00).

    C'est vrai que mes explications au sujet de ma problématique ne sont pas claires !

    En fait, pour résumé, je ne comprends tout simplement pas le if(counted_bars>0) counted_bars--;

    je voulais savoir en fait à partir de quel index de bougie le décrément counted_bars-- s'applique. Je vais relire la fonction start et à force

    cela finira par devenir lumineux comme un chandelier (japonais ! hi hi)

    Bonne soirée à toi
  • JJFlash

    Et bien le if(counted_bars>0) counted_bars--; s'applique pour un counted_bars strictement supérieur à 0, c'est a dire à partir de 1.

    Je t'ai pas bien répondu sur le poste précédent, je vais essayé d'être plus claire et juste dans ma réponse ^^

    En fait c'est pour optimaliser le code, car sa permet de ne pas refaire les calculs pour toute les bougies. Il ne faut pas voir ce bout de code tout seul en fait, je vais te donner un exemple que je vais t'expliquer. On a ce bout de code :
    Code
    int limit; int counted_bars=IndicatorCounted(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st buffer for(int i=0 ; i<limit ; i++) { ...

    On a donc bien notre int counted_bars=IndicatorCounted(); et if(counted_bars>0) counted_bars--;
    counted_bars va être égale à 5000 par exemple. Sa veut dire que l'indicateur à déjà calculé les valeurs pour les 5000 bougies qui sont disponible sur ton graphique (c'est à dire quand tu vas le plus loin dans le temps quand tu remonte ton graphique). Mais dans ces 5000 bougie, il y a aussi la bougie actuelle ! Donc si on veut pouvoir faire des calculs dessus, et bien on va soustraire une bougie à counted_bars, qui sera égale à 4999. Donc en fait le if(counted_bars>0) sert juste counted_bars est différent de 0, car si c'est égale à 0 (c'est à dire quand tu lance l'indicateur) on se retrouverai avec un counted_bars = -1, et sa créerai des problème pour la suite.
    La fonction Bars sa nous retourne toute les bougie que l'on a sur le graphique (donc en fait dans notre exemple c'est 5000). La variable limit va nous permettre de savoir sur combien de bougie on veut faire le calcul. Donc en fait, on soustrait counted_bars à Bars ce qui donnera limit = 5000 - 4999 = 1. Ainsi on fera le calcul uniquement sur une seul bougie, celle qui est actuelle.
    Donc au moment où on lance l'indicateur, counted_bars = 0 (car on a pas eu de calcul encore). Si on fait directement counted_bars-- sans avoir fait le if(count'ed_bars>0), on se retrouvera avec un counted_bars = -1, et donc on aura un limit = 5000+1 = 5001. Or, on a pas autant de bougie sur le graphique, donc l'indicateur va surement nous renvoyer une erreur.

    Voila j'espère avoir répondu à la question, mais je pense avoir même répondu à plus ^^

    Dit moi si c'est claire
    Modifié le 2013-05-24 20:58:42 par JJFlash
  • Berni — en réponse à JJFlash dans son message #76883

    Bonjour JJFlash,

    Super génial !!!! Merci beaucoup de ta réponse !! Effectivement, après avoir lu et relu des exemples et en ayant lu tes explications, tout est super clair ! Je te remercie beaucoup de tes explications !! Je vais pouvoir avancer dans le script de mon EA en espérant que mon brooker n'enlève pas MT4 de sa plate - forme dès que la MT 5 arrivera !!!!

    C'est super sympa de ta part de répondre, en plus tes explications sont toujours très pertinentes !!!
    Merci encore A+

    Berni
    Modifié le 2013-05-26 17:21:26 par Berni