Build 216 bug ? isConnected() возвращает false, но metatrader все еще подключен - страница 3

 
edddim:

Может ли это решить проблему?

string FILE[1];
int MOVE[1];
 
void init() { FILE[0]=Symbol(); }
 
int start()
  {
//---- check connection
   if ( !Connection() ) return(0);
//---- 
   return(0);
  }
 
bool Connection()
  {
   int d;
   bool connect;
   RefreshRates();
   for ( d=0; d<ArraySize(FILE); d++)
    {
     if ( MOVE[d] != MarketInfo(FILE[d],5) )
      {
       MOVE[d] = MarketInfo(FILE[d],5);
       /* if ( !connect ) */
       connect=1;
      }
    }
   return(connect);
  }

Спасибо, edddim!


не могли бы вы объяснить вашу идею также словами?

 

the problem is not in my code it is in the IsConnected().

Спасибо, что осветили причины, по которым вы остаетесь в бесконечном цикле.

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

Поскольку вы утверждаете, что действительно остаетесь в цикле, то не может ли быть так, что Terminal не может обработать это правильно... кто знает... но если не обнародовать эти идеи, никому не придет в голову рассматривать вероятность такого развития событий, да?

Еще раз спасибо за ваш ответ.

Служба поддержки не может эмулировать вашу проблему - так что иногда боковое мышление полезно...

;)

 

не могли бы вы объяснить вашу идею также словами?

Идея заключается в проверке, ...немного сложнее представленная, потому что она будет проверять входящий тик со временем. Больше можно проверить, увеличив ArraySize(FILE), а более точной была бы проверка MOVE[d] > MarketInfo(FILE[d],5) как множества других возможных функций, включенных с точным указанием изменения. Более простым вариантом проверки может быть проверка, если просто подключено:

int incomeTime = TimeCurrent();
Sleep(1000);
if ( incomeTime <= 0 ) return;
RefreshRates();
if ( incomeTime >= TimeCurrent() ) return;

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

Следующей проверкой может быть, если тик изменен, чем будут выполняться последующие операции.

Это с моей точки зрения.

 
Спасибо за эту идею, Эдддим.

Но, к сожалению, это не решает проблему, поскольку это довольно неудобно и не очень надежно.

Кроме того, он проверяет, открыт ли рынок, а не проверяет соединение с торговым счетом (если я правильно понял ваше решение).


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

Однако, пожалуйста, не обижайтесь на мои просьбы, если вы уже работаете над этим.


С уважением,


Даниил.

 

Сегодня я установил на своем виртуальном сервере скрипт-наблюдатель, который сообщает о состоянии IsConnected() двух станций MT4. На одной из них, MIG Investment, MT4 остается в состоянии !isConnected() после одного или двух коротких отключений, хотя она действительно подключена.

Не могли бы вы, уважаемая команда разработчиков MT4, сделать большую тестовую установку с несколькими станциями MT4 разных брокеров и проверить состояние isConnected()-состояния? Я более чем уверен, что вы сможете воспроизвести это, если приложите немного усилий!

Большинство доступных скриптов и советников зависят от IsConnected(), возвращающей правильный статус соединения, и постоянный перезапуск MT4 не является тем обходным путем, который меня устраивает.

 

Еще раз. Для определения этой проблемы вы должны использовать простой эксперт

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

НЕ СКРИПТ ИЛИ EA С БЕСКОНЕЧНЫМ ЦИКЛОМ!!!!!!!

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

Если эксперт печатает "Alarm", значит, у нас проблема с подключением.

 

да! Стринго снова отвечает, спасибо большое.

Однако, вот что это такое! Я пробовал это с такими простыми советниками/скриптами без циклов.

Кстати, я уверен, что у меня нет проблем с интернетом, так как он тестировался в моей частной сети и на виртуальном сервере.

Дело в том, что я могу торговать, и все кажется и _все_ в порядке, но isConnected() по-прежнему возвращает FALSE

 

Торговая операция инициализирует собственное соединение с торговым сервером.

IsConnected() показывает статус соединения с данными.

1. Индикатор соединения (правый нижний угол) красный или темный?

2. К какому брокеру вы подключены?

3. Какая операционная система установлена на вашем виртуальном сервере?

 

спасибо за быстрый ответ, вот мои ответы:

1. Это зелено-красный, как обычно

2. MIG Investments

3. На моем виртуальном сервере установлен Windows Server 2003. На моем домашнем рабочем столе, на котором периодически возникает та же проблема, установлена WinXP.

 
stringo:

Еще раз. Для определения этой проблемы вы должны использовать простой эксперт

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

А НЕ СКРИПТ ИЛИ EA С БЕСКОНЕЧНЫМ ЦИКЛОМ!!!!!!!.

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

Если советник печатает "Alarm", значит у нас проблема с подключением.

Я пробовал следующее:

void start()
{

if(IsConnected()) Print("Подключено!");
if(!IsConnected()) Print("Тревога!!! Соединение потеряно!");
}

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

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