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

 
Vladimir Karputov #:

En OnDeinit debes hacerObjectsDeleteAll- borrar por prefijo (en tu caso el prefijo es "HLine")

¿En qué línea debe escribirse "HLine"?

 
Green handsome #:

¿En qué línea debe escribirse "HLine"?

¿Qué no está claro?

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2021.09.10 15:53

Tienes que hacerObjectsDeleteAll en OnDeinit - borrar por prefijo(en tu caso, el prefijo es "HLine")

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   );


 
Vladimir Karputov #:

¿Qué es exactamente lo que no está claro?


int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string      HLine,   // префикс имени объекта
   int       sub_window=-1,   // индекс окна
   int      object_type=-1    // тип объекта для удаления
   
   );

Aquí lo he hecho, todavía no lo borra.

 
void OnDeinit(const int reason)
  {
     {
      ObjectsDeleteAll(0,prefix,0);
     }
//---
   //ChartRedraw();
  }

el prefijo contiene los nombres de las etiquetas gráficas

¿sabes lo que significa el prefijo?

 
Fast235 #:

el prefijo contiene los nombres de las etiquetas gráficas

¿sabes lo que significa el prefijo?

No conozco MQL en absoluto.... Pensé en arreglar un par de líneas y ya está.

 
Green handsome #:

No sé nada de los MQLs en absoluto.... Pensé en arreglar un par de líneas y ya está.

el código anterior debería ayudar, si no, mira el prefijo con el que se crean los objetos

 

¿Por qué no se muestra el nombre corto en la subventana de la esquina superior izquierda?


Además, si cargo un indicador en el gráfico, la segunda copia ya no funciona - OnInit() = no se activa nada y no imprime. Pero si cambio los "Parámetros de entrada" a otros - funciona

#property indicator_separate_window

#property indicator_plots 0

input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
string prog_name,short_name;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
{
  prog_name=MQLInfoString(MQL_PROGRAM_NAME);
  short_name="=Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  Print("INIT_SUCCEEDED");
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
//---

//--- return value of prev_calculated for next call
  return(rates_total);
}

---

Que pasa, en mt4 este código funciona.

 
Vitaly Muzichenko #:

¿Por qué no se muestra el nombre corto en la subventana de la esquina superior izquierda?


Además, si cargo un indicador en el gráfico, la segunda copia ya no funciona - OnInit() = no se activa nada y no se imprime. Pero si cambio los "Parámetros de entrada" a otros - funciona

---

Que pasa, en mt4 este código funciona.

¿Tal vez sea porque es demasiado corto? No hay mapeo, no hay búferes... ¿Por qué hacer una segunda copia de tal indicador, por lo que el terminal se vuelve arbitrario...

 
Vitaly Muzichenko #:

¿Por qué no se muestra el nombre corto en la subventana de la esquina superior izquierda?


Además, si cargo un indicador en el gráfico, la segunda copia ya no funciona - OnInit() = no se activa nada y no se imprime. Pero si cambio los "Parámetros de entrada" a otros - funciona

---

Lo que está mal, este código funciona en mt4.

Yo también tuve un problema con él, pero construí el indicador, todo está bien.

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- indicator buffers
double         Label1Buffer[];
input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   string short_name = MQLInfoString(MQL_PROGRAM_NAME) + "=Set (" + (string)MASlow + "/" + (string)MAFast + ")";
   IndicatorSetString(INDICATOR_SHORTNAME, short_name);
   SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}
//+------------------------------------------------------------------+

Podría comentarlo para saber cuándo deja de escribir el nombre del indicador en la subventana... pero demasiado perezoso

 
Igor Makanu #:

falta algo - probablemente algún tipo de propiedad, también se enfrentan con esto, pero aquí he esbozado el indicador, todo está bien

puedes comentarlo para buscar cuando deja de escribir el nombre del indicador en la subventana... pero perezoso

Los datos se muestran, pero ¿de dónde, si la funciónOnInit() no ha funcionado? Lanzamos una copia en el gráfico y OnInit() puede dispararse por accidente, pero si es otra copia, ya está, no hay ni siquiera una impresión. Pero si cambiamos los parámetros de entrada - entonces funciona.

#property copyright "Copyright 2021, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2


input int MASlow = 21; // Период медленной МА
input int MAFast = 8;  // Период быстрой МА

//+------------------------------------------------------------------+
int wndNum;
string short_name;
double Label1Buffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  short_name="Set ("+(string)MASlow+"/"+(string)MAFast+")";
  IndicatorSetString(INDICATOR_SHORTNAME,short_name);
  wndNum=ChartWindowFind();
  Print("INIT SUCCEEDED: "+(string)wndNum);
  SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA);
//---
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++)
   {
      Label1Buffer[i] = close[i];
   }
   return(rates_total);
}

---

¿Cuál es la solución, por qué OnInit no funciona?

Razón de la queja: