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

 
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());
 
Alexey Viktorov:

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

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


Так ветка для начинающих, поэтому я и не знал о такой возможности, спасибо, что подсказали.

 

Подскажите, пожалуйста, какая сейчас самая надежная функция iBarShift с двумя ТФ ?

У меня задача найти, к примеру, на минутном баре значение индикатора с верхнего ТФ, к примеру, М15. Тайм фреймы могут быть любые, что усложняет решение.

Для ТФ час, я сделал через структуру, но если это М15, то тут я в замешательстве...

 
Aleksey Vyazmikin:

Подскажите, пожалуйста, какая сейчас самая надежная функция iBarShift с двумя ТФ ?

У меня задача найти, к примеру, на минутном баре значение индикатора с верхнего ТФ, к примеру, М15. Тайм фреймы могут быть любые, что усложняет решение.

Для ТФ час, я сделал через структуру, но если это М15, то тут я в замешательстве...

Покрутите этот скрипт: Searching Nearest Bar

 
Vladimir Karputov:

Покрутите этот скрипт: Searching Nearest Bar


Спасибо.

 
Aleksey Vyazmikin:

Так ветка для начинающих, поэтому я и не знал о такой возможности, спасибо, что подсказали.

Алексей, это ведь уже давным давно в mql4 есть.


Aleksey Vyazmikin:

Подскажите, пожалуйста, какая сейчас самая надежная функция iBarShift с двумя ТФ ?

У меня задача найти, к примеру, на минутном баре значение индикатора с верхнего ТФ, к примеру, М15. Тайм фреймы могут быть любые, что усложняет решение.

Для ТФ час, я сделал через структуру, но если это М15, то тут я в замешательстве...

А в этом случае постарайся забыть про нумерацию баров как это было в mql4. В mql5 почти всё решается по времени бара. Ну в крайнем случае воспользуйся функцией Bars()

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Алексей, это ведь уже давным давно в mql4 есть. 

Видимо это говорит о том, что я и mql4 хорошо не знаю, что я никогда и не утверждал...

Alexey Viktorov:

А в этом случае постарайся забыть про нумерацию баров как это было в mql4. В mql5 почти всё решается по времени бара. Ну в крайнем случае воспользуйся функцией Bars()

Вы уверены в округлении?

Допустим время на м1 14:44, а мне нужно получить время 14:30 (первый бар М15).

 
Aleksey Vyazmikin:

Видимо это говорит о том, что я и mql4 хорошо не знаю, что я никогда и не утверждал...

Вы уверены в округлении?

Допустим время на м1 14:44, а мне нужно получить время 14:30 (первый бар М15).

Это что-то из другой серии. Что надо получить в 14:44 с периода М15 бара 14:30? Бери функцию Copy**** в неё ставь PERIOD_M15 и время 14:44 посмотри что получится. А когда получится не то, что ожидал, тогда и вопросы будут другие.

 
Alexey Viktorov:

Это что-то из другой серии. Что надо получить в 14:44 с периода М15 бара 14:30? Бери функцию Copy**** в неё ставь PERIOD_M15 и время 14:44 посмотри что получится. А когда получится не то, что ожидал, тогда и вопросы будут другие.


Да в этом направлении и работал. В общем, мне помогли. Спасибо и Вам.

Причина обращения: