Una pregunta para los conocedores de MQL - página 3

 

En algún lugar obtuve el consejo de comprobar siempre si un objeto existe antes de usar ObjectCreate (u ObjectSet? no lo recuerdo)

En general, utilizo esta 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:

Buenas tardes.

Ya pasé medio día y no puedo resolverlo.

Por favor, indíqueme cuál puede ser el error en este caso. ¿Podría ser en la función INIT?

el error podría ser

1. Si llama a WindowFind() en init() o en una función que es llamada en init

2. windowFind() y tiene declarada la #propiedad indicator_chart_window, ya que windowFind() se llama para la subventana

3. no hay ningún indicador con el nombre que se busca en la ventana

 
keekkenen:

3. el indicador con el nombre que busca no está en la ventana

mmm... ¿qué quieres decir con objeto?
 
Abzasc:
mmm... ¿qué quieres decir con objeto?

¿Qué tiene que ver esto con el objeto?

El objeto es secundario, porque está intentando ser renderizado en una ventana que no existe,

además, si el objeto es creado, no habrá ningún error, si el objeto es creado secundariamente, ObjectCreate() devolverá false

 
keekkenen:

¿Qué tiene que ver esto con el objeto?

El objeto es secundario, porque está intentando ser renderizado en una ventana que no existe,

además, si el objeto es creado, no se producirá ningún error, si el objeto es creado secundariamente, ObjectCreate() devolverá false

Lo tengo, gracias :)
 
keekkenen:

error puede ser

1. si llamas a WindowFind() en init() o en la función que se llama en init

2. windowFind() y tiene declarada la #propiedad indicator_chart_window, porque windowFind() se llama para la subventana

3. el indicador con el nombre que busca no está presente en la ventana


1. No, llamo a la función en START : object("Symbol1", Symbol_1, 11, Color_1, 5);

2. Ha declarado la #propiedad indicador_separar_ventana

3. Entonces, ¿cómo puede faltar un indicador si su ventana está presente?

Aquí está la función propiamente dicha:

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);//задаем у-коордтнату 
                                     }
No llamo a nada en absoluto en INIT. ¿Tal vez debería añadir algo allí también?



 
Abzasc:

En algún lugar obtuve el consejo de comprobar siempre si un objeto existe antes de usar ObjectCreate (u ObjectSet? no lo recuerdo)

En general, utilizo esta variante.

¿Qué nombre debo especificar en(ObjectFind("AsignalGF") -

¿Qué debo poner el nombre del indicador o el nombre (array) de la línea dibujada por el indicador?

 
leonid553:

Qué nombre debo poner en (ObjectFind("AsignalGF") -

¿nombre del indicador o el nombre (matriz) de la línea dibujada por el indicador?

El nombre del objeto que se está creando/modificando.
 

Creo que lo tengo. He puesto el nombre del objeto en la función.

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


 
leonid553:

He puesto el nombre del objeto en la función. ObjectCreate(name+ WindowExpertName(), ....);

Sí, eso es lo que estamos buscando.