Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 960

 
Vitaly Muzichenko:

Вы должны ставить флаг на проверку изменения значения, чтобы не дёргать OnInit на каждом тике

Как-то так:

Спасибо заработало.

Насколько я понял нужно будет ещё выполнить IndicatorRelease

Потому как старый расчет так и висит на графике? По крайне мере в тестере.

Тогда код такой?

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:

Спасибо заработало.

Насколько я понял нужно будет ещё выполнить IndicatorRelease

Потому как старый расчет так и висит на графике? По крайне мере в тестере.

Тогда код такой?

И добавьте в код:

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;
    }
  }
 

Как заставить мою кастомную МА отрисовыватся не от цены а от индикатора RSI ?

Данные кастомной МА получаю через iCustomGet.

Хочу сделать составной индикатор (индикатор от индикатора).

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]);
  }

Примеры для мт4

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:

Как заставить мою кастомную МА отрисовыватся не от цены а от индикатора RSI ?

Данные кастомной МА получаю через iCustomGet.

Хочу сделать составной индикатор (индикатор от индикатора).

Примеры для мт4

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

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

А если так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:

А если такiMA

Спасибо, то что нужно

 

На такое:

int1 = NormalizeDouble(dou1,0)

Компилятор реагирует так: possible loss of data due to type conversion

Вопрос: а как правильно? (чтоб компилятор не ругался)

 
User_mt5:

На такое:

Компилятор реагирует так: possible loss of data due to type conversion

Вопрос: а как правильно? (чтоб компилятор не ругался)

Компилятор не ругается, а предупреждает, что вы в int пытаетесь засунуть double.


 
User_mt5:

На такое:

Компилятор реагирует так: possible loss of data due to type conversion

Вопрос: а как правильно? (чтоб компилятор не ругался)

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

Компилятор не ругается, а предупреждает, что вы в int пытаетесь засунуть double.


Я только-что недоумевал о почти том-же.

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

вот из-за этого int ... насколько я помню SymbolInfoInteger возвращал тип int а теперь вдруг стал возвращать long

 
Alexey Viktorov:

Я только-что недоумевал о почти том-же.

вот из-за этого int ... насколько я помню SymbolInfoInteger возвращал тип int а теперь вдруг стал возвращать long

Он всегда возвращал long - погляди идентификаторы свойств SymbolInfoInteger()

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