Uma pergunta para os conhecedores de MQL - página 3

 

Em algum lugar recebi o conselho de sempre verificar se um objeto existe antes de usar o ObjectCreate (ou ObjectSet? Não me lembro)

Em geral, eu uso 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:

Boa tarde.

Já passou meio dia e não dá para perceber.

Por favor, informe qual pode ser o erro aqui ? Poderia estar na função INIT?

o erro poderia ser

1. se você chamar WindowFind() no init() ou em uma função que é chamada no init

2. windowFind() e você tem #janela_do_cartão_indicador de propriedade declarada, já que windowFind() é chamada para subjanela

3. não há nenhum indicador com o nome que você está procurando na janela

 
keekkenen:

3. o indicador com o nome que você está procurando não está na janela

mmm... o que você quer dizer com objeto?
 
Abzasc:
mmm... o que você quer dizer com objeto?

o que isso tem a ver com o objeto?

O objeto é secundário, porque está tentando ser apresentado em uma janela que não existe,

além disso, se o objeto for criado, não haverá erro, se o objeto for criado secundariamente, o ObjectCreate() retornará falso

 
keekkenen:

o que isso tem a ver com o objeto?

O objeto é secundário, porque está tentando ser apresentado em uma janela que não existe,

além disso, se o objeto for criado, nenhum erro ocorrerá, se o objeto for criado secundariamente, o ObjectCreate() retornará falso

Entendi, obrigado :)
 
keekkenen:

erro pode ser

1. se você chamar WindowFind() no init() ou na função que é chamada no init

2. windowFind() e você tem #janela_do_indicador de propriedade declarada, porque windowFind() é chamada para subjanela

3. o indicador com o nome que você está procurando não está presente na janela


1. Não, eu chamo a função em START : objeto("Symbol1", Symbol_1, 11, Color_1, 5);

2. Você declarou #janela_indicadora de propriedade_separarate_window

3. Então, como pode faltar um indicador se sua janela está presente?

Aqui está a própria função :

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);//задаем у-коордтнату 
                                     }
Eu não chamo nada no INIT. Talvez eu devesse acrescentar algo lá também?



 
Abzasc:

Em algum lugar recebi o conselho de sempre verificar se um objeto existe antes de usar o ObjectCreate (ou ObjectSet? Não me lembro)

Em geral, eu uso esta variante.

Em que nome devo especificar(ObjectFind("AsignalGF") -

O que devo definir o nome do indicador ou o nome (matriz) da linha traçada pelo indicador?

 
leonid553:

Qual nome devo colocar em (ObjectFind("AsignalGF") -

nome do indicador ou o nome (matriz) da linha traçada pelo indicador?

O nome do objeto que é criado/alterado.
 

Acho que entendi. Eu defino o nome do objeto na função.

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


 
leonid553:

Eu defino o nome do objeto na função. ObjectCreate(name+ WindowExpertName(), ....);

Sim, é isso que procuramos.