Versare l'oggetto

 

Saluti, cari programmatori!

"Per il terminale MT4.

Mi piacerebbe ricevere qualche consiglio da voi. Mi sono imbattuto nella seguente sfumatura...

1. Creo un oggetto rettangolo - funziona:

2. Ho impostato le proprietà:

- stile - ha funzionato;

- larghezza della linea - ha funzionato;

- colore - ha funzionato;

- riempire - non vuole ascoltare;

Ho pasticciato e pasticciato e ho scoperto che l'oggetto rettangolo viene creato con "Draw object as background" selezionato per default. Finché questa casella è selezionata, il rettangolo non ascolta i comandi del programma, e se si rimuove manualmente questa casella dalle proprietà dell'oggetto, allora il programma può controllare il riempimento.

La domanda è perché l'oggetto non è impostato subito sulla proprietà "fill"? Cosa faccio di sbagliato e cosa non so?

Per favore aiutate chi può!

Di seguito è riportato il codice utilizzato:

#proprietà indicator_chart_window

int start()
{
long current_chart_id=ChartID();
//
stringa obj_name1="Rectangle1";
//
double Price_Level_1 = 1296; // prezzo dell'oro
double Price_Level_2 = 1293;
//
datetime Left_Side_1 = Time[9];
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7;
//
const color clr = clrBeige;
const ENUM_LINE_STYLE style = STYLE_DASH;
const int width = 1;
const bool fill = false;
//
ObjectCreate (current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_COLOR, clr);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_STYLE, style);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false); // non impostato immediatamente

ritorno(0);

 

Prova

//+------------------------------------------------------------------+
void Prn_Rect_Label(string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
      ObjectDelete(0,Name);
      ObjectCreate(0,Name,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,Name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,Name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,Name,OBJPROP_BGCOLOR,CLR);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetInteger(0,Name,OBJPROP_BACK,back);
      return;
   }
 
Qual è il trucco? Perché l'oggetto non risponde al riempimento senza ulteriori manipolazioni?
 
Renat Akhtyamov:

Prova

Non devi cancellarlo, devi controllarlo per vedere se esiste. Se non esiste, allora createlo. E poi impostare i parametri.
 
Allora, perché il riempitivo non ascolta?
 
Artyom Trishkin:
Non devi cancellarlo, devi controllarlo per vedere se esiste. Se non esiste, allora createlo. E poi impostare i parametri.

D'accordo

trovare prima.

Ma se l'oggetto viene cancellato e ricreato ad ogni tick con lo stesso nome, la ricerca di un oggetto conosciuto ed esistente non è necessaria
 
5211845:
Allora, perché il riempimento non ascolta?

e se sì (falso --> vero):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, true); // не задается сразу
 

Non funziona, ho già provato la seguente funzione

ObjectSet (obj_name1, OBJPROP_FILL, true | false);

 
Questo codice deve funzionare per forza? Forse è un difetto del mio terminale?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845:
In generale, questo codice dovrebbe funzionare? Forse è un difetto del mio terminale?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

Naturalmente.

Confrontate questo codice con il vostro codice in dettaglio e mettetelo in OnTimer(), dato che non ci sono ticchettii in uscita, o eseguitelo temporaneamente in OnInit():

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

Ho basato il mio codice su questo esempio. Non riesco a capire quale sia la differenza. Solo che c'è una finestra per i parametri di input.

E se non ho bisogno di questa finestra? Se voglio solo creare un oggetto con i parametri che voglio. È possibile?

Motivazione: