Ошибки, баги, вопросы - страница 3445
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Однако это не значит, что так будет всегда. С другим брокером, возможно, с большей задержкой, менее быстрым сервером для более простых учетных записей... эти данные могут прийти не сразу. Думаю, если спросить напрямую у 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()?
Вы упускаете ещё один важный момент в статических переменных. Согласно документации статическая переменная может быть инициализирована «соответствующей ее типу константой или константным выражением» но функция не является ни константой, ни константным выражением и соответственно переменной присваивается значение при каждом выполнении функции. То-есть точно так же как и для обычной переменной.
Sleep(1000)" in OnInit() никак не поможет. Полностью загружен советник только после выполнения инициализации.
А вот с инициализацией в конструкторе класса надо экспериментировать. Конечно есть подозрение, что может быть ошибка, но без экспериментов не понять…
Вы упускаете ещё один важный момент в статических переменных. Согласно документации статическая переменная может быть инициализирована «соответствующей ее типу константой или константным выражением» но функция не является ни константой, ни константным выражением и соответственно переменной присваивается значение при каждом выполнении функции. То-есть точно так же как и для обычной переменной.
Sleep(1000)" in OnInit() никак не поможет. Полностью загружен советник только после выполнения инициализации.
А вот с инициализацией в конструкторе класса надо экспериментировать. Конечно есть подозрение, что может быть ошибка, но без экспериментов не понять…
Сначала я хотел использовать такие значения, как SYMBOL_TRADE_TICK_SIZE, SYMBOL_VOLUME_STEP,... в качестве статических переменных только в тех функциях, где они необходимы. Но что, если при запуске им не присвоено никакого значения? Затем я возвращаюсь к запросу или проверке при каждом вызове функции :(
Это также применимо к глобальным структурам и классам.
Поэтому теперь я решил сохранить эти ключевые значения в глобальных переменных, которые назначаются в дополнительной функции в OnInit(). Наверняка сон там сработает?
At first I wanted to use values like SYMBOL_TRADE_TICK_SIZE, SYMBOL_VOLUME_STEP, ... as static variables only in the functions where they are needed. But what if no value is assigned to them at startup? Then I'm back to a query or check with every function call :(
This would also apply to global structures and classes.
So now I decided to store these key values in global variables, which are assigned in an extra function in OnInit(). Surely a sleep will work there?
Сначала я хотел использовать такие значения, как SYMBOL_TRADE_TICK_SIZE, SYMBOL_VOLUME_STEP,... в качестве статических переменных только в тех функциях, где они необходимы. Но что, если при запуске им не присвоено никакого значения? Затем я возвращаюсь к запросу или проверке при каждом вызове функции :(
Это также применимо к глобальным структурам и классам.
Поэтому теперь я решил сохранить эти ключевые значения в глобальных переменных, которые назначаются в дополнительной функции в OnInit(). Наверняка сон там сработает?
At first I wanted to use values like SYMBOL_TRADE_TICK_SIZE, SYMBOL_VOLUME_STEP, ... as static variables only in the functions where they are needed. But what if no value is assigned to them at startup? Then I'm back to a query or check with every function call :(
This would also apply to global structures and classes.
So now I decided to store these key values in global variables, which are assigned in an extra function in OnInit(). Surely a sleep will work there?
во первых при OnInit может вообще не быть связи с торговым сервером, то есть придётся самому генерировать событие OnConnect и уже там инициализировать эти переменные
во вторых STOP_LEVEL меняется часто, и даже VOLUME_MIN, VOLUME_STEP, LEVERAGE (точнее MARGIN_INITIAL, для открытия позиций) могут быть изменены динамически.
структура fxsaber инициализируются и заполняются до запуска OnInit().
Это не так. Структура в режиме заполнения до тех пор, пока не будут получены ненулевые значения.
Не могли бы вы объяснить это более подробно, возможно, со ссылкой?
Would you mind to explain this in more detail, perhaps with a link?Не могли бы вы объяснить это более подробно, возможно, со ссылкой?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2024.01.01 19:36
Интересный костыль, без иронии. А что произойдёт если ::SymbolInfoDouble(_Symbol, Prop_ID) вернёт ошибку?
Я вижу, что в OnInit() структура заполняется, но только там(?) и только один раз(?). Что делать, если OnInit() вызывается в то время, когда соединение с сервером было слишком медленным или временно разорвано, так что функции MQ возвращают ноль вместо реального значения брокера?
Well I see that in OnInit() the structure is filled, but only there(?) and only once(?). What when OnInit() is called while the connection to the server was too slow or temporarily broken so that the MQ functions return zero instead of the real broker value?
Я вижу, что в OnInit() структура заполняется, но только там(?) и только один раз(?). Что делать, если OnInit() вызывается в то время, когда соединение с сервером было слишком медленным или временно разорвано, так что функции MQ возвращают ноль вместо реального значения брокера?
Well I see that in OnInit() the structure is filled, but only there(?) and only once(?). What when OnInit() is called while the connection to the server was too slow or temporarily broken so that the MQ functions return zero instead of the real broker value?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Artyom Trishkin, 2024.01.02 08:42
Если данные не получены - повторить запрос. Если опять нет, то вписать их при старте.СимволInfoDouble() возвращает только эти ошибки:
SymbolInfoDouble() returns only these Errors:No Error in case of connection problem.
Нет Ошибка в случае проблем с подключением.