Build 216のバグ? 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 が接続の問題を引き起こすコードを実行するコード領域に入る原因となった一連の出来事について推測していました。

しかし、このような考えを公表しない限り、誰もそのようなことが起こる可能性を考えようとは思わないのではないでしょうか?

繰り返しになりますが、ご回答ありがとうございました。

サポートチームはあなたの問題をエミュレートすることはできませんので、時には横の考え方が役に立ちます....

;)

 

あなたのアイデアを言葉で説明していただけませんか?

このアイデアは、チェックされることです、...それは時間と受信ティックをチェックするので、少し複雑に提示。ArraySize(FILE)を大きくすればもっとチェックできますし、より正確には、MOVE[d] > MarketInfo(FILE[d],5) といった、正確なポイントチェンジを含む他の可能な機能の セットをチェックすることになるでしょう。より単純なバージョンでは、ちょうど接続されている場合、チェックすることができます。

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

1000 Sleep pause以上であれば、精度として不正確ですが、それ以下であれば、受信した時間が秒単位であるため、前回と同じ時間を受信する結果になる可能性があるという状況です。

次のチェックは、tickが変更された場合、それに続く操作を行うことです。

というのが私の見解です。

 
Edddimさん、このアイデアをありがとうございます。

しかし、残念ながら、これはかなり不便で、本当に信頼できないので、問題を解決することはできません。

また、マーケットが開いているかどうかをチェックして いるのであって、取引口座への接続をチェックしているわけではありません(もし私があなたの解決策を理解していれば)。


MetaQuotes社には、この問題を解決するためにもう少し努力していただくようお願いします。

しかし、すでに取り組んでおられるのであれば、私のリクエストに腹を立てないでください。


よろしくお願いします。


ダニエル

 

今日、2つのMT4ステーションのIsConnected()の状態を伝えるオブザーバースクリプトを仮想サーバーにインストールしました。そのうちの1つ、MIGインベストメントのMT4では、本当に接続されているにもかかわらず、1、2回の短い切断の後、!isConnected()のままになっているのです。

親愛なるMT4開発チームの皆さん、いくつかの異なるブローカーのMT4ステーションでより大きなテストセットアップを行い、isConnected()の状態を逆にしていただけませんか?努力すれば再現できると確信しています。

ほとんどのスクリプトやEAは、IsConnected()が正しい接続状態を返すことに依存しており、MT4を常に再起動することは、私が満足する回避策ではありません。

 

もう一度この問題を解決するには、シンプルなエキスパートを使うべきでしょう。

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

スクリプトや無限ループのEAではありません。

もし、あなたのスクリプトが接続を失ったと報告し、私たちのEA(上記参照)が沈黙を続けるなら、あなたはインターネットにグローバルな問題を抱えて います(例えば、あなたのインターネットプロバイダのラストマイルの問題)

もし、EAが "Alarm "を表示したら、接続ルーチンに問題がある。

 

やったーストリンゴがまた答えてくれてます、ありがとうございます。

とはいえ、これはこれでアリですねー。こういうシンプルなループレスEA/スクリプトで試してみました。

Btw、それは私のプライベートネットワークと仮想サーバー 上でテストされているので、私は私のインターネットに問題がないことを間違いなく肯定的である。

問題は、私は取引することができ、すべてが見えると_ is_大丈夫ですが、isConnected()はまだFALSEを返すということです。

 

トレードオペレーションは、トレードサーバーとの接続を独自に初期化します。

IsConnected()はポンピングデータ接続状態を表示する。

1.1. 接続インジケータ(右下)が赤または暗くなっているか?

2.2. 接続しているブローカーは?

3.仮想サーバーにインストールされているオペレーティングシステムは何ですか?

 

早速のご回答ありがとうございます。

1.通常通り緑赤色です。

2.ミグ・インベストメント

3.仮想サーバーには、Windows Server 2003がインストールされています。時折同じ問題が発生する自宅のデスクトップにはWinXP。

 
stringo:

もう一度この問題を解決するには、シンプルなエキスパートを使うべきでしょう。

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

スクリプトや無限ループのEAではありません。

もし、あなたのスクリプトが接続を失ったと報告し、私たちのEA(上記参照)が沈黙を続けるなら、あなたはインターネットにグローバルな問題を抱えて います(例えば、あなたのインターネットプロバイダのラストマイルの問題)

もしEAが "Alarm "を表示したら、接続ルーチンに問題がある。

私は以下のことを試してみました。

void start()
{

if(IsConnected()) Print(" 接続されました!");
if(!IsConnected()) Print("アラーム!!! 接続が切断されました!!!");
}.

接続があるときは Connected と表示されるが、接続が切れると EA は停止してしまう。これは、!IsConnected()のトリガーとなるティックがもうないため、接続が切れたことを検出できないからだと思います!