OK, Let me explain something Because I'm using a lot Terminlas All along my cpu useage is rising up to 100 prcent that is why I need to turn off a few terminals.私は多くのターミナルを使用しているので、私はいくつかのターミナルをオフにする必要があります。
実際、qjolの主張である「これを行う唯一の方法は、スクリプトがロードされた状態で端末を開く方法がないことが問題です」は、部分的に正しいです。スクリプトでOKですが、クライアントターミナルでスクリプトを起動する方法があります。これはメタトレーダーのヘルプ(F1、Tools、Configuration at Startup)に記載されています。このトピックを立ち上げた時点では違うかもしれませんが。
; open chart and run expert and/or script
Symbol=EURUSD
Period=H4
Template=popular.tpl
Expert=
ExpertParameters=
Script=CheckConnection
ScriptParameters=
int timer = 60; //60 seconds, for exampleintOnInit()
{
//--- create timerEventSetTimer(timer); //could use EventSetMillisecondTimer(timer) for millisecond resolution//---return(INIT_SUCCEEDED);
}
// Metatrader self-triggered function, will be called regularlyvoidOnTimer()
{
if(!IsConnected())
Alert("Problem, not connection to the server!");
}
voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
チェックは可能で、無限ループでチェックを実行すればよい。接続が切れたときに端末を起動するときに、このループをどのように起動 するかは、まったく別の問題である。一度ループを走らせれば、期待通りの動作をするはずです。
あなたの問題は IsConnected() 関数とは関係ありません。同じ引数で、Print() や Alert() など、まったく別の 理由でコード全体を最初に開始 できなかったために呼び出すことができない関数についても、文句を言うことができるのです。
OK, Let me explain something Because I'm using a lot Terminlas All along my cpu useage is rising up to 100 prcent that is why I need to turn off a few terminals.私は多くのターミナルを使用しているので、私はいくつかのターミナルをオフにする必要があります。
そして、私がそれらをオンにしたとき(もちろん自動的)、私はそれらが接続されていないことを数回見ましたし、それらの上で実行されているEAが接続されていないことを報告しませんでした。
このトピックを始めたのはそのためで、今のところ、私が見つけた唯一の方法は、上で言ったように、外部プログラムを白くすることです。
おそらく、Windows XP SP2で初めて導入された、ネットワークを多用するアプリケーションを使用する人を困らせるために、常に半分以上開いている接続を 拒否する「機能」と関係があるのでしょう。AFAIKは、この迷惑な「機能」にパッチを当て、通常の操作性を回復する方法があります: http://blog.davidkaspar.com/archives/2005/04/windows-xp-sp2-and-event-id-4226.php
Windowsのイベントログで、4226のイベントを探してください。
これは、EAのinit()内からstart()を強制的に実行させる唯一の正しい方法 です。インジケータでは、start()がGUIスレッドで実行されるため、これを行うことはできません。
これは良いことですが、initi()が戻る前にティックが消えてしまう可能性があり、その場合ティックは破棄されるため、常に機能するとは限りません。このことを強調するために、次のように5ミリ秒の休止を追加します。
を実行すると、start()は実行されません。
ブローカーからの実際のティックを 必要とせずに、エキスパートアドバイザーのロード時にstart()が実行されるようにするためのより良い解決策はありますか?
私は少し古いですが、 私が この トピックで 得た のと 同じ問題の 解決策を探して います。
実際、qjolの主張である「これを行う唯一の方法は、スクリプトがロードされた状態で端末を開く方法がないことが問題です」は、部分的に正しいです。スクリプトでOKですが、クライアントターミナルでスクリプトを起動する方法があります。これはメタトレーダーのヘルプ(F1、Tools、Configuration at Startup)に記載されています。このトピックを立ち上げた時点では違うかもしれませんが。
そこで、この作業を行うための小さなスクリプトを開発しました。これをスタートアップスクリプトで使用します。
といった感じでターミナルを立ち上げます。
"...\Metatrader 4\terminal.exe" config\start.ini
こんにちは、みんな。
あなたの いずれかを知っていますか、 なぜ 仕事スクリプト偽ティック -https://www.mql5.com/en/forum/128803/page2#373539(ページ2)ビルド600 +のためのこのスレッド?
私のOSはVistaです。ありがとうございます。
こんにちは、みんな。
あなたの いずれかを知っていますか、 なぜ 仕事スクリプト偽ティック -https://www.mql5.com/en/forum/128803/page2#373539(ページ2)ビルド600 +のためのこのスレッド?
私のOSはVistaです。ありがとうございます。
ビルド> 600以来、あなたはunicodeのための "W "でansiの "A "を交換する必要があります
なぜパラメータに 2と1があるのか
なぜパラメータで2と1を使うのか
MQLの範囲外なので、こちらで 関数を確認してください。
IsConnected()関数に関する 情報を探している人がいるかもしれないので。
そうです、この関数は start() 関数や OnTick() 関数の下では動作しません。なぜなら、接続がなければ新しいティックが到着しないので、どのみちこの関数は起動しないからです...。
では、どうすればよいのでしょうか?
OnTimer()関数を使用して、ティックの受信に関係なく、定期的に接続をチェックします。
fridayda13:
そう、この関数は start() 関数や OnTick() 関数の下では動作しません。なぜなら、接続がなければ新しいティックが到着しないので、どのみちこの関数は起動しないからです。
では、どうすればよいのでしょうか?
OnTimer()関数を使用して、ティックの受信に関係なく、定期的に接続をチェックします。
あなたは何もしない方がいいです。ネットワークがタイムアウトして関数が 値を変えるまで30秒以上かかります。何も変化がなく、接続がないときにどうするつもりですか?
これは、start/OnTickから 決して戻らない場合(OrderSendの 前にチェックする)、またはOrderSendの 後に同じティックの中で再試行する場合にのみ有効です。
その代わり、もしOrderSendが 失敗したら、それを記録し、戻り、次のティックでテスト/再試行してください。完了です。