Verter el objeto

 

¡Saludos, queridos programadores!

" Para el terminal MT4.

Me gustaría que me dierais algunos consejos. Me he encontrado con el siguiente matiz...

1. Creo un objeto rectángulo - funciona:

2. Configuro las propiedades:

- estilo - funcionó;

- ancho de línea - trabajado;

- color - trabajado;

- llenar - no quiere escuchar;

He trasteado y trasteado y he descubierto que el objeto rectángulo se crea con la opción "Dibujar objeto como fondo" marcada por defecto. Mientras esta casilla esté marcada, el rectángulo no escucha los comandos del programa, y si se elimina manualmente esta casilla de las propiedades del objeto, entonces el programa puede controlar el relleno.

La pregunta es ¿por qué el objeto no se pone en la propiedad "fill" de inmediato? ¿Qué hago mal y qué no sé?

¡Por favor, ayude a quien pueda!

A continuación se muestra el código utilizado:

#propiedad ventana_del_gráfica_del_indicador

int inicio()
{
long current_chart_id=ChartID();
//
string obj_name1="Rectángulo1";
//
double Nivel_de_precio_1 = 1296; // precio del oro
double Nivel_de_precio_2 = 1293;
//
datetime Lado_Izquierdo_1 = Tiempo[9];
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7;
//
const color clr = clrBeige;
const ENUM_LINE_STYLE estilo = STYLE_DASH;
const int anchura = 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); // no se establece inmediatamente

return(0);

 

Prueba con

//+------------------------------------------------------------------+
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;
   }
 
¿Cuál es el truco? ¿Por qué el objeto no responde al relleno sin más manipulación?
 
Renat Akhtyamov:

Prueba con

No hay que borrarlo, hay que comprobar si existe. Si no existe, créalo. Y a continuación, establecer los parámetros.
 
Entonces, ¿por qué no se escucha el relleno?
 
Artyom Trishkin:
No hay que borrarlo, hay que comprobar si existe. Si no existe, créalo. Y a continuación, establecer los parámetros.

De acuerdo

encontrar primero.

Pero si el objeto se borra y se vuelve a crear en cada tic con el mismo nombre, la búsqueda de un objeto ya conocido es innecesaria
 
5211845:
Entonces, ¿por qué el relleno no escucha?

y si es así (falso --> verdadero):

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

No funciona. Ya he probado la siguiente función

ObjectSet (obj_name1, OBJPROP_FILL, true | false);

 
¿Este código tiene que funcionar del todo? ¿Tal vez sea un fallo en mi terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845:
En general, este código debería funcionar? ¿Tal vez sea un fallo en mi terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

Por supuesto.

Compare este código con su propio código en detalle y colóquelo en OnTimer(), ya que no hay ticks de salida, o ejecútelo temporalmente en 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,            //| Перемещает точку привязки прямоугольника                         |...
 

He basado mi código en este ejemplo. No puedo entender cuál es la diferencia. Sólo que hay una ventana para los parámetros de entrada.

¿Y si no necesito esta ventana? Si sólo quiero crear un objeto con los parámetros que quiero. ¿Es esto posible?

Razón de la queja: