Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1284

 
Youri Lazurenko:

Gracias de nuevo, ahora la línea es como una línea, agradable de ver. Sólo se necesitaObjectDelete(0, nombre);; de lo contrario, una vez dibujada la línea no se vuelve a dibujar. Lo mismo en mql4, se me olvidó.

Lo habría hecho

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
    if(!ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0))
     {
      Print("Ошибка в создании линии");
      return (false);
     }
  ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
  ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
  ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
  ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 0, price1);
  ObjectSetDouble(ChartID(), name, OBJPROP_TIME, 1, price2);

  ChartRedraw();
  return(true);
 }
 
Vladimir Karputov:

Qué tontería. El objeto gráfico dibujado se mueve suavemente. El ejemplo se da en la ayuda de cada objeto (para la línea horizontalOBJ_HLINE).

También puedes cambiar cualquier propiedad a un objeto ya dibujado: color, estilo, olor...

Se hace manualmente, no lo discuto. Pero el Asesor Experto traza líneas de tendencia por puntos DeMark. Con la función ObjectDelete(0, nombre);, cuando los puntos cambian, se elimina la antigua línea de tendencia y se dibuja una nueva. Sin esta función, las primeras líneas dibujadas ya no se redibujan. Esto no es una tontería, es un hecho.

Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko:

Manualmente, no discuto. El Asesor Experto, en cambio, traza líneas de tendencia por puntos DeMark. Con la función ObjectDelete(0, nombre);, cuando los puntos cambian, se elimina la antigua línea de tendencia y se dibuja una nueva. Sin esta función, las primeras líneas dibujadas ya no se redibujan. Esto no es una tontería, es un hecho.

¿Por qué no lees la ayuda? Y ejecuta el ejemplo.

 
Alexey Viktorov:

Yo lo haría.

Gracias, pero dejaré mi variante, funciona. Aunque lo probaré en lugar de ObjectDelete(0, nombre);.

 ChartRedraw();
Документация по MQL5: Графические объекты / ObjectDelete
Документация по MQL5: Графические объекты / ObjectDelete
  • www.mql5.com
ObjectDelete - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

¡Lee la ayuda, por el amor de Dios! Y ejecuta el ejemplo.

He leído la referencia. Sólo tú estás indignado y yo escribo desde la práctica. Otra cosa es utilizar ChartRedraw() en lugar de ObjectDelet(), no lo discuto y lo comprobaré. Esto es lo único que hay que señalar refiriéndose al ejemplo.

 
Youri Lazurenko:

He leído el informe. Sólo tú te indignas con las palabras y yo escribo desde la práctica. Otra cosa es usar ChartRedraw() en lugar de ObjectDelet(), no lo discuto y lo compruebo. Esto es lo único que hay que señalar refiriéndose al ejemplo.

La gente suele pedir consejo en este hilo y cuando lo recibe, lo escucha. Como mínimo, lee la ayuda y aplica los ejemplos. Por favor, si no quieres escuchar a los demás, no preguntes nada.

 
Youri Lazurenko:


Un ejemplo de cómo se puede cambiar cualquier propiedad del objeto gráfico"Línea horizontal" sobre la marcha - no es necesario borrar el objeto para hacerlo, sólo hay que cambiar la propiedad.

C:\Users\barab\OneDrive\Изображения\Screenpresso\2021-02-01_16h09_06.gif

Código:

//+------------------------------------------------------------------+
//|                       OBJ_HLINE change properties on the fly.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string          InpName="HLine";     // Line name
//--- an array for storing colors contains 14 elements
color colors[]=
  {
   clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
   clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- the number of colors
   int size=ArraySize(colors);
//--- get a random value
   int number=MathRand();
//--- get an index in the col[] array as a remainder of the integer devision
   int i=number%size;
//--- set line color
   ObjectSetInteger(ChartID(),InpName,OBJPROP_COLOR,colors[i]);
   ChartRedraw();
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Archivos adjuntos:
 
Youri Lazurenko:

Gracias, pero dejaré mi variante, funciona. Aunque lo probaré en lugar de ObjectDelete(0, nombre);.

Una decisión completamente equivocada. La eliminación de un objeto gráfico y la actualización de un gráfico no se sustituyen entre sí.

Mi ejemplo comprueba primero si hay un objeto, en concreto, una tendencia con el nombre tfyu, que es el nombre en la disposición del teclado ruso)). Entonces, si no existe, se dibuja la tendencia. Si el intento de dibujo no tiene éxito, se muestra el mensaje y se sale de la función con el retorno false.

Todo lo que viene después, independientemente de si la tendencia ya está presente o acaba de ser dibujada, se le asignan los parámetros especificados, los precios en tiempo y coordenadas, el tipo, el grosor y cualquier otra cosa que se pueda añadir. Después, el gráfico se actualiza y la función devuelve true.

En términos de velocidad de ejecución, será menos costoso comprobar la presencia de la tendencia que borrarla y dibujar una nueva.

Pero... la decisión final es tuya y si te gusta rascarte la oreja izquierda con el dedito derecho, no tengo derecho a impedírtelo.

 
Youri Lazurenko:

Y volvemos a dibujar la línea de tendencia. Si necesitas un código.

Un código muy malo.

 
Alexey Viktorov:

Yo haría esto.

Yo habría hecho esto:

void CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
 {
  if(ObjectFind(ChartID(), name) < 0)
   {
    ObjectCreate(ChartID(), name, OBJ_TREND, 0, 0, 0, 0, 0);
    ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
    ObjectSetInteger(ChartID(), name, OBJPROP_STYLE, TrendStyle);
    ObjectSetInteger(ChartID(), name, OBJPROP_WIDTH, TrendWidth);
   }
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 0, time1);
   ObjectSetInteger(ChartID(), name, OBJPROP_TIME, 1, time2);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 0, price1);
   ObjectSetDouble(ChartID(), name, OBJPROP_PRICE, 1, price2);

  ChartRedraw();
 }