Les tampons de l'indicateur de lecture sont réglés sur le graphique

 

Un indicateur est placé sur le graphique. Il est redessiné par les événements Timer, ChartEvent et Calculate.

J'ai besoin d'un script pour lire les valeurs actuelles de ses tampons d'indicateurs(INDICATOR_DATA) qui peuvent être vus par CTRL+D. Est-il possible de faire cela dans MT4 ?

 

La solution via DLL est donnée dans l'article"Transfert de données entre indicateurs - une solution simple à ce problème". Mais vous devez ajouter l'appel deGetPtr externe au code source de l'indicateur, ce qui n'est pas toujours possible.

Sans DLL, est-il possible d'effectuer uniquement la lecture (sans écriture, ce qui est également fait dans l'article) des tampons ? Est-ce que quelque chose a changé sur ce sujet depuis l'époque où l'article a été écrit (2010) ?

 
iCustom() vous aidera.
iCustom - Технические индикаторы - Справочник MQL4
iCustom - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iCustom - Технические индикаторы - Справочник MQL4
 
Alexey Viktorov:
iCustom() vous aidera.

Malheureusement, dans ce cas

redessiner par lesévénements Timer, ChartEvent et Calculate.

ne sera pas utile.

 
De combien de valeurs avez-vous besoin ? Laissez l'indicateur lui-même enregistrer des duplicatas de ces valeurs dans les variables globales du terminal, dans les propriétés des objets du graphique, dans les fichiers
 
Alexander Puzanov:
De combien de valeurs avez-vous besoin ? Laissez l'indicateur lui-même enregistrer les doubles de ces valeurs dans des variables globales du terminal, dans les propriétés des objets du graphique, dans des fichiers...

J'ai besoin d'un script pour obtenir les valeurs des tampons (au moins un) d'un indicateur sur un graphique. Le vidage des tampons d'un indicateur vers un fichier n'est pas un script qui lit les tampons.

Dans l'article ci-dessus, il y a une belle solution via les pointeurs qui vous permet non seulement de lire, mais même d'écraser les tampons d'autres indicateurs sur les graphiques. C'est ce qu'on appelle une lecture tampon. Mais c'est une DLL.

Vous voyez, nous pouvons mettre en œuvre le schéma suivant

  • l'indicateur attend qu'une variable globale écrive ses tampons dans le fichier.
  • Le script crée cette variable au moment de l'exécution et reçoit les fichiers correspondants.
Mais ce n'est même pas une béquille. Il ne lit pas les tampons.

A en juger par le silence, plus de sept ans depuis que ce problème a été annoncé publiquement sur le quatrième forum (google se souvient), les développeurs n'ont pas créé de fonctionnel.

Pour une raison quelconque, ils ne peuvent toujours pas faire une lecture humaine des données de l'indicateur à partir du graphique ! Ça semble délirant, mais ça l'est.

 
comp:

Malheureusement, dans ce cas

ne va pas aider.

Pourquoi pas ? iCustom() lit le tampon de l'indicateur indépendamment de la façon dont ce tampon est rempli. Après tout, le tampon est déclaré au niveau des variables globales dans tous les cas.
 
Alexey Viktorov:
Pourquoi pas ? iCustom() lit le tampon de l'indicateur, indépendamment de la façon dont ce tampon est rempli. Après tout, le tampon est déclaré au niveau des variables globales dans tous les cas.

Parce que iCustom ne sait rien des événements Timer et ChartEvent.

Par exemple, l'indicateur sur le graphique toutes les secondes (événement Timer) remplit son seul tampon avec des nombres aléatoires (ou applique l'EMA aux valeurs du tampon précédent). Il s'agit de quelques lignes de code. Dans ce cas, iCustom ne renverra jamais ce que vous verrez sur le graphique.

 
comp:

Parce que iCustom ne sait rien des événements Timer et ChartEvent.

Par exemple, l'indicateur sur le graphique toutes les secondes (événement Timer) remplit son seul tampon avec des nombres aléatoires (ou applique l'EMA aux valeurs du tampon précédent). Il s'agit de quelques lignes de code. iCustom ne renverra alors jamais ce que vous verrez sur le graphique.

Je comprends ma méprise, merci.
 
Alexey Viktorov:
Pourquoi pas ? iCustom() lit le tampon de l'indicateur, indépendamment de la façon dont ce tampon est rempli. Après tout, le tampon est déclaré au niveau des variables globales dans tous les cas.

iCustom ne lit pas les tampons de l'indicateur sur le graphique, il crée sa propre copie de l'indicateur dans la mémoire et lit à partir de celle-ci, juste les copies de tampon ne sont pas affichées sur le graphique. Mais si l'indicateur dessine quelque chose sur le graphique indépendamment, il sera dessiné lorsqu'il sera appelé via iCustom, ce qui crée des problèmes, d'ailleurs.

Par exemple, si l'indicateur a le code suivant, il sera dessiné lors de l'appel à iCustom, et le texte se superposera au texte de l'indicateur sur le graphique

ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст");
ChartRedraw();
 
Alexey Volchanskiy:

iCustom ne lit pas les tampons de l'indicateur sur le graphique, il crée sa propre copie de l'indicateur dans la mémoire et lit à partir de celle-ci, juste les copies de tampon ne sont pas affichées sur le graphique. Mais si l'indicateur dessine quelque chose sur le graphique indépendamment, il sera dessiné lorsqu'il sera appelé via iCustom, ce qui crée des problèmes, d'ailleurs.

Par exemple, si l'indicateur a le code suivant, il sera dessiné lors de l'appel à iCustom, et le texte se superposera au texte de l'indicateur sur le graphique

C'est étrange. J'ai lu quelque part dans le guide que si l'indicateur est déjà lancé, aucune copie n'est créée. Peut-être que je ne comprends pas quelque chose.