Comment apprendre à créer des objets graphiques ? MQL4. - page 3

 
Integer:

Si l'indicateur crée des objets graphiques et obtient ensuite leurs paramètres, non.

Mais il est toujours plus facile de tout résoudre grâce à l'utilisation d'un indicateur. Les calculs sont effectués dans l'indicateur et leurs résultats sont affichés via les tampons de l'indicateur.

Il existe une autre alternative. Créer des variables globales avec des paramètres de la ligne au lieu des lignes, mais dans ce cas, la fonction GetValueByShift() ne fonctionnera pas, vous devez écrire son analogue.

Je vois. Mais comment dessiner une ligne de tendance dans un indicateur sans dessin graphique ?

Deux indices de barres sont connus, ils doivent être reliés par une ligne et tracés vers la droite.

 
forexman77:

Je vois. Mais comment puis-je dessiner une ligne de tendance dans l'indicateur sans aucun dessin graphique ?

Deux indices de barres sont connus, ils doivent être reliés par une ligne et tracés vers la droite.

J'avais un tel indicateur dans ma base de code. Je ne l'ai pas maintenant.

Nous devrions utiliser des calculs. Connaissant les coordonnées de deux points, nous pouvons simplement calculer les coordonnées du troisième.

 
Integer:

J'avais l'habitude d'avoir un tel indicateur dans ma base de code. Maintenant, c'est parti, parti.

Vous devez utiliser des calculs pour tout faire. Connaissant les coordonnées de deux points, vous pouvez simplement calculer les coordonnées du troisième.

Où trouver une formule pour ce calcul ?

En général, il a l'air un peu nouveau. Le terminal dispose de toutes sortes de canaux, fibos et autres indices géométriques, mais ils sont inutiles dans le testeur.

 
forexman77:

Où puis-je trouver la formule pour ce calcul ?

En général, c'est une sorte de nouveau riche. Il y a beaucoup de canaux, Fibos et autres indices géométriques dans le terminal, mais ils sont inutiles dans le testeur.

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - numéros des barres. y1, y2 - valeurs des prix. x3 - nombre de barres pour lesquelles le calcul est effectué.

 
Integer:

x1, x2 - numéros des barres. y1, y2 - valeurs des prix. x3 - numéro de la barre pour laquelle le calcul est effectué.

Ok. Merci. Je vais continuer à creuser.
 
Integer:

x1, x2 - numéros des barres. y1, y2 - valeurs des prix. x3 - numéro de la barre pour laquelle le calcul est effectué.

Indicateur basé sur les calculs, les lectures sont les mêmes que pour l'indicateur sur les objets graphiques.

L'optimisation est en cours. Le seul problème est que les transactions ne sont pas ouvertes correctement.

Lorsque j'applique l'indicateur au graphique, la ligne est plate au début, mais ensuite elle devient comme elle devrait être et reste comme ça lorsque je la place sur un nouveau tick.

 
forexman77:

Fait un indicateur basé sur les calculs, les lectures sont les mêmes que l'indicateur sur les objets graphiques.

L'optimisation est en cours. Le seul problème est que les transactions ne sont pas ouvertes correctement.

Lorsque j'applique l'indicateur au graphique, la ligne est plate au début, puis avec un nouveau tick, elle devient comme elle devrait être et reste comme ça.

Essayez de le tester en mode visuel. En utilisant l'impression, cherchez la différence.
 
Integer:
Essayez de tester en mode visuel. En utilisant l'impression, le commentaire, cherchez la différence.

Le mode visuel ne sera d'aucune utilité. J'ai réussi à faire en sorte que l'indicateur ne montre que le modèle actuel.

L'indicateur lui-même imprime la valeur du premier indice (MQL4), la première impression sort avec une valeur incorrecte, et les autres sont correctes sur les nouveaux ticks.

Je vous ai envoyé le code, dans votre message personnel.

 

Quoi qu'il en soit, j'ai transféré tous les calculs de la ligne de tendance à l'EA. Il semble que ce soit correct.

Je ne peux pas créer un indicateur qui montrerait toute la gamme de la ligne. Je n'ai pas assez d'expérience.

J'ai en fait besoin d'un indicateur pour voir visuellement que les transactions sont ouvertes correctement.

J'ai décidé d'utiliser des objets graphiques pour la visualisation.

Le problème est l'erreur 4200 (l'objet existe déjà).

J'ai essayé de donner un nouveau nom à l'objet à chaque fois. Même erreur.

Est-il possible d'appeler plusieurs objets ? Si oui, comment puis-je couper les parties inutiles du rayon ?

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

Quoi qu'il en soit, j'ai transféré tous les calculs de la ligne de tendance à l'EA. Il semble que ce soit correct.

Je ne peux pas créer un indicateur qui montrerait toute la gamme de la ligne. Je n'ai pas assez d'expérience.

J'ai en fait besoin d'un indicateur pour voir visuellement que les transactions sont ouvertes correctement.

J'ai décidé d'utiliser des objets graphiques pour la visualisation.

Le problème est l'erreur 4200 (l'objet existe déjà).

J'ai essayé de donner un nouveau nom à l'objet à chaque fois. Même erreur.

Est-il possible d'appeler plusieurs objets ? Si oui, comment puis-je couper les parties inutiles d'un rayon ?

Avant la création, vous pouvez vérifier si l'objet existe, fonction ObjectFind(). Vous n'avez rien à faire, cela existe et c'est OK, ce n'est pas une mauvaise erreur.

Un ensemble d'objets. Vous pouvez ajouter l'heure de la barre au nom de l'objet, il aura un nom unique.

Ajustez la poutre. Propriété ObjectSet(Name,OBJPROP_RAY,false) ;