CopyTime - страница 2

 

Я имел ввиду сетку гистограммой , а отдельные объекты можно объектами и оставить.

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

 
Rashid Umarov:

Выход простой - Оператор возврата return.

У Вас в коде другая проблема, есть строка

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

Приходит тик на новом часовом баре, индикатор пытается запросить данные с 5-минутного и 15-минутного таймфрейма, но они не готовы. Они будут готовы через какое-то очень малое время, если индикатор запросит их на следующем тике. Но на следующем тике их никто  уже не запрашивает, индикатор отваливается на целый час.

Здравствуйте, у меня вопрос - а если рынок закрыт (или нет подключения к интернету)

- новый тик соответственно не приходит, использовать "...Оператор возврата return..." при ошибке функции CopyTime становится некорректным - как быть в такой ситуации?

У меня индикатор берет время открытия бара в истории - СТАРШЕГО таймфрейма,

при первом запуске индикатора на закрытом рынке - выходит ошибка, т.к. использую ...return.

если я вручную перезагружаю индикатор на графике, то все работает как надо.

Как я понимаю - исторические данные СТАРШЕГО таймфрейма (загруженные на ПК) еще не успевают сформироваться для выдачи на первой итерации работы индикатора.

Приведу пример ниже...

Если запустить код на графике, где рынок закрыт - то первая итерация не даст результата. Аналогично, если нет подключения к интернету. (при повторном запуске все работает - закрываем терминал, открываем вновь с запущенным кодом и - увы, опять ошибка, return). Подскажите в каком направлении двигаться? Использование задержки Sleep, OnTimer, а так же копирование и использование структуры MqlRates  командой CopyRates (СТАРШЕГО периода) ни к чему не привели - первая итерация на закрытом рынке не работает! (только после ручной перезагрузки индикатора)

//+------------------------------------------------------------------+
//|                                                          321.mq5 |
//|                                                               Ra |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Ra"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   ENUM_TIMEFRAMES   BigTimeframe=PERIOD_D1;  // СТАРШИЙ ТАЙМФРЕЙМ (текущий, например - H1)
   datetime          GetDate[];
   int               res=0;
   int               count=0;
   int               i=1;
//---
   res=CopyTime(_Symbol,BigTimeframe,i,1,GetDate);  
   if(res==-1)
     {
      Print("Невозможно получить дату!");
      return(rates_total);
     }
   else Print("Дата открытия бара в СТАРШЕМ ТФЙМФРЕЙМЕ: ",GetDate[0]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+