в init(), в самом начале -
while ( !IsConnected() ) Sleep(100);
в init(), в самом начале -
while ( !IsConnected() ) Sleep(100);
Не помогло :(
Попробуйте сами, эксперт простой.
int init() { while ( !IsConnected() ) Sleep(100); Print("init(): Open orders:" + OrdersTotal() ) ; return(0); } int deinit() { return(0);} int start() { return(0);}
Перестартовать MT с экспертом привязанным к чарту и хотя бы одним открытым ордером - получите "ноль". Если после этого менять период, прикреплять эксперта к чарту - получите правильное количество открытых ордеров.
странно, у меня работает =) правда, не кол-во сделок, а номер счёта ( AccountNumber() )...
попробуй ещё
попробуй ещё
while ( !IsConnected() ) Sleep(100); Sleep(1000);
while ( !IsConnected() ) Sleep(100); Sleep(1000);
так тоже не работает =)))
а вот так - то, что нужно ;)
bool first = true; int init() { while ( !IsConnected() ) Sleep(100); return(0); } int deinit() { return(0);} int start() { if (first) { Print("init(): Open orders:" + OrdersTotal() ); first = false; } return(0);}
Спасибо, вроде работает
Но с этой init() уже не первый такой случай когда обнаруживается, что функции в нем работают не как в start()... (уже писал про ObjectCreate() в форуме)
Приходится эмулировать этот init() в starte(). Но нужен ли тогда он init() этот. Чтобы им воспользоваться его еще поизучать надо - что в нем будет работать, а что нет...
Г-да разработчики, прокомментируйте пожалуйста. Это бага, или запланированное но недокументированное поведение?
Спасибо
pyrat
Но с этой init() уже не первый такой случай когда обнаруживается, что функции в нем работают не как в start()... (уже писал про ObjectCreate() в форуме)
Приходится эмулировать этот init() в starte(). Но нужен ли тогда он init() этот. Чтобы им воспользоваться его еще поизучать надо - что в нем будет работать, а что нет...
Г-да разработчики, прокомментируйте пожалуйста. Это бага, или запланированное но недокументированное поведение?
Спасибо
pyrat
Не разработчик, но вставлю пару копеек ...
Все работает правильно.
- При запуске терминала запускаются эксперты.
- При этом срабатывает init.
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
Это нормально.
Все работает правильно.
- При запуске терминала запускаются эксперты.
- При этом срабатывает init.
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
Это нормально.
Не разработчик, но вставлю пару копеек ...
Все работает правильно.
- При запуске терминала запускаются эксперты.
- При этом срабатывает init.
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
Это нормально.
Все работает правильно.
- При запуске терминала запускаются эксперты.
- При этом срабатывает init.
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
Это нормально.
Хорошо, и понятно что происходит
Но почему тогда приведенные чуть выше вариант работает (когда перенесли все в start()).
Почему сложно сделать, чтобы init() вел себя как ожидается?
Но почему тогда приведенные чуть выше вариант работает (когда перенесли все в start()).
это потому что старт запускается _только_ при наличии коннекта - с приходом котировки...
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
не логично... если есть связь - должны быть _все_ данные. имхо, конечно, но надо сделать корректную отработку...
- Но связь с сервером либо еще не установлена, либо установлена, но не все данные (напр. ордера) с него подкачаны.
не логично... если есть связь - должны быть _все_ данные. имхо, конечно, но надо сделать корректную отработку... Init - первое действие при подключении эксперта.
И это действие должно отработать тут же, показать результат (если нужно), а не тормозить.
Старайтесь использовать в инициализации подготовку общих данных и не пытайтесь производить реальную работу.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если я прикрепляю эксперта к чарту, или меняю период чарта с уже прикрепленным экспертом - это отрабатывается нормально, сообщается правильное количество открытых ордеров.
Но вот если я выгружаю MT и запускаю заново, и к чарту прикреплен мой эксперт, то количество ордеров равно нулю. Я догадываюсь, что это связано с тем, что MT некоторое время тратит на LOGIN, а эксперт еще до логина отрабатывает функцию OrdersTotal().
Подскажите, как обойти ситуацию, как заставить эксперта подождать окончания LOGIN процесса, ну или еще что нибудь...
Спасибо
pyrat