Una domanda per i conoscitori di MQL - pagina 3

 

Da qualche parte ho ricevuto il consiglio di controllare sempre se un oggetto esiste prima di usare ObjectCreate (o ObjectSet? Non ricordo)

In generale, uso questa 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:

Buon pomeriggio.

Ho già passato mezza giornata e non riesco a capirlo.

Per favore consigliatemi quale può essere l'errore qui? Forse nella funzione INIT?

l'errore potrebbe essere

1. Se chiamate WindowFind() in init() o in una funzione chiamata in init

2. windowFind() e avete dichiarato la #proprietà indicator_chart_window, poiché windowFind() è chiamata per la sottofinestra

3. non c'è nessun indicatore con il nome che stai cercando nella finestra

 
keekkenen:

3. l'indicatore con il nome che state cercando non è nella finestra

mmm... cosa intendi per oggetto?
 
Abzasc:
mmm... cosa intendi per oggetto?

Cosa ha a che fare questo con l'oggetto?

L'oggetto è secondario, perché sta cercando di essere reso in una finestra che non esiste,

inoltre, se l'oggetto viene creato, non ci sarà alcun errore, se l'oggetto viene creato secondariamente, ObjectCreate() restituirà false

 
keekkenen:

Cosa ha a che fare questo con l'oggetto?

L'oggetto è secondario, perché sta cercando di essere reso in una finestra che non esiste,

inoltre, se l'oggetto viene creato, non si verificherà alcun errore, se l'oggetto viene creato secondariamente, ObjectCreate() restituirà false

Capito, grazie :)
 
keekkenen:

l'errore può essere

1. se chiamate WindowFind() in init() o in una funzione che viene chiamata in init

2. windowFind() e avete dichiarato la #proprietà indicator_chart_window, perché windowFind() è chiamata per la sottofinestra

3. l'indicatore con il nome che state cercando non è presente nella finestra


1. No, chiamo la funzione in START: object("Symbol1", Symbol_1, 11, Color_1, 5);

2. Avete dichiarato #proprietà indicator_separate_window

3. Come può mancare un indicatore se la sua finestra è presente?

Ecco la funzione stessa:

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);//задаем у-коордтнату 
                                     }
Non chiamo assolutamente nulla in INIT. Forse dovrei aggiungere qualcosa anche lì?



 
Abzasc:

Da qualche parte ho ricevuto il consiglio di controllare sempre se un oggetto esiste prima di usare ObjectCreate (o ObjectSet? Non ricordo)

In generale, uso questa variante.

Quale nome dovrei specificare in(ObjectFind("AsignalGF") -

Cosa devo impostare il nome dell'indicatore o il nome (array) della linea disegnata dall'indicatore?

 
leonid553:

Quale nome devo impostare in (ObjectFind("AsignalGF") -

nome dell'indicatore o il nome (array) della linea disegnata dall'indicatore?

Il nome dell'oggetto che viene creato/modificato.
 

Credo di aver capito. Ho impostato il nome dell'oggetto nella funzione.

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


 
leonid553:

Ho impostato il nome dell'oggetto nella funzione. ObjectCreate(name+ WindowExpertName(), ....);

Sì, è quello che stiamo cercando.