Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 570

 

Как выполнить проверку условия в заданное время? например, на графике М5, в 22:59, то есть за минуту до закрытия бара. проверять в течении всей минуты.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

Как выполнить проверку условия в заданное время? например, на графике М5, в 22:59, то есть за минуту до закрытия бара. проверять в течении всей минуты.

В индикаторе на истории - только путем чтения данных с младшего ТФ (в данном случае М1), повозиться придется. Ну а для нулевого бара:

  1. Вычислить время до закрытия бара.
  2. Если осталась 1 минута или менее, то делаем то, что необходимо.

 
Ihor Herasko:

...Ну а для нулевого бара:

  1. Вычислить время до закрытия бара.
  2. Если осталась 1 минута или менее, то делаем то, что необходимо.

Это, текущее время отнять время открытия бара? 

Может быть пропускать итерацию если время не в диапазоне 22:59, 23:00

как такое условие правильно записать?

 
PolarSeaman:

Это, текущее время отнять время открытия бара? а разве меньше минуты считает?

Может быть пропускать итерацию если время не в диапазоне 22:59, 23:00

как такое условие правильно записать?

Если время явно заданное, то все также по схеме, приведенной выше:

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

Код не проверял. Возможны опечатки и какие-то недочеты. Здесь главное - направления мысли.

Также нужно проверять, чтобы значения часов и минут были корректными. Ведь пользователь может ввести значения типа 38 часов и 112 минут.

 
Ihor Herasko:

Если время явно заданное, то все также по схеме, приведенной выше:

Код не проверял. Возможны опечатки и какие-то недочеты. Здесь главное - направления мысли.

Также нужно проверять, чтобы значения часов и минут были корректными. Ведь пользователь может ввести значения типа 38 часов и 112 минут.

В глаз, пользователю, за 112 минут)

а почему нельзя так?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

не показывает в указанное время

диапазонов будет несколько каждый нужно отключаемый сделать

 

котировки могут "заснуть" на минуту и время пропустите)

правильно будет - делать таймер, синхронизировать локальное и текущее время, и в таймере "ловить" нужное время

 
PolarSeaman:

В глаз, пользователю, за 112 минут)

а почему нельзя так?

Именно такое решение точно неверное, т. к. Вы сравниваете строки, а не числа. Хотя и с TimeToStr тоже можно что-то придумать. Но такой подход обречен на более низкое быстродействие по сравнению с оперированием числами. Ведь строковые операции занимают несравненно больше время, чем простейшие арифметические операции (+, -, /, *).

диапазонов будет несколько каждый нужно отключаемый сделать

Это делается путем сохранения значений нужных диапазонов в массивы. Правда, непонятно, как это будет выглядеть в настроечных параметрах - слишком много их придется делать. Хотя решения, безусловно, имеются. Непростые, но имеются.

 
Taras Slobodyanik:

котировки могут "заснуть" на минуту и время пропустите)

правильно будет - делать таймер, синхронизировать локальное и текущее время, и в таймере "ловить" нужное время

Ну так ведь требуется как раз ничего не делать в заданное время. Так что все ОК ))

 
Taras Slobodyanik:

котировки могут "заснуть" на минуту и время пропустите)

правильно делать таймер, синхронизировать локальное и текущее время, и в таймере "ловить" нужное время

в OnTimer() можно вставить OnCalculate()?

я не умею синхронизировать локальное и текущее время, в справке не нахожу.

 
Ihor Herasko:

Ну так ведь требуется как раз ничего не делать в заданное время. Так что все ОК ))

как, не делать? только в эту минуту и нужно проверять, а сутки спать)