время нулевого бара

 
Как определить в скрипте что время нулевого бара с момента начала открытия пришло минимум определенный период , например минуту ?
 
bergkamp:
Как определить в скрипте что время нулевого бара с момента начала открытия пришло минимум определенный период , например минуту ?

От текущего времени надо отнять время открытия нулевого бара. TimeCurrent()-Time[0] В результате получится кол-во секунд прошедших с момента открытия бара.

 

вот под рукой была готовая ф-ция, требовалось закрывать ордера за t секунд до закрытия бара, проверенно ф-ция работает, модифицируйте под свои нужды

//+------------------------------------------------------------------+
bool CHeckBarTimeLeft(int sec)
  {
   datetime t;
   t=TimeCurrent()-Time[0];
   if(t>=(PeriodSeconds()-sec)) return(true);
   return(false);
  }
//+------------------------------------------------------------------+

в качестве аргумента ф-ция получает требуемое время до закрытия бара в секундах для проверки, возвращает true если бар закроется менее чем sec секунд

 
Vitalii Ananev:

От текущего времени надо отнять время открытия нулевого бара. TimeCurrent()-Time[0] В результате получится кол-во секунд прошедших с момента открытия бара.

есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же ....  как быть в этой ситуации ? 

 
bergkamp:
Как определить в скрипте что время нулевого бара с момента начала открытия пришло минимум определенный период , например минуту ?

В скрипте такое делать не рекомендуется - так как скрипт это программа одноразового запуска: запустили, скрипт отработал и выгрузился из памяти. Здесь нужен советник.

Алгоритм следующий: от текущего времени сервера отнимать время открытия бара #0.

Пример кода:

//+------------------------------------------------------------------+
//|                                   From the moment of opening.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   long seconds=(long)(TimeCurrent()-iTime(Symbol(),Period(),0));
   Comment("From the moment of opening there have passed ",seconds," seconds");
  }
//+------------------------------------------------------------------+
Файлы:
 
bergkamp:

есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же ....  как быть в этой ситуации ? 

Не  понял, что вы имеете в виду.

 
Vladimir Karputov:

В скрипте такое делать не рекомендуется - так как скрипт это программа одноразового запуска: запустили, скрипт отработал и выгрузился из памяти. Здесь нужен советник.

Алгоритм следующий: от текущего времени сервера отнимать время открытия бара #0.

Пример кода:

код mq4 и скрипт не выгружается он работает всегда .... строит оффлайн

 
bergkamp:

код mq4 

Вы задали вопрос в главном разделе MQL5 форума - поэтому и ответ был на MQL5. Для MQL4 есть специально выделенный раздел: MQL4 и MetaTrader 4.


Тема перенесена.

 
bergkamp:

есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же ....  как быть в этой ситуации ? 

Может вам надо это:

int TF = PERIOD_M15;
datetime TM = 0;
int BarI  = 0;
void OnTick()
{
   if (TM!=iTime(Symbol(),TF,BarI))
   { 
        TM = iTime(Symbol(),TF,BarI);
   }
   Print("С момента открытия бара #",BarI, "прошло", TimeCurrent()-TM);  
}
 
Vitalii Ananev:

Может вам надо это:

как узнать время открытия бара и уловить момент если оно меняется ?

 
bergkamp:

как узнать время открытия бара и уловить момент если оно меняется ?

Время открытия бара не меняется. Узнать его можно с помощью функции iTime()

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