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

 

¿Cómo puedo cambiar el parámetro de entrada en el indicador personalizado durante la negociación y aplicar los cambios?

Digamos que tenía ma 25, ahora necesito ma 33.

Por lo que tengo entendido, los parámetros de entrada sólo se establecen durante la inicialización. Pero necesito cambiar el indicador durante el comercio

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",InpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   InpMA_ma_period      = 33;
  }
 
ilvic:

¿Cómo puedo cambiar el parámetro de entrada en el indicador personalizado durante la negociación y aplicar los cambios?

Digamos que tenía ma 25, ahora necesito ma 33.

Por lo que tengo entendido, los parámetros de entrada sólo se establecen durante la inicialización. Pero necesito cambiar el indicador durante el comercio

Cree DOS indicadores por adelantado.

 
Vladimir Karputov:

Cree DOS indicadores por adelantado.

No, no necesito dos indicadores. Tengo que cambiar este durante el comercio.

Quiero que tenga dinámica, por así decirlo.

¿Puedo descargarlo y cargarlo con nuevos parámetros?

 
ilvic:

No, no necesito dos indicadores. Tengo que cambiar este durante el comercio.

La dinámica, por así decirlo.

¿Puede descargarse de alguna manera y cargarse con nuevos parámetros?

Crear tres indicadores :).

En general, hay que pensar primero, crear el entorno y sólo después obtener los datos.

 
Vladimir Karputov:

Crear tres indicadores :).

En general, hay que pensar primero, crear el entorno y sólo después obtener los datos.

Supongamos...

Al inicio del EA la MA = 25;

Con cada nuevo tick cambio la MA = +1.

Es decir, MA = 26;

No voy a crear 500 asas para diferentes condiciones)

 
ilvic:

¿Cómo puedo cambiar el parámetro de entrada en el indicador personalizado durante la negociación y aplicar los cambios?

Digamos que tenía ma 25, ahora necesito ma 33.

Por lo que tengo entendido, los parámetros de entrada sólo se establecen durante la inicialización. Pero necesito cambiar el indicador durante el comercio

Bueno, parece que al cambiar los valores de los parámetros de entrada del EA se activa OnInit(), lo que significa que se aplican los nuevos valores de los parámetros. ¿O me equivoco?

 
Vitaly Muzichenko:

Si se modifican los valores de los parámetros de entrada del EA, se activa OnInit(), lo que significa que se aplican los nuevos valores de los parámetros. ¿O me equivoco?

Lo he probado de esta manera.

No funciona

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

double ExtInpMA_ma_period=InpMA_ma_period;
int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",ExtInpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   ExtInpMA_ma_period      = 33;
  }
 
ilvic:

Lo intenté así.

No funciona.

Pues no funcionará, hay que llamar aOnInit para reinicializar el indicador.

¿Con qué frecuencia se modifican los parámetros durante el funcionamiento?

 
Vitaly Muzichenko:

Pues no se puede, hay que llamar aOnInit para reinicializar el indicador.

¿Con qué frecuencia se modifican los parámetros durante el funcionamiento?

Voy a cambiarlos a menudo.

¿Así que el código debería ser así?

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   
   ExtInpMA_ma_period      = 33;
   OnInit();

  }
 
ilvic:

Voy a cambiarlo mucho.

¿Así que el código debería ser así?

Deberías poner una bandera para comprobar si el valor ha cambiado, para no tener que tirar deOnInit en cada tick

Algo así:

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   static int NewExtInpMA_ma_period;
   if(ExtInpMA_ma_period != NewExtInpMA_ma_period)
    {
     NewExtInpMA_ma_period=ExtInpMA_ma_period;
     OnInit();
    }
  }
Razón de la queja: