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

 
Alexey Viktorov:

Никто не отказался-бы от них, но они принимают только хендлы, а не произвольные массивы как в mql4

Ясно. Я тему попутал. Думал по четвёрке вопрос.
 
Artyom Trishkin:
Ясно. Я тему попутал. Думал по четвёрке вопрос.

Вопрос о переводе на пятёрку, и цель - получить аналогичное отображение, как сейчас на четвёрке

Вот более полный код, символы подставляются в индикатор нажатием кнопок на графике, то есть Инитом не обойтись

  for(int i=0; i<limit; i++) {
    Last[i] = Symbol1_Vol*Vol1*iClose(Symbol1_Name,0,iBarShift(Symbol1_Name,0,Time[i])) - 
              Symbol2_Vol*Vol2*iClose(Symbol2_Name,0,iBarShift(Symbol2_Name,0,Time[i]));
  }

 for(int i=0; i<limit; i++) {
    if(ButtonSt) { // кнопка выбора, отображать Bands, или Envelopes
     MA[i]=iMAOnArray(Last,0,Env_Period,0,MODE_SMA,i);
     LineUp[i]=iEnvelopesOnArray(Last,0,Env_Period,MODE_SMA,0,Env_Dev,MODE_UPPER,i);
     LineDn[i]=iEnvelopesOnArray(Last,0,Env_Period,MODE_SMA,0,Env_Dev,MODE_LOWER,i);
    } else {
     MA[i]=iMAOnArray(Last,0,BB_Period,0,MODE_SMA,i);
     LineUp[i]=iBandsOnArray(Last,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
     LineDn[i]=iBandsOnArray(Last,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
    }
  }

Как это перевести на пятёрку? Или это невозможно, в связи с отсутствующим в ней функционалом?

 
Vitaly Muzichenko:

Вопрос о переводе на пятёрку, и цель - получить аналогичное отображение, как сейчас на четвёрке

Вот более полный код, символы подставляются в индикатор нажатием кнопок на графике, то есть Инитом не обойтись

Как это перевести на пятёрку? Или это невозможно, в связи с отсутствующим в ней функционалом?

Так никто не навязывает получать хендл в ините...

 
Alexey Viktorov:

Так никто не навязывает получать хендл в ините...

Я же не против)

Не могу понять, чем вообще заменить iEnvelopesOnArray и iBandsOnArray,так как этого нет в пятёрке, и с чего начать - не представляю. Нужно получить полностью идентичное отображение в МТ5

 
Vitaly Muzichenko:

Я же не против)

Не могу понять, чем вообще заменить iEnvelopesOnArray и iBandsOnArray,так как этого нет в пятёрке, и с чего начать - не представляю. Нужно получить полностью идентичное отображение в МТ5

Потому, что уже не первый раз игнорируешь написанное

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Alexey Viktorov, 2017.09.21 20:06

В корне include есть MovingAverages.mqh а вот ВВ не искал, может и нету. Но лучший вариант в функцию iMA в качестве цены сунуть хендл индикатора источника данных.

У меня пример только со сглаженной iMA

int haMa8, haFastMa, haMa21, haSlowMa;

int OnInit()
 {
   haMa8  = iMA(_Symbol, PERIOD_CURRENT, perFastMa, 0, metodFastMa, priceFastMa);
   haFastMa = iMA(_Symbol, PERIOD_CURRENT, perFastMa, 0, metodFastMa, haMa8);
   
   haMa21 = iMA(_Symbol, PERIOD_CURRENT, perSlowMa, 0, metodSlowMa, priceSlowMa);
   haSlowMa = iMA(_Symbol, PERIOD_CURRENT, perSlowMa, 0, metodSlowMa, haMa21);

//Продолжение догадаешься

Аналогично и ВВ.

Если-же источник, пользовательский индикатор, то придётся

  • Сделать его отдельно.
  • Создать новый индикатор.
  • В него прицепить первый в качестве ресурса.
  • И тогда получив его хендл сунуть в iMA и другие функции.

Вот такие заморочки...


 
Alexey Viktorov:

Потому, что уже не первый раз игнорируешь написанное

В корне include есть MovingAverages.mqh а вот ВВ не искал, может и нету.
Есть: \MQL5\Include\Indicators\Trend.mqh
 
Artyom Trishkin:
Есть: \MQL5\Include\Indicators\Trend.mqh

Спасибо, теперь нашёл.

Мне надо было применить iTEMA к пользовательскому индикатору, так я и не догадался там поискать... Сделал как описано выше, всё работает без нареканий.

 

Прошу помочь с составлением функции.

У меня есть текущий ТФ и расчетный ТФ, функция должна возвращать разность между двумя ТФ в любых комбинациях, если бы измерение было в барах

Расчетный ТФ 15 15 15 60 60 60 240 240 240
Текущий ТФ 15 5 1 15 5 1 60 15 5
Разность в Nбар 1 3 15 4 12 60 4 16 48

Как это реализовать правильно?

 
Aleksey Vyazmikin:

Прошу помочь с составлением функции.

У меня есть текущий ТФ и расчетный ТФ, функция должна возвращать разность между двумя ТФ в любых комбинациях, если бы измерение было в барах

Расчетный ТФ 15 15 15 60 60 60 240 240 240
Текущий ТФ 15 5 1 15 5 1 60 15 5
Разность в Nбар 1 3 15 4 12 60 4 16 48

Как это реализовать правильно?


Сделал так 

int TFk()
{
   int K=0;
   K=TF_transfer(TF)/TF_transfer(Period());
//   Print(TF_transfer(TF),"   ",TF_transfer(Period()));
//Print (K);
   if   (K<1)return(1);
   else      return(K);
}


int TF_transfer(ENUM_TIMEFRAMES tf)
  {
   if (tf==PERIOD_CURRENT) return(0);
   if (tf==PERIOD_M1) return(1);
   if (tf==PERIOD_M5) return(5);
   if (tf==PERIOD_M15) return(15);
   if (tf==PERIOD_M30) return(30);
   if (tf==PERIOD_H1) return(60);
   if (tf==PERIOD_H4) return(240);
   if (tf==PERIOD_D1) return(1440);
   if (tf==PERIOD_W1) return(10080);
   if (tf==PERIOD_MN1) return(43200);  
   if (tf==PERIOD_M2) return(2);
   if (tf==PERIOD_M3) return(3);
   if (tf==PERIOD_M4) return(4);
   if (tf==PERIOD_M6) return(6);
   if (tf==PERIOD_M10) return(10);
   if (tf==PERIOD_M12) return(12);
   if (tf==PERIOD_H2) return(120);
   if (tf==PERIOD_H3) return(180);  
   if (tf==PERIOD_M6) return(360);
   if (tf==PERIOD_H8) return(480);
   if (tf==PERIOD_H12) return(720);
   return(1);
  }

Беда в том, что мне это счастье надо для индикатора, а он, чудит и не хочет корректно инициализироватся, на такой код

int OnInit()
  {
   Print ("K=",TFk()," Период=",Period());

return(INIT_SUCCEEDED); }

Реагирует так:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Период=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Период=15

Самое не понятное, это то, что принтуется тест, который уже в теле OnCalculate!

if(BarsCalculated(handle)<0) {Print ("test");return(0);}

Получается, что первый раз тайм фрейм правильно определен, а второй раз уже нет...

Что за чудеса, уж и не знаю...

Хотя знаю, это вызов индикатора из индикатора происходит... бег по кругу...
 
Aleksey Vyazmikin:

Сделал так 

Беда в том, что мне это счастье надо для индикатора, а он, чудит и не хочет корректно инициализироватся, на такой код

Реагирует так:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Период=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Период=15

Самое не понятное, это то, что принтуется тест, который уже в теле OnCalculate!

Получается, что первый раз тайм фрейм правильно определен, а второй раз уже нет...

Что за чудеса, уж и не знаю...

Хотя знаю, это вызов индикатора из индикатора происходит... бег по кругу...

А зачем такие извращения???

Разве так не проще?

K = PeriodSeconds(TF)/PeriodSeconds(Period());