IsConnected() - ページ 3

 

申し訳ありませんが、なぜうまくいかないのでしょうか。

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

私のEAは常にwhile-loopの中にあり、tickを必要としません。

 

PostMessageA()の件は、このスレッドで先に述べた「init()からstart()を呼び出す」という文章に対する反応としてのみ投稿されたものです。init()からstart()を呼び出す」というのは多くの点で明らかに間違って いるので、それについてコメントし、同じことを実現するための適切な解決 策、つまり週末でもinit()の中からstart()を強制的に呼び出す方法を提供しなければならなかったのです。


MT4を切断状態で起動 する問題については、解決策を提示していません。というのも、メタトレーダー自体は24時間365日、中断することなく簡単に起動し続けることができるはずなのに、接続が 行ったり来たりするのは、このユースケースが何なのか、私にも 理解できないからです。週末に再起動した場合でも、init()のPostMessageA()で、再起動後に接続が戻るとすぐにstart()のループを再開し、ティックがなくても、次の(偶然の)再起動までまた永遠に動き続けることになります。

 
sunshineh:

申し訳ありませんが、なぜうまくいかないのでしょうか。

私のEAは常にwhile-loopの中にあり、tickを必要としません。


そうです、インターネットに接続していない状態でターミナルを再起動しなかったからです。しかし、インターネットに接続していない状態でターミナルを再起動した場合、AEは1ティックもなくループに入りません。
 

とにかく、助けようとしてくれたみんなに感謝します。私は自分の手を少し汚して、スクリプトを実行するために外部プログラムを実行することにしました、話は終わりです。
かかわらず、関数 IsConnected()まだ私を笑わせて、そのような単純なものは、彼がカバーしていない場合

 
7bit:

PostMessageA()の件は、このスレッドで先に述べた「init()からcall start()」という文章に対する反応としてのみ投稿されたものです。init()からstart()を呼び出す」というのは多くの点で明らかに間違って いるので、それについてコメントし、さらにそれを実現するための適切な解決策、つまり週末でもinit()の中からstart()を強制的に呼び出す方法を提供しなければならなかったのです。


接続が切れた状態でMT4を起動 する問題については、解決策を提示していません。というのも、メタトレーダー自体は24時間365日中断することなく稼働し続けることができるはずなのに、接続は 行ったり来たりしているのです。週末に再起動した場合でも、init()のPostMessageA()で、再起動後に接続が戻るとすぐにstart()のループを再開し、ティックがなくても、次の(偶然の)再起動までまた永遠に動き続けることになります。


7Bitさん、ご指摘ありがとうございました。ターミナルは定期的に接続が切れるのですが、原因不明のまま回復しません。再接続する前に、ターミナルでサーバーを手動で再スキャンする必要がありました。当初は時間の問題だと考えていましたが、1時間待っても接続が回復せず、再スキャンをクリックすると再接続されることが頻繁にありました。私の解決策は、継続的に接続状態をテストすることでした...接続が切れた場合は、5分後に再接続し、その旨をアラート、メール、ログで叫び、ターミナルを閉じて再起動するのです。ほとんどの場合、これでうまくいきました。時々、正当な接続の問題が発生し、接続しないとEAが初期化されないので、私は穴から抜け出せなくなりました。これを解決する方法を検討しましたが、どれもMT4の外側の方法であり、したがって私の現在のIT能力の範囲外です。幸いなことに、私はブローカーを移動し、現在のプロバイダーでは何の問題も発生していません...したがって、これに取り組む優先順位は低いです。

しかし、接続が失われ、接続が可能なときにMT4が再接続に失敗することはあり得ます。端末の再起動ではEAは動きませんが、1時間接続がない状態だと動きます。

V

 
Viffer:

幸いなことに、私はブローカーを移りましたが、現在のプロバイダーでは何の問題もありませんでした...したがって、この件に取り組む優先順位は低くなっています。

私のブローカーではまだ見たことがないので、本当に一部のブローカーだけで起こっているのかもしれません。1日に1~2回、数秒間接続が切れることがありますが、いつもすぐに再接続されます。


他のウィンドウズ・アプリケーションをモニターし、リモート・コントロール する外部アプリケーションを素早く作るには、AutoITをお勧めします(ボタンのクリック、メニューのコマンドなど)。AutoITはBASICのようなスクリプト言語で、この種のものを中心に簡単に学ぶことができます。

 
7bit:

私はまだ私のブローカーでこれを見たことがないので、それは本当にいくつかのブローカーでのみ発生する可能性があります。一日に一度か二度、数秒間接続が切れることがありますが、いつもすぐに再接続されます。


他のWindowsアプリケーションを監視し、リモートコントロールできる外部アプリケーションを素早く作るには、AutoITをお勧めします。AutoITはBASICのようなスクリプト言語で、まさにこのタイプのものを中心に簡単に学ぶことができます。

ありがとうございます。

V

 
qjol:

IsConnected()関数は、まだ私を笑わせて、そのような単純なものは、彼がカバーしていない場合

MT4が再起動後、完全に接続されるまでinit()を遅延させることが問題なのでは?


いきなりIsConnected()と何の関係があるんだ?IsConnected()は意図したとおりに動作しているようです。接続されているときは真を、切断されているときは偽を返します。それの何がそんなにおかしいのか、私にはわかりません。

 
7bit:

MT4が再起動後、完全に接続されるまでinit()を遅延させることが問題なのでは?


いきなりIsConnected()とどう関係があるのでしょうか?IsConnected()は意図したとおりに動作しているようです。接続されているときは真を、切断されているときは偽を返します。それの何がそんなに笑えるのかわかりません。


というのも

if (!IsConnected()) は false を返すべき & 新しいティックが来ない限り IsConnected() はチェック できない このため、笑ってしまうのです。

 
qjol:

新しいtickが来ない限りはIsConnected()はチェックできない これだから笑ってしまう

チェックは可能です。ただ、無限ループでチェックを実行します。接続が切れたときにターミナルを起動するときに、このループをどのように開始 するかは、まったく別の問題です。一度ループを走らせれば、期待通りの動作をします。

あなたの問題は IsConnected()関数とは 関係ありません。同じ引数で、Print() や Alert() など、まったく別の 理由でコード全体を最初に開始 できなかったために呼び出すことができない関数についても、文句を言うことができます。