Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 960

 
Vitaly Muzichenko:

Deve colocar uma bandeira para verificar se o valor mudou, para que não tenha de puxar oOnInit em cada tick

Assim:

Obrigado por ter funcionado.

Tanto quanto sei, preciso de fazerIndicatorRelease

Porque os cálculos antigos ainda estão pendurados na tabela? Pelo menos no testador.

Então o código é assim?

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:

Obrigado por estar a funcionar.

Tanto quanto sei, também precisarei de realizaro IndicatorRelease

Porque o cálculo antigo ainda está pendurado no gráfico? Pelo menos no testador.

Então o código é assim?

E acrescente ao 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;
    }
  }
 

Como fazer com que o meu MA personalizado seja retirado do indicador RSI em vez do preço?

Recebo dados de MA personalizados através doiCustomGet.

Quero fazerum indicador composto (indicador do 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]);
  }

Exemplos 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:

Como fazer com que o meu MA personalizado seja retirado do indicador RSI em vez do preço?

Recebo dados de MA personalizados através doiCustomGet.

Quero fazerum indicador composto (indicador do indicador).

Exemplos para mt4

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

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

Que tal isto: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:

Que tal isto:iMA

Obrigado, exactamente o que eu preciso

 

A isto:

int1 = NormalizeDouble(dou1,0)

O compilador responde: possível perda de dados devido à conversão do tipo

Pergunta: Qual é a forma correcta de o fazer? (para que o compilador não pragueje)

 
User_mt5:

A isto:

O compilador responde: possível perda de dados devido à conversão do tipo

Pergunta: qual é a forma correcta de o fazer? (para que o compilador não pragueje)

O compilador não jura, mas avisa que está a tentar colocar o dobro em int.


 
User_mt5:

A isto:

O compilador responde: possível perda de dados devido à conversão do tipo

Pergunta: Qual é a forma correcta de o fazer? (para que o compilador não pragueje)

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

O compilador não pragueja, mas avisa que está a tentar colocar o dobro em int.


Fiquei perplexo com quase a mesma coisa.

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

Isso é devido a esta int ... Como me lembro SymbolInfoInteger costumava regressar ao tipo int e agora regressa de repente há muito

 
Alexey Viktorov:

Tenho ficado perplexo com praticamente a mesma coisa.

que é por causa desta int ... Como me lembro SymbolInfoInteger costumava regressar ao tipo int e agora regressa de repente há muito

Retorna sempre longo - olhar para SymbolInfoInteger() identificadores de propriedade

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