Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для чего вы в OnCalculate повторяете то что было в OnInit? Это такое заклинание?)
Это простая магия копи/паста))
Хорошо, объясню популярно. Однократной проверки в ините готовности данных не достаточно. Поскольку данные формируются асинхронно (чтобы не тормозить основной процесс), то, на момент проверки в ините, вполне можно получить ошибку данных (зависит от многих факторов).
Поэтому, проверку нужно делать и (или только) в калькулейте и не начинать основные расчеты, пока все нужные данные не появятся - то есть проверять до готовности на каждом тике.
Это простая магия копи/паста))
Хорошо, объясню популярно. Однократной проверки в ините готовности данных не достаточно. Поскольку данные формируются асинхронно (чтобы не тормозить основной процесс), то, на момент проверки в ините, вполне можно получить ошибку данных (зависит от многих факторов).
Поэтому, проверку нужно делать и (или только) в калькулейте и не начинать основные расчеты, пока все нужные данные не появятся - то есть проверять до готовности на каждом тике.
О чем и речь, функция OnInit в индикаторе бутафория, или разработчики халтурят.
Копи/паст великая вещь, сам грешу ))
Покричали, обозвали чукчей, а проблема-то не решена!
Закачку истории не написал ещё, НО данные есть в терминале, а НЕ БЕРУТСЯ из него с первого раза!
Ок, интересно!
Индикаторы работают в своем потоке, советники в своем. Если конечно не одноядерный камень.
Всё происходит ровно так, как и написано в документации. :)
Набросал для проверки индикатор и эксперта + результат на видео.
1) Сначала бросаю на график эксперта, у которого внутри OnTick есть функция, работающая в течение 20 секунд.
Результат – чат продолжает работать и отображать всё как надо. Стакан тоже работает как надо.
2) Потом бросаем на график индикатор, у которого внутри OnCalculate есть функция, работающая в течение 20 секунд.
Результат – чат подвисает. Причем соседний чат с тем же символом, на котором установлен другой период тоже подвисает. Стакан продолжает работать как надо. После того как функция отработала – всё возвращается на круги своя.
3) На видео этого нет - но если на один чат набросить индикатор (поставьте 60 сек), а на другой эксперта - эксперт не начинает работать пока не отглючит индикатор на другом чате!!!
Видео прикрепил отдельно - в браузере у меня тормозит.
Всё происходит ровно так, как и написано в документации. :)
Набросал для проверки индикатор и эксперта + результат на видео.
1) Сначала бросаю на график эксперта, у которого внутри OnTick есть функция, работающая в течение 20 секунд.
Результат – чат продолжает работать и отображать всё как надо. Стакан тоже работает как надо.
2) Потом бросаем на график индикатор, у которого внутри OnCalculate есть функция, работающая в течение 20 секунд.
Результат – чат подвисает. Причем соседний чат с тем же символом, на котором установлен другой период тоже подвисает. Стакан продолжает работать как надо. После того как функция отработала – всё возвращается на круги своя.
3) На видео этого нет - но если на один чат набросить индикатор (поставьте 60 сек), а на другой эксперта - эксперт не начинает работать пока не отглючит индикатор на другом чате!!!
Видео прикрепил отдельно - в браузере у меня тормозит.
Спасибо, видео не получается посмотреть, поизучаю.
Если Пытаетесь получить данные из торгового окружения при работе из индикатора, то даже не пытайтесь задавать запросы в OnInit(). Проводите запросы и проверки ответа в OnCalculate(). При получении данных или с чужого инструмента или с другого таймфрейма практически гарантировано, что Вам не удастся даже в OnCalculate() с первого раза получить данные. Поэтому проводите проверку возврата значений. Если значения не получены, пробуйте получить данные на следующем тике в OnCalculate().
Так же уже интересен ответ сервисдеска - код который был предоставлен.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
ФОРТС Прошу помощи
alexvd, 2015.03.26 15:48
Вам в сервисдеске дали исходник. Попробуйте поместить ваш последний код в функцию Test().Уже спортивный интерес - автор продолжает писать свой код и игнорирует код сервисдеска?
Если Пытаетесь получить данные из торгового окружения при работе из индикатора, то даже не пытайтесь задавать запросы в OnInit(). Проводите запросы и проверки ответа в OnCalculate(). При получении данных или с чужого инструмента или с другого таймфрейма практически гарантировано, что Вам не удастся даже в OnCalculate() с первого раза получить данные. Поэтому проводите проверку возврата значений. Если значения не получены, пробуйте получить данные на следующем тике в OnCalculate().
+++ и так до победного. Т.е если данных нет - return;
Это смотря, что запрашивать. И сколько делать запросов - это уже целиком зависит от предпочтений писателя кода.
Вы понимаете, что
если есть данные в терминале, то функция
Не должна возвращать FALSE?
P/S код СД ТОЖЕ НЕ РАБОТАЕТ С ПЕРВОГО РАЗА!
ЕЩЁ РАЗ.
из справки:
SeriesInfoInteger
Возвращает информацию о состоянии исторических данных. Существует 2 варианта функции.
Второй вариант:
SERIES_TERMINAL_FIRSTDATE
Самая первая дата в истории по символу в клиентском терминале независимо от периода
datetime
НЕ ДОЛЖНА ФУНКЦИЯ ВОЗВРАЩАТЬ FALSE, ЕСЛИ ЕСТЬ ДАННЫЕ В ТЕРМИНАЛЕ!!!
Откуда бы Вы её не вызывали!