Une question pour les connaisseurs de MQL - page 3

 

J'ai reçu quelque part le conseil de toujours vérifier si un objet existe avant d'utiliser ObjectCreate (ou ObjectSet ? je ne me souviens plus).

En général, j'utilise cette variante

if (ObjectFind("AsignalGF")==-1)
      {ObjectCreate("AsignalGF",OBJ_LABEL,0,0,0,0,0);
      ObjectSet("AsignalGF",OBJPROP_CORNER,1);
      ObjectSet("AsignalGF",OBJPROP_XDISTANCE,12*1);
      ObjectSet("AsignalGF",OBJPROP_YDISTANCE,1*5);
      ObjectSetText("AsignalGF",CharToStr(110),38,"Wingdings",DimGray);}
 
leonid553:

Bon après-midi.

J'ai déjà passé une demi-journée et je n'arrive pas à comprendre.

Veuillez me dire quelle est l'erreur ici ? Serait-ce dans la fonction INIT?

l'erreur pourrait être

1. si vous appelez WindowFind() dans init() ou dans une fonction qui est appelée dans init

2. windowFind() et vous avez déclaré #property indicator_chart_window, puisque windowFind() est appelé pour la sous-fenêtre.

3. il n'y a pas d'indicateur avec le nom que vous recherchez dans la fenêtre

 
keekkenen:

3. L'indicateur portant le nom que vous recherchez n'est pas dans la fenêtre.

mmm... qu'est-ce que tu veux dire par objet ?
 
Abzasc:
mmm... qu'est-ce que tu veux dire par objet ?

Quel est le rapport avec l'objet ?

L'objet est secondaire, car il tente d'être rendu dans une fenêtre qui n'existe pas,

en outre, si l'objet est créé, il n'y aura pas d'erreur, si l'objet est créé secondairement, ObjectCreate() retournera false
.

 
keekkenen:

Quel est le rapport avec l'objet ?

L'objet est secondaire, car il essaie d'être rendu dans une fenêtre qui n'existe pas,

de plus, si l'objet est créé, aucune erreur ne se produira, si l'objet est créé secondairement, ObjectCreate() retournera false

Je l'ai eu, merci :)
 
keekkenen:

l'erreur peut être

1. si vous appelez WindowFind() dans init() ou dans une fonction qui est appelée dans init

2. windowFind() et vous avez déclaré #property indicator_chart_window, car windowFind() est appelé pour la sous-fenêtre.

3. L'indicateur portant le nom que vous recherchez n'est pas présent dans la fenêtre.


1. Non, j'appelle la fonction dans START : object("Symbol1", Symbol_1, 11, Color_1, 5);

2. Vous avez déclaré #property indicator_separate_window

3. Alors comment un indicateur peut-il être absent si sa fenêtre est présente ?

Voici la fonction elle-même :

void object(string name, string _text, int fontsize, color color_, int value) {
// задаем окно индикатора
 ObjectCreate(name+ WindowExpertName(), OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0);
 // задаем текстовую метку в окне
ObjectSetText(name+ WindowExpertName(), _text, fontsize, "Times New Roman", color_);
 ObjectSet(name+ WindowExpertName(), OBJPROP_CORNER, 1);//задаем правый угол
 ObjectSet(name+ WindowExpertName(), OBJPROP_XDISTANCE, 4);//задаем х-координату
 ObjectSet(name+ WindowExpertName(), OBJPROP_YDISTANCE, value);//задаем у-коордтнату 
                                     }
Je n'appelle rien du tout dans INIT. Je devrais peut-être ajouter quelque chose là aussi ?



 
Abzasc:

Quelque part, j'ai reçu le conseil de toujours vérifier si un objet existe avant d'utiliser ObjectCreate (ou ObjectSet ? je ne me souviens plus).

En général, j'utilise cette variante.

Quel nom dois-je spécifier dans(ObjectFind("AsignalGF") -

Que dois-je définir : le nom de l'indicateur ou le nom (tableau) de la ligne dessinée par l'indicateur ?

 
leonid553:

Quel nom dois-je mettre dans (ObjectFind("AsignalGF") -

le nom de l'indicateur ou le nom (tableau) de la ligne tracée par l'indicateur ?

Le nom de l'objet qui est créé/changé.
 

Je crois que je l'ai. J'ai défini le nom de l'objet dans la fonction.

ObjectCreate(name+ WindowExpertName(), OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0) ;


 
leonid553:

J'ai défini le nom de l'objet dans la fonction. ObjectCreate(name+ WindowExpertName(), ....) ;

Oui, c'est ce qu'on cherche.
Raison: