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

 
Vitaly Muzichenko:

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

Así:

Gracias, ha funcionado.

Por lo que entiendo, tengo que hacerIndicatorRelease

¿Porque el viejo cálculo sigue colgado en el gráfico? Al menos en el probador.

¿Entonces el código es así?

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

Gracias, está funcionando.

Según tengo entendido, también tendré que realizar elIndicatorRelease

¿Porque el antiguo cálculo sigue colgado en el gráfico? Al menos en el probador.

¿Entonces el código es así?

Y añadir al código:

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   static int NewExtInpMA_ma_period;
   if(ExtInpMA_ma_period != NewExtInpMA_ma_period)
    {
     NewExtInpMA_ma_period=ExtInpMA_ma_period;
     IndicatorRelease(handle_MA);
     OnInit();
     return;
    }
  }
 

¿Cómo hacer que mi MA personalizada se extraiga del indicador RSI en lugar del precio?

Recibo datos de MA personalizados a través deiCustomGet.

Quiero hacerun indicador compuesto (indicador de indicador).

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()
  {
  double MA_price=0.0;
  MA_price=iCustomGet(handle_MA,0,0);
  Print("MA_price",MA_price);
  }

//Получаем данные кастом МА
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }

Ejemplos para mt4

https://www.mql5.com/ru/forum/110186

https://www.mql5.com/ru/code/22638

Как в коде применить постороение одного индикатора по другому индикатору
Как в коде применить постороение одного индикатора по другому индикатору
  • 2008.08.03
  • www.mql5.com
Хочу написать советника по данной стратегии: http://unfx.ru/strategies_to_trade/strategies_139...
 
ilvic:

¿Cómo hacer que mi MA personalizada se extraiga del indicador RSI en lugar del precio?

Recibo datos de MA personalizados a través deiCustomGet.

Quiero hacerun indicador compuesto (indicador de indicador).

Ejemplos para mt4

https://www.mql5.com/ru/forum/110186

https://www.mql5.com/ru/code/22638

Qué tal esto:iMA

int  iMA( 
   string               symbol,            // имя символа 
   ENUM_TIMEFRAMES      period,            // период 
   int                  ma_period,         // период усреднения 
   int                  ma_shift,          // смещение индикатора по горизонтали 
   ENUM_MA_METHOD       ma_method,         // тип сглаживания 
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle 
   );
 
Vladimir Karputov:

Qué tal esto:iMA

Gracias, justo lo que necesito

 

A esto:

int1 = NormalizeDouble(dou1,0)

El compilador responde: posible pérdida de datos debido a la conversión de tipos

Pregunta: ¿Cuál es la forma correcta de hacerlo? (para que el compilador no maldiga)

 
User_mt5:

A esto:

El compilador responde: posible pérdida de datos debido a la conversión de tipos

Pregunta: ¿cuál es la forma correcta de hacerlo? (para que el compilador no maldiga)

El compilador no maldice, pero le advierte que está tratando de poner double en int.


 
User_mt5:

A esto:

El compilador responde: posible pérdida de datos debido a la conversión de tipos

Pregunta: ¿Cuál es la forma correcta de hacerlo? (para que el compilador no maldiga)

int1 = (int)NormalizeDouble(dou1,0)
 
Artyom Trishkin:

El compilador no maldice, pero advierte que estás tratando de poner double en int.


Me quedé perplejo por casi lo mismo.

deltaH4[i] = NormalizeDouble(bufOpen[i]-bufClose[i], (int)SymbolInfoInteger(m_symbol, SYMBOL_DIGITS));

Esto se debe a esta int ... Según recuerdo SymbolInfoInteger solía devolver tipo int y ahora de repente devuelve long

 
Alexey Viktorov:

Me estaba preguntando casi lo mismo.

que es debido a esta int ... Según recuerdo SymbolInfoInteger solía devolver tipo int y ahora de repente devuelve long

Siempre devuelve long - mira los identificadores de la propiedad SymbolInfoInteger()

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
Razón de la queja: