
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Про Bars() не я придумал
К сожалению, слова Славы не появились в документации. На тот момент и сейчас, наверное, это так. Но не факт, что будет продолжаться и далее. Ведь в документации об этом ни слова. А вот в Примечании к CopyRates недвусмысленно написано:
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Юрий, это не ошибка. Это нормальная работа терминала. Алексей правильно сказал, что функция OnInit - не место для ожидания подкачки данных с сервера. Все это делается в OnTick или OnTimer. Да и отображать графические объекты в OnInit также не обязательно. Ведь они после этого могут быть кем-то уничтожены. А потому их снова нужно будет отображать в OnTick. Следовательно, OnInit для этих целей не подходит (если в OnTick все равно нужно проверять наличие объектов и заново их отображать при необходимости). Выход один - после запроса данных через CopyRates (не Bars, т. к. bars не инициирует подкачку данных) и получения отрицательного результата нужно уходить на ожидание окончания подкачки данных.
Игорь, смотрите, я запускаю советник, допустим история не подкачалась (или что-то ещё случилось) в пределах OnInit() и я получил ошибку 4401. После этого любое количество запусков советника приводит к этой же ошибке.
Дальше я пересбрасываю терминал и запускаю тот же советник - ошибка отсутствует - история синхронизирована в пределах OnInit(). И многократный запуск советника её не вызывает. В одинаковых условиях - разный результат.
Кроме того 4401 - это не просто несинхронные данные, фактически это отсутствие доступа к данным терминала. Я в одном случае такой доступ получаю, а в другом нет. При одинаковых исходных условиях. И это лечится только перезагрузкой.
Алексей, проблема не в том, что нет доступа к данным, проблема в том что терминал однажды отказав в таком доступе не сбрасывает это состояние при новом старте советника. После перезагрузки терминала ошибка не возникает при многократных попытках запуска того же самого кода. То есть проблема в нестабильности поведения терминала. К сожалению ошибка очень трудно повторимая, поймать такую ситуацию повторно не могу.
У меня эта ошибка возникает постоянно на многих биржевых инструментах - просто сыплет в журнал. Данные получаю через CopyXXX()-функции.
И получаю данные в OnTick(), и каждые две минуты обращаюсь к нужным символам. Но ошибка есть всегда.
Уже просто руки опускаются в борьбе с ней...
К сожалению, слова Славы не появились в документации. На тот момент и сейчас, наверное, это так. Но не факт, что будет продолжаться и далее. Ведь в документации об этом ни слова. А вот в Примечании к CopyRates недвусмысленно написано:
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Почему бы не опираться на документированную информацию, если приходится выбирать между словами разработчика и документацией?
Дело в том, что возвращается не просто малое количество данных, а никакое - данные недоступны до пересброса. Трудно назвать это нормальной работой терминала.
К сожалению, слова Славы не появились в документации. На тот момент и сейчас, наверное, это так. Но не факт, что будет продолжаться и далее. Ведь в документации об этом ни слова. А вот в Примечании к CopyRates недвусмысленно написано:
Почему бы не опираться на документированную информацию, если приходится выбирать между словами разработчика и документацией?Опираться на документированную информацию, и говорить, что:
bars не инициирует подкачку данных
когда Вы точно этого не знаете - вообще разные вещи. И Вы здесь не правы.
Опираться на документированную информацию, и говорить, что:
когда Вы точно этого не знаете - вообще разные вещи. И Вы здесь не правы.
ОК. Я неправ.
У меня эта ошибка возникает постоянно на многих биржевых инструментах - просто сыплет в журнал. Данные получаю через CopyXXX()-функции.
И получаю данные в OnTick(), и каждые две минуты обращаюсь к нужным символам. Но ошибка есть всегда.
Уже просто руки опускаются в борьбе с ней...
Артем, а почему ее не обрабатывать без сообщения пользователю? Мне она тоже глаза мозолила - отключил принт и все. Если нет данных/синхронизации, зачем переживать об этом, можно же просто подождать корректных данных.
В цикле по всем символам на сервере нужно получить данные по двум тф каждого символа и принять решение. Данных нет, и программа висит напрочь в ожидании данных, пока они не появятся все. И, как ни странно, их почти всегда каких-то нет. Были, а потом - раз, и уже нету... То есть ошибка на символе, то её нету, а потом опять есть. Обращение к данным организовано раз в две минуты. И всё равно...
никогда не жду скопируются или нет данные, послал команду, скопировало сколько надо идем дальше, не скопировало, сбрасываем флаг последнего доступа и на следующем тике проверяем можно ли скопировать данные.
с уважением.
P.S. а ожидание чего то от копирования, да мало ли какие проблемы могут быть в терминале и почему он не скопировал. других, вменяемых возможностей, я не нашел, только так. копирую только недостающие данные.
Обращение к данным организовано раз в две минуты. И всё равно...