Ошибки, баги, вопросы - страница 3444
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Т.е. номер строки файла, где произошла ошибка смог определить, а имя самого файла нет - не первый раз уже такое встречаю
Результат: 1 а почему не 2 ?
Ожидалось: Сообщение об ошибке
Результат: 1 а почему не 2 ?
Ожидалось: Сообщение об ошибке
Зачем Warning ?! Когда вместо него достаточно разрешить в MQL цивилизованную запись (*)
Представим себе функцию, вычисляющую и проверяющую объем.
Перед этим ему нужны эти значения с сервера брокера: SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX, SYMBOL_VOLUME_STEP.
Обычно нет необходимости запрашивать их снова и снова при каждом вызове функции.
вы просто можете объявить их как статические переменные в начале этой функции:
Ноуууу, эти объявления выполняются первыми при запуске советника, еще до OnInit.
Просто нажмите F9 в строке «static double..» и запустите отладчик, чтобы увидеть это.
Что делать, если эти (и другие) данные еще не пришли с сервера?
Из-за параллельной обработки выполнение советника (имхо!) НЕ останавливается до тех пор, пока все полученные данные не станут доступны локально.
Жаль, что это частично лишает законной силы концепцию локальных статических переменных.
Моим первым решением было бы использовать вместо них обычные глобальные переменные, которые назначаются в OnInit в цикле, пока все они не станут ненулевыми.
Кто-нибудь знает другое решение?
Let's imagine a function that calculates and checks the volume.
Before that, it needs these values from the broker's server: SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX, SYMBOL_VOLUME_STEP.
Normally there is no need to query these again and again with every function call,
you just could declare them as static variables at the beginning of this function:
Buuuuut, these declarations are executed first when the EA is started, even before OnInit.
Just press F9 at the line "static double .." and start the debugger to see this.
What if this (and other) data has not yet arrived from the server?
Because of the parallel processing, the execution of the EA is (imho!) NOT stopped until all retrieved data is available locally.
Too bad, this partly invalidates the concept of local static variables.
My first solution would be to use instead of them normal global variables which are assigned in OnInit in a loop until all are non-zero.
Does anyone know another solution?
Кто-нибудь знает другое решение?
что все данные поступили с сервера после запуска советника, вживую или в тестере.
Действительно ли выдается ошибка, если запрошенных данных еще нет во внутреннем кеше?
Thanks, but I'm more interested in the solution to the problem, how can you best ensurethat all data has arrived from the server after starting an EA, live or in the tester.
Is an error actually thrown if the requested data is not yet there - in the internal cache?
Спасибо, но меня больше интересует решение проблемы, как можно лучше обеспечить
что все данные поступили с сервера после запуска советника, вживую или в тестере.
Действительно ли выдается ошибка, если запрошенных данных еще нет во внутреннем кеше?
Thanks, but I'm more interested in the solution to the problem, how can you best ensurethat all data has arrived from the server after starting an EA, live or in the tester.
Is an error actually thrown if the requested data is not yet there - in the internal cache?
Я сегодня первый раз запустил МТ и прилетело обновление. После обновления такой код
даёт такой результат
Не знаю в кеше что-то было или нет, но результат есть.
Я сегодня первый раз запустил МТ и прилетело обновление. После обновления такой код
даёт такой результат
Не знаю в кеше что-то было или нет, но результат есть.
Однако это не значит, что так будет всегда. С другим брокером, возможно, с большей задержкой, менее быстрым сервером для более простых учетных записей... эти данные могут прийти не сразу. Думаю, если спросить напрямую у MQ, то они ответят, что не могут этого гарантировать.
Можно видеть, что ваш класс, как и структура fxsaber или статические переменные в функциях, инициализируются и заполняются до запуска OnInit(). А что, если эти данные поступят немного позже? Помню, в тестере исторические котировки индикаторов могли запаздывать и приходилось делать дополнительную проверку в основной функции...
Следовательно, как убедиться ? «Сон (1000)» в OnInit()?
However, this does not mean that it will always be like this. With another broker, with maybe more latency, a less fast server for simpler accounts, ..., this data may not arrive immediately. I think if you ask MQ directly, they will answer that they cannot guarantee that.
One can see that your class, like the structure of fxsaber or the static variables in the functions, are initialized and filled before OnInit() is started. But what if this data arrives a little later? I remember that in the tester the historic quotes for the indicators might come to late and I had to do an extra check in the main function...
Ergo, how to make sure? A "Sleep(1000)" in OnInit()?
Однако это не значит, что так будет всегда. С другим брокером, возможно, с большей задержкой, менее быстрым сервером для более простых учетных записей... эти данные могут прийти не сразу. Думаю, если спросить напрямую у MQ, то они ответят, что не могут этого гарантировать.
Можно видеть, что ваш класс, как и структура fxsaber или статические переменные в функциях, инициализируются и заполняются до запуска OnInit(). А что, если эти данные поступят немного позже? Помню, в тестере исторические котировки индикаторов могли запаздывать и приходилось делать дополнительную проверку в основной функции...
Следовательно, как убедиться ? «Сон (1000)» в OnInit()?
However, this does not mean that it will always be like this. With another broker, with maybe more latency, a less fast server for simpler accounts, ..., this data may not arrive immediately. I think if you ask MQ directly, they will answer that they cannot guarantee that.
One can see that your class, like the structure of fxsaber or the static variables in the functions, are initialized and filled before OnInit() is started. But what if this data arrives a little later? I remember that in the tester the historic quotes for the indicators might come to late and I had to do an extra check in the main function...
Ergo, how to make sure? A "Sleep(1000)" in OnInit()?