как определить из индикатора, что нужный ТФ кастомного символа уже построен?
Если возвращает Copy-функция значение без ошибки - данные есть.
Если возвращает Copy-функция значение без ошибки - данные есть.
пробовал, но Copy-функция возвращает или -1 в случае ошибки или кол-во скопированных данных (элементы массива), тогда встречный вопрос - как узнать сколько у меня баров на ТФ PERIOD_H2 кастомного символа, чтобы Copy-функцией проверить доступность?...
не вариант, если бы в эксперте делал бы, тогда "подергал" бы раз 10 кастомный символ на нужном ТФ с паузой в 100мс и если Copy-функция возвращает одно и тоже значение, тогда можно считать, что ТФ готов (построен), но в индикаторе нельзя использовать Sleep()
в индикаторе же передаются массивы а так же переменная rates_total - которая говорит сколько всего баров сейчас. При смене таймфрейма он вроде переинициализируется т.е. все расчеты с самого начала пойдут.
на другом ТФ и на другом символе мне нужно, на текущем символе - да, Вы правы
Если возвращает 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 строит получается очень быстро, справка довольно "куцая" по этому вопросу (((

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Просмотрел штук 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 кастомного символа из индикатора работающего на другом символе?
почему возник вопрос: создаем кастомный символ, дождались построения графика и открыли график, если переключить ТФ кастомного символа, то будет несколько секунд черный экран - терминал производит расчет нового ТФ кастомного символа - как определить из индикатора, что нужный ТФ кастомного символа уже построен?