エラー番号6 - ページ 29

 
のログが送信されました。<br / translate="no"> このコードはどこに置けばいいのでしょうか?
while(!IsStopped() && !IsTradeAllowed())Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);


スタート関数の出口で
 
Sleep()を試してみた
100000までは目に見える改善なし


に差し替え
if(!IsTesting()) { Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0); }



while(!IsStopped() && !IsTradeAllowed())Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);



同じくペッパー。
エラー146です。

 
しばらくして、よく考えてみると、正確な方法があることがわかりました。 それを定式化してみます<br/ translate="no">
while(!IsStopped() && !IsTradeAllowed())Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);


つまり、私たち自身が自分のトレードコンテキストが解放されるのを待っているのです。 、一般的に、これは非常に奇妙な状況です。トレード操作を行った後、コンテキストは即座に解放されます。さもなければ、ループ内でポジションを閉じることは不可能になります。



もう一度言います。上記のコードは、取引フラグがクリアされている場合、Expert Advisorがハングアップする原因となります。そうすると、誰もセマフォに信号を送らないので、取引は完全に停止してしまいます。この状況は、少なくとも手動でフラグを外すしかないため、どうにかコントロールできる。もっと悪いのは、セマフォの場合だ。



GlobalVariableSetは、他のEAがセマフォを閉じたときに、他のEAに落ちることがあります。その結果、複数のEAが同時に取引しようとします。 このように、開発者はターミナル内の非同期処理を理解していない。そして、この誤解はフォーラムに輸出される。 ここで取り上げたような致命的なエラーが発生し、このエラーが直らないのも無理はない。なぜ、



有害な アドバイスをするのか?
 
なぜвредные のアドバイスをするのか?

アドバイザーがここまで来たら、売買フラグが立っている!という前提です。
 
Зачем давать вредные советы?

は、EAがこのポイントに到達した場合、取引フラグが立っていると想定しています

その前提の根拠は?想定と現実が一致しない場合、予期せぬエラーが発生する。旗は何もない。同期、ミューテックス、共有リソース......この問題は現実のものとなっている。ユーザーレベルの

グローバル 変数で解決しようというのはナンセンスです。特に、この例は実行不可能なものです。
 
昨夜12時から、MQデモとAlpariデモの専門家による作業が行われました。その間、128のエラーもありませんでしたが、Alpariでは6(pingエラー)が1回あり、両方で古いティックが数回ありました。注文はエラーなくできました。05.10のBuild 1.8.3です。 もしかしたら他のものでしょうか?例えば、異なるインターネットプロバイダーにおける443番ポート経由の接続の特殊性?MT3もエラーはあったが、それほど多くはない。


嗚呼。"夜の12時から "というのは、統計学的なものではありません。理由は不明ですが、問題には波があり、ある時は全くなく、ある時は一度にいくつもの問題が発生する...。
 
<br / translate="no"> Quarkは、良心を持って、フォーラムでそのようなログを投稿しないでください =))))


と思ったけど、気にしない(Kindzadzのバイオリン弾きの音色) :))


閉じる・開くの実態について - すべてのf関数にチェックを入れ、エラーが出ていますが、FALSEエラーになっています。ログと注文履歴を確認したところ、すべてのポジションがクローズされていました。歴史の中で秩序が動く暇がなかっただけです。チェックする前に1秒遅らせるようにしたのですが......それではダメなんです。と聞いても、何も答えてくれない。


良い点です。でも、1時間経っても注文が進まないケース、つまり虚偽でない場合もあるんです。
私も10秒の遅延があります。
 
それはいい指摘ですね。でも、1時間経っても注文が進まないケースもあって、つまりは虚偽ではない場合もあるんです。<br / translate="no">私も10秒ずつの遅延があります。

私の全ての間違いは、結局のところ、コードの中にありました。
修正後-はありません。確かに、あまり時間が経っていないので、待つしかないのですが...。
 
<br / translate="no"> すべての私のエラーは、コードにあるように見えた =) すなわち、私はorderclose後に間違ったチェックをした。
修正後-はありません。確かにあまり時間が経っていないので、待つしかないのですが...。


修正したコードはどのように表示されますか?
 
修正されたコードはどのようなものですか?

オーダークラウズのために
//---- 実際にポジションがクローズしたかどうかをチェックし、クローズしていなければ情報を出力して終了し、-5を返す for ( int x = 0; x < 5; x ++ ) { Sleep(1000);
		if ( OrderSelect( Close_OrderTicket, SELECT_BY_TICKET ) ) { if ( OrderCloseTime() <= 0 ) { Processing_Error ( 0, "OrderClose" ); _Return_ ( 3, "Error", 0, "Position was not closed", "OrderClose(...)", "The position was not closed" ); return(-5); } else { break; } Close_GetLastError = GetLastError(); _Print_ ( 3, ".OrderSelect( " + Close_OrderTicket + ", SELECT_BY_TICKET )", "Error #" + Close_GetLastError + " ( " + ErrorDescription( Close_GetLastError ) + " )" ); } { }.


for ordersand -注文を選択するための 5回の試行と2回目の一時停止、 for modifi - 古い値と現在の値を比較する。