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) ?
- docs.mql4.com
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 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.
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.
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.
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.
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.
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();
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
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
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 ?