Эксперт выполняет аналитику по открытию нового бара, отдельные тики игнорируются.
Пытаюсь выполнить следующие действия:
Результат:
Иными словами, эксперт получает от терминала историю только текущего периода. Если, не убирая эксперта с графика, переключиться, скажем, на месяцы, то все работает.
Либо это баг терминала, либо моя ошибка. Прошу помощи специалистов.
Спасибо.
Я не считаю себя большим специалистом но попробуй заменить:
for (int i = 0; i <= ArraySize(TF)-1; i++) { if (CopyTime(_Symbol, GetTF(TF[i]), 0, 1, dt) == -1) Print("Не удалось скопировать историю."); else Print(TimeToString(dt[0])); }
на
const int количество_попыток = 10; int rates_total; int err=0; for (int i = 0; i <= ArraySize(TF)-1; i++) { do { rates_total= CopyTime(_Symbol, GetTF(TF[i]), 0, 1, dt); Sleep(1); err++; } while(rates_total<=0 && err<количество_попыток); if(err>=количество_попыток) Print("Не удалось скопировать историю."); else Print(TimeToString(dt[0])); }
или что то подобное.
Rosh, vdv2001.
Спасибо большое за помощь!
Поскольку эта тема достаточно болезненная, может сделать отдельную тему для обсуждения этого раздела документации (по аналогии со статьями)?
У меня возникли следующие вопросы:
Вопрос 1.
На что влияет выбор символа SymbolSelect? Только ли доступность истории или на что-то ещё? Можно проводить торговые сделки, если символ не выбран?
Вопрос 2.
Функция Bars возвращает количество баров в истории по соответствующему символу периоду. Если, например, в минутных данных будет пропуск (не совершались торговые операции), то Bars должна вернуть 0.
В документации <https://www.mql5.com/ru/docs/series/bars> сказано:
Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, то функция вернет нулевое значение.
Но как тогда можно отличить отсутствие данных (отсутствие торговых операций) и неготовность данных? Может лучше при неготовности данных возвращать -1?
Вопрос 3.
Что будет если в функции Bars() примет параметр start_time > текущее время? И stop_time > текущее время? Может добавить это в документацию?
Вопрос 4.
Выполняет ли функция Bars() подгрузку данных, если start_time < первой даты в истории на терминале по заданному символу/периоду, или если stop_time > последней даты на терминале по заданному символу/периоду? Или она просто возвращает сколько есть на данный момент без подгрузки?
Вопрос 5.
При вызове функций семейства CopyRates параметр start_time может попадать неточно на начало интервала? Например, для часовой свечки start_time=00:10:00? Какую свечу выдаст: 0:00:00 или 1:00:00?
Вопрос 6.
В https://www.mql5.com/ru/docs/series/timeseries_access сказано:
Теперь необходимо получить начальную дату по уже имеющейся истории для указанной пары символ/период. Возможно, что значение входного параметра startdate, переданного функции CheckLoadHistory() попадает в интервал уже доступной истории, и тогда никакого запроса к торговому серверу не потребуется. Для получения самой первой даты по символу-периоду на данный момент предназначена функция SeriesInfoInteger() с модификатором SERIES_FIRSTDATE.
Но не факт, что все последующие данные есть! Например, терминал был выключен несколько последних торговых дней, а потом запущен. История по символу с момента последних данных автоматически не загрузится.
Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC. Запросим это значение функцией SeriesInfoInteger() с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.
Вопрос 7.
Вызывают ли следующие функции загрузку данных?
SeriesInfoInteger(Symbol, Period, SERIES_SERVER_FIRSTDATE, FirstServerDate)
- www.mql5.com
Вопрос 1.
На что влияет выбор символа SymbolSelect? Только ли доступность истории или на что-то ещё? Можно проводить торговые сделки, если символ не выбран?
Если говорить о тестере (тестировании в нем мульта) то рабочий символ попадает в MarketWatch автоматом, а значит по нему происходит получение окружения и подгрузка необходимой истории (истории грузится при необходимости синхронизации).
Все остальные символы следует добавить в MarketWatch самостоятельно (в коде эксперта)...
Насколько помню терминал синхронизирует историю с торговым сервером, а агенты тестера с терминалом.
PS
Как я понимаю если символ не выбран в тестере по нему точно сделок выполнить не удастся, будут появляться сплошные ошибки.
Хотя, насколько я помню, разработчики в алгоритме тестера предусмотрели это, но в любом случае лучше выбрать все нужные символы в блоке инициализации.
Вопрос 7.
Вызывают ли следующие функции загрузку данных?
SeriesInfoInteger(Symbol, Period, SERIES_SERVER_FIRSTDATE, FirstServerDate)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Эксперт выполняет аналитику по открытию нового бара, отдельные тики игнорируются.
Пытаюсь выполнить следующие действия:
Результат:
Иными словами, эксперт получает от терминала историю только текущего периода. Если, не убирая эксперта с графика, переключиться, скажем, на месяцы, то все работает.
Либо это баг терминала, либо моя ошибка. Прошу помощи специалистов.
Спасибо.