Question sur l'indicateur - page 4

 
SDC:

Ou peut-être quelque chose comme ceci ?

vous devriez vraiment utiliser IndicatorCounted(), parce que si vous le faites comme ça, votre indicateur redessine tous ces objets à chaque nouveau tick au lieu de les dessiner tous en une seule fois et d'en ajouter de nouveaux au fur et à mesure que les barres se forment.

Ceci et votre autre post sur les bools externes me donne d'autres idées aussi, merci.

Mon champ d'action doit être plus large, mais comme je suis NooB, j'ai tendance à me concentrer sur une partie du code et à en négliger d'autres comme les externes.
Je commence à peine à me familiariser avec les tableaux et j'ai eu beaucoup de mal à comprendre les tampons, mais je commence à m'en sortir depuis peu.

Merci, cela va me donner un tas de nouvelles idées maintenant aussi.
 
SDC:


Vous devez considérer ce que vous faites, lorsque vous créez un indicateur, vous appliquez votre code à chaque barre du graphique, ce qui signifie que vous devez obtenir la valeur de l'indicateur macd telle qu'elle était pour chacune de ces barres historiques.

C'est ce que vous avez fait dans votre code original :

Le dernier paramètre 1 est la valeur du macd telle qu'elle était à la barre 1 du graphique, la barre précédente à la barre actuelle qui est indexée comme barre 0

.

Il est évident que vous ne voulez pas utiliser cette seule valeur du macd dans votre opérateur conditionnel sur l'ensemble du graphique historique.

Vous devez indexer le macd au même indice de barre que chaque barre, donc par exemple à la barre 500 vous avez besoin de ceci

ce dernier paramètre doit changer pour correspondre au numéro de la barre sur laquelle votre indicateur applique ses algorithmes.

C'est pourquoi vous en avez besoin à l'intérieur de la boucle, ainsi vous pouvez utiliser l'itérateur du cycle de la boucle pour le dernier paramètre, ainsi vous obtenez votre valeur macd telle qu'elle était pour chaque barre du graphique historique.

J'espère que cela vous aidera à clarifier un peu les choses.

C'est vrai que j'ai trouvé cette solution.

Cependant, lorsque j'ai ajouté les codes tels que if(val1 > 0 && faster > slower), cela ne fonctionnait pas lorsque je déclarais faster et slower en dehors de la boucle.

AHHHHHH Je vois donc que le décalage est (i) alors j'en ai besoin à l'intérieur de la boucle OOOOPPPS LOL
 
