А какой вообще физический смысл в функции IsConnected?
Если связь есть, то тики и так идут. Если связи нет, то нет и тиков, а следовательно не произойдет вызова функции Start, и как следствие дело до вашей функции IsConnected, котрая прописана где-то в недрах функции Start, также не дойдет.
Другими словами: если Start вызвалась, значит связь есть. Для чего вообще нужна IsConnected? В какой момент ей пользоваться?
вот было обсуждение https://www.mql5.com/ru/forum/106757
там было заверение
я поверил. и даже мысли не допускал что такая функция может работать неправильно!!! а зря....
почти всегда она работает. но вот на на некоторых счетах.... иногда.... конект есть, тики идут, а Print(IsConnected); при этом всем печатает ноль.
уважаемые разработчики. я прекрасно понимаю что для вас четверка уже "хладный труп" в связи с запуском пятерки. НО... она же еще будет жить и людям на ней работать еще предстоит не так уж мало. я два дня убил на поиск ошибки которой у меня не было. обкладывал все что можно отладочной печатью, менял алгоритмы проверки, но IsConnected я верил. верните мне пожалуйста веру в то, что если у вас в документации написано
то чтоб так оно и было ;)
не ради забавы прошу, у меня на этой проверке серьезные вещи висели, а щас пришлось проверять конект по косвенным признакам, что не есть гуд :(
и еще на всякий случай попрошу, хотя знаю куда меня пошлют: нужна функция IsAccountReady (или чтото такое) которая возвращает true если терминал полсле логина уже зачитал все данные и по истории ордеров, и по истории баров всех открытых графиков - т.е. когда он уже реально готов работать а не еще ждет, пока к нему чтото приедет (ну кроме свежих тиков, конечно).
зачем использовать изконектед, когда эта функцию можно сделать самому со всеми необходимыми параметрами.
То есть считается время после последнего тика с помощью зацикленного скрипта с функцией маркетинфо (перебирается весь рынок) и геттиккаунт. Устанавливается предельное время после каждого поступления котировок, когда считается, что нет конекта. Это время спокойно можно ставить 10 секунд.
В качестве функции IsAccountReady я использовал AccountNumber. Она всегда возвращает 0 если терминал еще не подключился к серверу и не получил информацию о счете.
А на счет isConnected надо бы по подробнее: что это за "некоторые счета" и, что это за моменты времени, не попавшие в категорию "почти всегда".
ForexTools, ты сам себе придумываешь головную боль ..... Функция не надежная? - дак не надо делать ее пупом земли.
я не придумываю - просто есть задача от заказчика.
да и нужна мне не столько она сколько IsAccountReady. и вот зачем: если вы не обращали внимание - то понаблюдайте как приходят тики во время запуска терминала ;)
терминал запущен, связь есть, но... история еще не закачалась. и вот начинают приходить бары истории... пачками (наверно) но не все сразу. в результате я получаю несколько тиков, на которые реагирует эксперт. причем тики настолько частые, что эксперт даже конца старт не обрабатывает.
и вот прикиньте себе на минуточку: запустили вы терминал, он подкачал чуть истории, сгенерил тик, ваш старт отрабатывая его проверил и определил что сейчас будет сильный выброс вверх, и.... покупает, т.е. отсылает команду купить! но через три милисекунды приезжает последняя пачка баров, в них цена уже вернулась к тому же уровню что была при выставлении ордера, но это уже откат вниз после пойманного вами выброса. т.е. реально сейчас нужно продавать. добавим в этот сюжет немного экзотики: некоторые ДЦ запрещают выставлять ордера со стопами (сначала ордер без стопа, а потом его модификация) + обрыв связи именно в этот момент. Итого покупка вместо продажи и без стопа с обрубленным инетом и сильным движением вниз.... и это все хозяйство срабатывает не у вас, а у вашего заказчика, который заказал вам эксперта. он, за ним и не следит - он его заказывал чтобы тот торговал вместо него. вот он в конце дня подходит к терминалу (который только что приконектился) и видит Колю Маржина.
ситуация конечно совершенно исключительная, но для вас она может закончится вашим же "исключением" :(((
да, я нашел заменитель. получаю количество ордеров в истории, если не ноль - значит и конект есть и терминал готов, но... у вас есть уверенность что на следующей пачке баров не приедете еще пара тройка исторических ордеров? ;)
В качестве функции IsAccountReady я использовал AccountNumber. Она всегда возвращает 0 если терминал еще не подключился к серверу и не получил информацию о счете.
А на счет isConnected надо бы по подробнее: что это за "некоторые счета" и, что это за моменты времени, не попавшие в категорию "почти всегда".
я не придумываю - просто есть задача от заказчика.
да и нужна мне не столько она сколько IsAccountReady. и вот зачем: если вы не обращали внимание - то понаблюдайте как приходят тики во время запуска терминала ;)
терминал запущен, связь есть, но... история еще не закачалась. и вот начинают приходить бары истории... пачками (наверно) но не все сразу. в результате я получаю несколько тиков, на которые реагирует эксперт. причем тики настолько частые, что эксперт даже конца старт не обрабатывает.
В инициализации ставите....
да, способов как стать на уши есть немерянное количество :))
но почему бы разработчикам не предусмотреть такую (очевидно необходимую) функцию совершенно однозначно отвечающую на вопрос готов терминал торговать или нет?! собственно и вопрос то был именно к ним. правда реализовать они ее могут так же как и изконектед...
при неуспешном логине номер счета возвращаемый AccountNumber может быть тот на который вы неуспешно логинились, но терминал при этом остался на предыдущем счете.
1. Если номер счета меняется, то эксперты отключаются - и это хорошо. А если логин был неуспешный, то и номер счета должен остаться прежний. Вы уверены, что он меняется при неуспешном логине?
2. Значит проблема isConnected возникает только при переключении счетов? При нормальной загрузке терминала с предустановленным экспертом все нормально?
1. Если номер счета меняется, то эксперты отключаются - и это хорошо.
а для меня нет. мне нужно отрабатывать несколько счетов
2. Значит проблема isConnected возникает только при переключении счетов?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
вот было обсуждение https://www.mql5.com/ru/forum/106757
там было заверение
Alexander 14.02.2008 14:53
Спасибо за логи - очень помогли. Ошибку нашли и исправили - некорректно работала именно функция IsConnected - при этом соединение с сервером было и тики приходили. Исправление будет доступно в 212 билде клиентского терминала (он сейчас подготавливается).
я поверил. и даже мысли не допускал что такая функция может работать неправильно!!! а зря....
почти всегда она работает. но вот на на некоторых счетах.... иногда.... конект есть, тики идут, а Print(IsConnected); при этом всем печатает ноль.
уважаемые разработчики. я прекрасно понимаю что для вас четверка уже "хладный труп" в связи с запуском пятерки. НО... она же еще будет жить и людям на ней работать еще предстоит не так уж мало. я два дня убил на поиск ошибки которой у меня не было. обкладывал все что можно отладочной печатью, менял алгоритмы проверки, но IsConnected я верил. верните мне пожалуйста веру в то, что если у вас в документации написано
TRUE - связь с сервером установлена, FALSE - связь с сервером отсутствует или прервана.
то чтоб так оно и было ;)
не ради забавы прошу, у меня на этой проверке серьезные вещи висели, а щас пришлось проверять конект по косвенным признакам, что не есть гуд :(
и еще на всякий случай попрошу, хотя знаю куда меня пошлют: нужна функция IsAccountReady (или чтото такое) которая возвращает true если терминал полсле логина уже зачитал все данные и по истории ордеров, и по истории баров всех открытых графиков - т.е. когда он уже реально готов работать а не еще ждет, пока к нему чтото приедет (ну кроме свежих тиков, конечно).