А IsConnected так и не работает!

 

вот было обсуждение https://www.mql5.com/ru/forum/106757

там было заверение

Alexander 14.02.2008 14:53


Спасибо за логи - очень помогли. Ошибку нашли и исправили - некорректно работала именно функция IsConnected - при этом соединение с сервером было и тики приходили. Исправление будет доступно в 212 билде клиентского терминала (он сейчас подготавливается).

я поверил. и даже мысли не допускал что такая функция может работать неправильно!!! а зря....

почти всегда она работает. но вот на на некоторых счетах.... иногда.... конект есть, тики идут, а Print(IsConnected); при этом всем печатает ноль.

уважаемые разработчики. я прекрасно понимаю что для вас четверка уже "хладный труп" в связи с запуском пятерки. НО... она же еще будет жить и людям на ней работать еще предстоит не так уж мало. я два дня убил на поиск ошибки которой у меня не было. обкладывал все что можно отладочной печатью, менял алгоритмы проверки, но IsConnected я верил. верните мне пожалуйста веру в то, что если у вас в документации написано

TRUE - связь с сервером установлена, FALSE - связь с сервером отсутствует или прервана.

то чтоб так оно и было ;)

не ради забавы прошу, у меня на этой проверке серьезные вещи висели, а щас пришлось проверять конект по косвенным признакам, что не есть гуд :(


и еще на всякий случай попрошу, хотя знаю куда меня пошлют: нужна функция IsAccountReady (или чтото такое) которая возвращает true если терминал полсле логина уже зачитал все данные и по истории ордеров, и по истории баров всех открытых графиков - т.е. когда он уже реально готов работать а не еще ждет, пока к нему чтото приедет (ну кроме свежих тиков, конечно).

 

А какой вообще физический смысл в функции IsConnected?

Если связь есть, то тики и так идут. Если связи нет, то нет и тиков, а следовательно не произойдет вызова функции Start, и как следствие дело до вашей функции IsConnected, котрая прописана где-то в недрах функции Start, также не дойдет.

Другими словами: если Start вызвалась, значит связь есть. Для чего вообще нужна IsConnected? В какой момент ей пользоваться? 

 
ForexTools, ты сам себе придумываешь головную боль сначала с кучей терминалов теперь со связью.. запомни, идеала все равно не сделаешь, так что лучше всего пользоваться возможностями в разумный пределах и не мудрить. Функция не надежная? - дак не надо делать ее пупом земли.
 
ForexTools:

вот было обсуждение https://www.mql5.com/ru/forum/106757

там было заверение

я поверил. и даже мысли не допускал что такая функция может работать неправильно!!! а зря....

почти всегда она работает. но вот на на некоторых счетах.... иногда.... конект есть, тики идут, а Print(IsConnected); при этом всем печатает ноль.

уважаемые разработчики. я прекрасно понимаю что для вас четверка уже "хладный труп" в связи с запуском пятерки. НО... она же еще будет жить и людям на ней работать еще предстоит не так уж мало. я два дня убил на поиск ошибки которой у меня не было. обкладывал все что можно отладочной печатью, менял алгоритмы проверки, но IsConnected я верил. верните мне пожалуйста веру в то, что если у вас в документации написано

то чтоб так оно и было ;)

не ради забавы прошу, у меня на этой проверке серьезные вещи висели, а щас пришлось проверять конект по косвенным признакам, что не есть гуд :(


и еще на всякий случай попрошу, хотя знаю куда меня пошлют: нужна функция IsAccountReady (или чтото такое) которая возвращает true если терминал полсле логина уже зачитал все данные и по истории ордеров, и по истории баров всех открытых графиков - т.е. когда он уже реально готов работать а не еще ждет, пока к нему чтото приедет (ну кроме свежих тиков, конечно).

зачем использовать изконектед, когда эта функцию можно сделать самому со всеми необходимыми параметрами.

То есть считается время после последнего тика с помощью зацикленного скрипта с функцией маркетинфо (перебирается весь рынок) и геттиккаунт. Устанавливается предельное время после каждого поступления котировок, когда считается, что нет конекта. Это время спокойно можно ставить 10 секунд.

 

В качестве функции IsAccountReady я использовал AccountNumber. Она всегда возвращает 0 если терминал еще не подключился к серверу и не получил информацию о счете.

А на счет isConnected надо бы по подробнее: что это за "некоторые счета" и, что это за моменты времени, не попавшие в категорию "почти всегда".

 
Techno:

ForexTools, ты сам себе придумываешь головную боль ..... Функция не надежная? - дак не надо делать ее пупом земли.

я не придумываю - просто есть задача от заказчика.

да и нужна мне не столько она сколько IsAccountReady. и вот зачем: если вы не обращали внимание - то понаблюдайте как приходят тики во время запуска терминала ;)