Agent86:
Pourquoi for(int i = Bars-1 ? <----------------------- Les barres sont indexées comme des tableaux, la première barre=0, au lieu de 1. Donc la dernière barre est Bars-1 ;

Et pourquoi est-ce mieux que for(int i = Bars ? ? <----- voir ci-dessus.

Veuillez me conseiller, merci


Aussi :

Je suppose que c'est vrai pour tous, et pas seulement pour les indicateurs / indicateurs personnalisés ?<--- ce dont moi et WHRoeder: avons discuté sont des questions assez générales. Rien de spécifique. Nous parlions juste entre nous de la déclaration des variables et de leurs affectations, etc, en ce qui concerne les boucles.

 
diostar:

Aussi :


for(int i=Bars ; i>=0 ; i--) voici le code que j'ai utilisé

for(int i=Bars-1 ; i>=0 : i--) est proposé

Je pensais que Bars = nombre de barres dans le graphique actuel ? du moins selon le dictionnaire.

Donc --i je suppose que le décompte se fait à partir du numéro de barre le plus élevé, comme 1002 ou quelque chose comme ça, et le décompte --i se fait jusqu'à -1.
Parce que si i>=0, il devrait compter jusqu'à -1 avant de devenir faux. S'il était égal ou supérieur à 0, il serait vrai et bouclerait une dernière fois jusqu'à ce qu'il atteigne -1.

Du moins, c'est la façon dont je pensais que cela fonctionnait ? Est-ce que je me trompe ?

Si i=0 et ++i et que l'on compte vers le haut, je pensais qu'il fallait compter jusqu'à la fin de la dernière barre.

Mais dans ce cas, les barres 1 dont vous parlez ne seraient pas vraiment toutes les barres fermées mais incluraient la barre [0] qui n'est pas encore fermée ou quelque chose comme ça ?

Je ne suis pas vraiment sûr de comprendre la différence entre Barres-1 et Barres. Est-ce que cela a quelque chose à voir avec la barre actuelle 0 qui n'est pas comptée lorsqu'on se réfère simplement aux barres ?

Merci de me conseiller.


 

Oui, c'est parce que vous avez une barre 0, donc Bars vous donne le nombre de barres dans le graphique, y compris la barre 0.

Considérons un petit graphique, il n'y a que 2 barres dans le graphique, bar[0] et bar[1].

Bars vous donne le nombre de barres donc Bars == 2

si vous voulez appliquer votre indicateur pour commencer à la dernière barre du graphique

Vous pouvez essayer i=Bars.

Comme nous le savons, Bars = 2 mais il n'y a pas de barre indexée comme bar[2], la dernière barre est Bar[1].

donc vous devez faire i=Bars-1

 
Agent86:
for(int i=Bars ; i>=0 ; i--) est le code que j'ai utilisé<--- disons, par exemple, Close[i], cela compte de close[Bars] jusqu'à close[0]. Quand i=Bars, est-ce que close[i] existe ?

for(int i=Bars-1 ; i>=0 : i--) est suggéré<--- par exemple, pour Close[i], cela compte de close[Bars-1] à close[0]. Lorsque i=Barres-1, est-ce que close[i] existe ?

Je pensais que Bars = nombre de barres dans le graphique actuel ? du moins selon le dictionnaire. <---ok

Donc --i, j'ai compris qu'il s'agissait d'un décompte à partir du numéro de barre le plus élevé, comme 1002 ou quelque chose comme ça, et --i jusqu'à -1 . Est-ce que close[1002], close[-1] existent ?
Parce que si i>=0, il devrait compter jusqu'à -1 avant de devenir faux. Si c'était 0 ou plus, il serait vrai et bouclerait une dernière fois jusqu'à ce qu'il atteigne -1 <---- à close[-1], il renvoie 0. Pas faux.

En tout cas, c'est ainsi que je pensais que cela fonctionnait ? Ai-je tort ? <--- voir la référence ci-dessous.

Si i=0 et ++i et compté vers le haut alors je pensais qu'il compterait jusqu'à la fin jusqu'à la dernière barre. <--- il va docilement, faire cela.

Mais dans ce cas, les barres 1 dont vous parlez ne seraient pas vraiment toutes les barres fermées mais incluraient en fait la barre [0] qui n'est pas encore fermée ou quelque chose comme ça ? <--- dans ce cas, le prix de fermeture renverra le prix actuel du tick Bid.

Je ne suis pas vraiment sûr de comprendre la différence entre Bars-1 et Bars. Est-ce que cela a quelque chose à voir avec la barre courante 0 qui n'est pas comptée lorsqu'on se réfère simplement aux barres ? <--- voir la référence ci-dessous

Merci de me conseiller.





double Close[]
Tableau de séries qui contient les prix de clôture pour chaque barre du graphique actuel.

Les éléments du tableau de séries sont indexés dans l'ordre inverse, c'est-à-dire du dernier au premier. La barre actuelle, qui est la dernière du tableau, est indexée à 0. La barre la plus ancienne, la première du graphique, est indexée à Bars-1.
 
Je vois, pour une raison quelconque, je pensais que le tampon gérait ce sujet un peu différemment parce que techniquement, je n'ai même pas déclaré le nombre d'éléments dans le tableau, donc je pensais que le tampon s'en occupait déjà.

Quoi qu'il en soit, je comprends et cela a du sens, merci.

 
Agent86:
Je vois, pour une raison quelconque, je pensais que le tampon gérait ce sujet un peu différemment parce que techniquement, je n'ai même pas déclaré le nombre d'éléments dans le tableau, donc je pensais que le tampon avait déjà résolu ce problème.

Quoi qu'il en soit, je comprends et c'est logique, merci.



Quoi ? Je n'avais pas réalisé que vous faisiez référence à des tampons indicateurs. Maintenant que c'est le cas, lisez ces références tirées de : https://www.mql5.com/en/articles/1500

(1) tampons d'indicateurs et tableaux d'utilisateurs - ils sont à la fois identiques et DIFFÉRENTS. & La raison pour laquelle les tampons d'indicateurs ne sont pas dimensionnés par l'utilisateur n'a rien à voir avec le fait que cela a déjà été calculé. voir la référence ci-dessous :

double ExtMapBuffer1[];

Il s'agit d'un tableau habituel. Mais la dimension n'est pas indiquée et l'initialisation n'est pas effectuée. Ce tableau sera plus tard configuré comme un tampon de données.

(2) les tampons d'indicateurs à la sortie et à l'entrée (le tampon de données ci-dessus) peuvent sembler identiques, mais différents.

SetIndexBuffer(0,ExtMapBuffer1);

Cette fonction "lie" un tableau à un numéro de tampon. C'est-à-dire qu'elle indique que le tampon portant le numéro indiqué utilisera le tableau indiqué pour stocker des données. Ainsi, en changeant les éléments de ce tableau, vous changerez la valeur du tampon. En fait, un tableau est un tampon de données.Le premier argument est le nom du tableau qui doit être lié.


Vous voyez, tout cela fonctionne. Voyons maintenant ce que fait le code :

for(int i=0;i<Bars;i++)

Nous utilisons le cycle for pour parcourir tous les éléments du tampon de données. Comme une certaine barre correspond à chaque élément du tampon, nous utilisons le cycle, en commençant par la barre zéro (la dernière disponible) et en terminant par la première disponible, qui est en succession une de moins que la variable Bars (parce que nous comptons les barres à partir de zéro).

{
   ExtMapBuffer1[i]=MathRand()%1001;
}

À chaque itération, un compteur est augmenté d'une unité, et nous passons de la dernière barre disponible à la première , tout en attribuant à chaque élément du tampon (qui correspond à une certaine barre) un nombre aléatoire compris entre 0 et 1000. Si vous avez du mal à comprendre comment un certain élément tampon correspond à une certaine barre, essayez de modifier le cycle de la manière suivante et voyez le résultat dans le terminal :

for(int i=0;i<Bars;i++)
{
   ExtMapBuffer1[i]=i;
}



 
diostar:

double Close[]
Tableau de séries qui contient les prix de clôture pour chaque barre du graphique actuel.

Les éléments du tableau de séries sont indexés dans l'ordre inverse, c'est-à-dire du dernier au premier. La barre actuelle, qui est la dernière du tableau, est indexée à 0. La barre la plus ancienne, la première du graphique, est indexée à Bars-1.

Ok, je pense que je comprends maintenant, merci.
 
Merci à tous

Au fur et à mesure que j'apprends à connaître les indicateurs, il semble que la conception que j'utilise ne serait pas très utile pour une utilisation dans un EA, mais seulement peut-être pour une utilisation visuelle et/ou manuelle.

Puisque le compteur compte à rebours de 1-- il semblerait que l'utilisation de cette méthode ne serait pas bonne pour se référer à des objets de tableau pour une utilisation dans le trading, à moins peut-être que je ne me réfère qu'à un shift[i] particulier, auquel cas je devrais trouver un moyen de me référer spécifiquement aux seuls éléments de tableau que je voudrais utiliser pour un signal de trading situé uniquement sur ces barres particulières.

En l'utilisant tel quel, la négociation se produirait probablement sur l'ensemble du graphique, tout comme l'indicateur.

Donc maintenant, je suppose que je vais apprendre comment faire référence à divers éléments de tableau dans n'importe quel indicateur afin de faire référence à ces valeurs/heures/bars, etc.

Merci à tous pour votre aide, et cela va me donner beaucoup à réfléchir sur la façon dont je pourrais créer des indicateurs iCustom et les rendre utiles dans un EA.
Raison: