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

 
PolarSeaman:

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

//+------------------------------------------------------------------+
//| Количество секунд, остающихся до закрытия свечи                  |
//+------------------------------------------------------------------+
long SecondsToCandleClose(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,0,1,array)==1 ? PeriodSeconds(timeframe)+array[0]-TimeCurrent() : 0);
  }
//+------------------------------------------------------------------+
 
PolarSeaman:

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

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

Это два разных обработчика событий. OnCalculate() запускается по новому тику, OnTimer() - по истечению времени, которое задано при запуске таймера.

 
PolarSeaman:

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

Тогда без таймера не обойтись. 

 
Artyom Trishkin:

Спасибо. теперь нужно заставить, ка кто, это работать, в отсутствии тика.

        if(SecondsToCandleClose(Symbol(),0)<=60)
              {
               if(open[i]>close[i] && high[i]-low[i]>=100*Point)
                 {
                  BufferUP[i]=low[i]-distance*Point;
                 }
              }
 
PolarSeaman:

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

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

в момент прихода тика считаем разницу TimeCurrent()-TimeLocal()
- это наше смещение относительно брокера, если это смещение в дальнейшем изменится, значит нужно пересчитывать всё заново
- при старте или появлении бара Д1 пересчитываем все нужные времена, в локальное время
- ждём то что "насчитали" в таймере, попутно проверяя рассинхронизацию, пропадание связи с брокером, перевод локальных стрелок.

 
Ihor Herasko:

Это два разных обработчика событий. OnCalculate() запускается по новому тику, OnTimer() - по истечению времени, которое задано при запуске таймера.

Спасибо, понятно. а индикатор может работать в OnTimer() ?

 
PolarSeaman:

Спасибо. теперь нужно заставить, ка кто, это работать, в отсутствии тика.

Код нужно вставить в OnTimer(). Но, опять же, использовать его на истории нельзя. Поэтому вместо i сразу ставьте 0.

 
PolarSeaman:

Спасибо, понятно. а индикатор может работать в OnTimer() ?

Событие OnTimer() работает в индикаторе. Только не нужно переносить в OnTimer() весь код. Там должна быть только та часть, которая отвечает за отслеживание времени, оставшегося до закрытия свечи. Все остальное должно работать в OnCalculate().

 
Taras Slobodyanik:

в момент прихода тика ...

ну вот... а если тик не пришел? нужно чтобы "заводился" без тика

 
Ihor Herasko:

Но, опять же, использовать его на истории нельзя.

Извините, не пойму, почему нельзя.

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