терминал запущен, связь есть, но... история еще не закачалась. и вот начинают приходить бары истории... пачками (наверно) но не все сразу. в результате я получаю несколько тиков, на которые реагирует эксперт. причем тики настолько частые, что эксперт даже конца старт не обрабатывает.

и вот прикиньте себе на минуточку: запустили вы терминал, он подкачал чуть истории, сгенерил тик, ваш старт отрабатывая его проверил и определил что сейчас будет сильный выброс вверх, и.... покупает, т.е. отсылает команду купить! но через три милисекунды приезжает последняя пачка баров, в них цена уже вернулась к тому же уровню что была при выставлении ордера, но это уже откат вниз после пойманного вами выброса. т.е. реально сейчас нужно продавать. добавим в этот сюжет немного экзотики: некоторые ДЦ запрещают выставлять ордера со стопами (сначала ордер без стопа, а потом его модификация) + обрыв связи именно в этот момент. Итого покупка вместо продажи и без стопа с обрубленным инетом и сильным движением вниз.... и это все хозяйство срабатывает не у вас, а у вашего заказчика, который заказал вам эксперта. он, за ним и не следит - он его заказывал чтобы тот торговал вместо него. вот он в конце дня подходит к терминалу (который только что приконектился) и видит Колю Маржина.

ситуация конечно совершенно исключительная, но для вас она может закончится вашим же "исключением" :(((

да, я нашел заменитель. получаю количество ордеров в истории, если не ноль - значит и конект есть и терминал готов, но... у вас есть уверенность что на следующей пачке баров не приедете еще пара тройка исторических ордеров? ;)

 
api:

В качестве функции IsAccountReady я использовал AccountNumber. Она всегда возвращает 0 если терминал еще не подключился к серверу и не получил информацию о счете.

при неуспешном логине номер счета возвращаемый AccountNumber может быть тот на который вы неуспешно логинились, но терминал при этом остался на предыдущем счете.


А на счет isConnected надо бы по подробнее: что это за "некоторые счета" и, что это за моменты времени, не попавшие в категорию "почти всегда".

а вот есть два счета (разных клиентов) которые не отработали процедуру перехода с одного счета на другой. у всех остальных после логина true, а у этих - false :(
 
ForexTools:

я не придумываю - просто есть задача от заказчика.

да и нужна мне не столько она сколько IsAccountReady. и вот зачем: если вы не обращали внимание - то понаблюдайте как приходят тики во время запуска терминала ;)

терминал запущен, связь есть, но... история еще не закачалась. и вот начинают приходить бары истории... пачками (наверно) но не все сразу. в результате я получаю несколько тиков, на которые реагирует эксперт. причем тики настолько частые, что эксперт даже конца старт не обрабатывает.


В инициализации ставите слип на 5 минут, если заказчик сам не может подождать подкачки истории и не запускать советник.
 
vasya_vasya:
В инициализации ставите....

да, способов как стать на уши есть немерянное количество :))

но почему бы разработчикам не предусмотреть такую (очевидно необходимую) функцию совершенно однозначно отвечающую на вопрос готов терминал торговать или нет?! собственно и вопрос то был именно к ним. правда реализовать они ее могут так же как и изконектед...

 
ForexTools:
при неуспешном логине номер счета возвращаемый AccountNumber может быть тот на который вы неуспешно логинились, но терминал при этом остался на предыдущем счете.


а вот есть два счета (разных клиентов) которые не отработали процедуру перехода с одного счета на другой. у всех остальных после логина true, а у этих - false :(


1. Если номер счета меняется, то эксперты отключаются - и это хорошо. А если логин был неуспешный, то и номер счета должен остаться прежний. Вы уверены, что он меняется при неуспешном логине?

2. Значит проблема isConnected возникает только при переключении счетов? При нормальной загрузке терминала с предустановленным экспертом все нормально?

 
api:


1. Если номер счета меняется, то эксперты отключаются - и это хорошо.

а для меня нет. мне нужно отрабатывать несколько счетов

2. Значит проблема isConnected возникает только при переключении счетов?

да, я нарвался именно на переключении, хотя... кто его знает...