Как определить доступность данных OHLC кастомного символа?

 

Просмотрел штук 50 примеров в CodeBase и статей с десяток, одинаковых приемов проверки готовности данных OHLC по другим символам или ТФ не увидел - у всех не однозначные приемы проверки доступности данных OHLC с других ТФ (символов)

для экспертов или скриптов хорошо работает и багов не выявлено этот код https://www.mql5.com/ru/code/1251

для индикаторов код выше не подходит, справка https://www.mql5.com/ru/docs/series/timeseries_access

для индикаторов работающих на одном символе с разными ТФ нашел корректно работающий пример https://www.mql5.com/ru/code/20643  , но этот пример не годится для мультивалютных индикаторов, но можно модифицировать - функция bool timeFrameCheck(ENUM_TIMEFRAMES _timeFrame,const datetime &time[]) 



Нужна реализация для MQL5 - именно для индикатора

интересует вопрос, как правильно организовать доступ к OHLC кастомного символа из индикатора работающего на другом символе? 

почему возник вопрос: создаем кастомный символ, дождались построения графика и открыли график, если переключить ТФ кастомного символа, то будет несколько секунд черный экран - терминал производит расчет нового ТФ кастомного символа - как определить из индикатора, что нужный ТФ кастомного символа уже построен?


 
Igor Makanu:

как определить из индикатора, что нужный ТФ кастомного символа уже построен?

Если возвращает Copy-функция значение без ошибки - данные есть.

 
fxsaber:

Если возвращает Copy-функция значение без ошибки - данные есть.

пробовал, но Copy-функция возвращает или -1 в случае ошибки или кол-во скопированных данных (элементы массива), тогда встречный вопрос - как узнать сколько у меня баров на ТФ PERIOD_H2 кастомного символа, чтобы  Copy-функцией проверить доступность?...


не вариант, если бы в эксперте делал бы, тогда "подергал"  бы раз 10 кастомный символ на нужном ТФ с паузой в 100мс и если  Copy-функция возвращает одно и тоже значение, тогда можно считать, что ТФ готов (построен), но в индикаторе нельзя использовать Sleep()

 
в индикаторе же передаются массивы а так же переменная rates_total - которая говорит сколько всего баров сейчас. При смене таймфрейма он вроде переинициализируется т.е. все расчеты с самого начала пойдут.
 
Andrey Azatskiy:
в индикаторе же передаются массивы а так же переменная rates_total - которая говорит сколько всего баров сейчас. При смене таймфрейма он вроде переинициализируется т.е. все расчеты с самого начала пойдут.

на другом ТФ и на другом символе мне нужно, на текущем символе - да, Вы правы


fxsaber:

Если возвращает Copy-функция значение без ошибки - данные есть.

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

Экспертом создаю кастомный символ с ТФ = PERIOD_H1 и сразу же пытаюсь получить через Copy-функции данные с ТФ = PERIOD_M5. Вот в конце эксперта дописываю этот код:

CFileTxt *f=new CFileTxt;
   f.Open("tsticopy.txt",FILE_WRITE);
   datetime t[];
   datetime st =0,end = TimeCurrent();
   f.WriteString("CopyTime() count = 10, pause = 100 ms"+"\n");
   int i,rate;
   string s = "";
   for(i=0;i<10;i++)
   {
      rate = CopyTime("H"+_Symbol,PERIOD_M5,st,end,t);
      s += IntegerToString(rate)+"\n";
      Sleep(100);
   }
   f.WriteString(s);
   f.WriteString("CopyTime() count = 10, pause = 1000 ms"+"\n");
   s="";
   for(i=0;i<10;i++)
   {
      rate = CopyTime("H"+_Symbol,PERIOD_M5,st,end,t);
      s += IntegerToString(rate)+"\n";
      Sleep(1000);
   }
   f.WriteString(s);
   f.Close();
   delete f;
   Print("Write ready");

вот лог:

CopyTime() count = 10, pause = 100 ms

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980

CopyTime() count = 10, pause = 1000 ms

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980

1505980


т.е. даже при первом вызове Copy-функции будет доступен весь ТФ 

В принципе вопрос решен, темный экран чарта при переключении кастомного графика смутил, но таймсерии МТ5 строит получается очень быстро, справка довольно "куцая" по этому вопросу (((

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