Метатрейдер 4 не восстанавливает связь с сервером брокера ! Помогите разобраться. - страница 4

 
Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import

//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}
 
Ну вот и все - отлично работает процедруа программного реконнекта :)

Ну и замечательно:)
Кстати, эта процедура будет работать правильно пока структура окон терминала не изменится.
Чтобы она работала более надёжно можно, например, сделать проверку класса окна с хендлом hwnd (искать родительское окно с классом MetaQuotes::MetaTrader::4.00).
Однако при такой реализации вылазит глюк метатрейдера, который описан здесь: "Вызов импортируемых функцих со строковыми параметрами?"
Так что для более надёжного выполения этой функции лучше данный вызов оформить в виде отдельной dll, которая и будет выполнять приведённый выше код. Да и быстрее это будет работать:).
 
Советник всегда цепляется к графику. Родитель окна графика всегда один и тот же.
Как может поменятся структура окон терминала ? Разве что с выходом новых билдов ?
 
Советник всегда цепляется к графику. Родитель окна графика всегда один и тот же.
Как может поменятся структура окон терминала ? Разве что с выходом новых билдов ?

Ну да... именно про это я и говорю... про новые билды....
 

Добрый день.


1CAdmin 14.12.2006 12:33 Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import



Что у меня не работает:))



Вот пример из логов


----------------------

23:02:34 expert_88 EURUSD,H1: SendMessageA = 1
23:02:34 expert_88 EURUSD,H1: SendMessageA = 1
23:02:39 expert_88 EURUSD,H1: SendMessageA = 1
23:02:44 expert_88 EURUSD,H1: SendMessageA = 1
23:02:49 expert_88 EURUSD,H1: SendMessageA = 1
23:02:54 expert_88 EURUSD,H1: 600269__Error open order: 6
23:03:42 expert_88 EURUSD,H1: SendMessageA = 1
23:03:42 expert_88 EURUSD,H1: SendMessageA = 1
23:03:47 expert_88 EURUSD,H1: SendMessageA = 1
23:03:52 expert_88 EURUSD,H1: SendMessageA = 1
23:04:02 expert_88 EURUSD,H1: SendMessageA = 1
23:04:02 expert_88 EURUSD,H1: 600573__Error open order: 6
23:32:29 expert_88 EURUSD,H1: SendMessageA = 1
23:32:29 expert_88 EURUSD,H1: SendMessageA = 1
23:32:34 expert_88 EURUSD,H1: SendMessageA = 1
23:32:39 expert_88 EURUSD,H1: SendMessageA = 1
23:32:44 expert_88 EURUSD,H1: SendMessageA = 1
23:32:49 expert_88 EURUSD,H1: 600573__Error open order: 6
23:39:23 expert_88 EURUSD,H4: SendMessageA = 1
23:39:23 expert_88 EURUSD,H4: SendMessageA = 1
23:39:28 expert_88 EURUSD,H4: SendMessageA = 1
23:39:33 expert_88 EURUSD,H4: SendMessageA = 1
23:39:38 expert_88 EURUSD,H4: SendMessageA = 1
23:39:43 expert_88 EURUSD,H4: 600194__Error open order: 6

---------------------------------------------



Попытка выставления ордера происходит в цикле, 5 раз



С уважением

 

До сих пор существует такая проблема с МТ4 под вин2000 сервер под qemu - не восставнавливает связь с ДЦ после её потери. Аналогичный терминал под ХП справляется сам. МТ4 под вин2000 сервер приходится пинать вручную.

Есть ли какие решения такой проблемы?

Подскажите, пожалуйста.

 

Данная проблема все еще существует. MT 4 билд 221 в Windows XP SP2, без всяких эмуляторов и т.п..

Иногда соединение "зависает", т.е. в терминале индикатор показывает, что связь есть, соединения терминала также видны в фаерволе, но данные по ним не передаются. Еще момент: после такого "зависания соединения", в фаерволе (Agnitum Outpost) не удается "Прервать соединение", оно все равно остается. Исправить ситуацию помогает только повторный "Логин" для этого счета из меню терминала. Такие "зависания" могут происходить несколько раз в день. Возможно это связано с плохой работой сети. Если во время нормальной работы терминала каким-либо образом прервать его сетевые соединения (например в фаерволе), то он фиксирует обрыв связи и восстанавливает подключение. Но после "зависания", как я писал выше, прервать соединение не получается.

Проблема проявляется как на демо-счете так и на реальном. Просьба обратить внимание на эту проблему.

 
Абсолютно согласен, MT4 иногда просто не понимает, что с соединением что-то не то. Использование функции "Обновить" на график не помогает (график обновляется, но живые котировки все равно не идут). Обычно проще всего его перезапустить.
 
Эта проблема решена в 223 билде, который вот-вот будет выложен для скачивания.
 
Rosh :
Эта проблема решена в 223 билде, который вот-вот будет выложен для скачивания.

Может это уже другая проблема, но сегодня в 223 билде у меня из 4-х терминалов (2 на W2003 и 2 на Висте) 2 - по одному на кахдом хосте перестали видеть отложенные ордера и стали выдавать IsConnected()==0. (два других терминала у того же диллера F4U продолжали работать нормально)

При этом котировки продолжали поступать и даже новые отложенники благополучно выставлялись и удалялись

Перелогинивание и смена счета не помогли.

Помогает только перегрузка терминала или смена сервера через "connection status" рескан серверов не попробовал но в 222 билде кажется не помогал.

Проблема очень не приятная потому что при внешнем благополучии советники перестают видеть выставленные ордера.

Как решить ситуацию програмно не знаю пока повесил алерт на пропадание коннекта и буду пробовать выше приведенный скрипт от Norfolc

Причина обращения: