ループと注文のクローズまたは削除 - ページ 4

 
ggekko:

こんにちは、専門家の皆さん、この解決策についてどう思われますか?

while(OrdersTotal()>0)
他のEA(自分も含む)やマニュアル取引とは 互換性がないということです。(他のチャートでのトレード)
 
WHRoeder:
ggekko さん

こんにちは、専門家の皆さん、この解決策についてどう思われますか?

他のEA(自分も含む)やマニュアル取引とは互換性がないということです。(他のチャートでのトレード)

もちろんです。これは完全にクローズオールです。

時々、「オリジナル」バージョンではうまくいかない状況(例えば、あまりにも多くのオープントレードをすぐにクローズしたい場合など)があります。このバージョンはそのような場合に適しています。

 
ggekko:

もちろんです。これは完全なクローズ・オールです。

時々、「オリジナル」バージョンではうまくいかない状況(例えば、あまりにも多くのオープントレードをすぐにクローズしたい場合など)があります。このバージョンはこれに適しています。

なぜエラーに対応しようとしないのですか? エラーを分析し、それに応じて対応すべきではないですか?あるエラーは再試行できますが、他のエラーは試行を中止しなければなりません。
 

こんにちは。


whileループについて質問です。現在のEAをできるだけ頻繁にループで実行したいのです。そこで、現在のコードをwhileループの中に入れ、中にsleep関数を入れて 1ミリ秒に1回だけwhileが実行されるようにしようと思っています。


しかし、これを実行すると、(各ループで何が起こっているかを追跡するために、いくつかのPrint("...")関数コールを入れています)このフリーズが見られ、画面へのプリントはなくなりました。

何が問題なのでしょうか?EAを1msの頻度でループさせても問題ないのでしょうか?例えば、1ミリ秒ごとにサーバーから最新のbid/askを取得しようとすると問題があるでしょうか?この場合、サーバーに負荷がかかりすぎてフリーズしてしまうのでしょうか?

私のアルゴリズムが何か他のことをやっていてこれを引き起こしている可能性もありますが、よくわかりません。


200msサイクルで実行しても、同じ問題が発生します(ただし、それほど即座には発生しません)。ログファイルにあまりにも多くの行を印刷することに問題がある可能性がありますか?



この件に関して何かアドバイスがあれば、ありがとうございます。

よろしくお願いします。


C.

 
コードの問題である可能性があります - しかし、コードを知らずに?
 

14967057:

whileループについて質問です。現在のEAをループでなるべく頻繁に動かしたいのです。

そこで、現在のコードをwhileループの中に入れて、中にスリープ関数を入れて、1ミリ秒に1回だけwhileが実行されるようにしようと思っているのですが、どうでしょうか?

最新のbid/askを取得しようとすると問題が発生するでしょうか。

ログファイルにあまりにも多くの行を印刷することに問題がある可能性がありますか?

  1. このスレッドは注文のクローズと削除に関するものです。トピックから外れた質問のためにスレッドをハイジャックしないでください。新しいものを投稿してください。
  2. なぜ連続的にループさせたいのですか?何も変化していません。あなたがしていることは、CPU時間を浪費しているだけです。
  3. スタートから 戻り、Bid/Ask が変更されると、スタートが 可能な限り速く呼び出されます。
  4. はい、あなたはWindowsがディスクにそれらを置くことができるよりも速く、行で利用可能なすべてのラムを埋め尽くした。すべてのプログラムはページアウトされます。すべてがハングアップします。
 

こんにちは。

私が抱えていた問題は、EAコードを1msスリープのwhileループ内にカプセル化したことが原因ではないことがわかりました。この部分は(画面にプリントするかどうかに関係なく)問題ないようで、この30分間は問題なく動いています。


問題は、私がコード内に持っていた別の卑劣なwhileが原因で、最終的にEAが無限ループに陥ることになりました。

goolyさん、Roesderさん、ご意見ありがとうございます。

よろしくお願いします。

 

皆さん、こんにちは。このトピックを読み、質問があります。保留中の 注文(STOPのみ、LIMITなし)を削除 するコードを作ろうとしたのですが、他の保留中の注文(OP_SELLまたはOP_BUYで開始)がアクティブになっている場合のみです。そのコードはこのようなものです(しかし、間違いがあるのですが、どこにあるのかわかりません)。私のコードを見ていただけませんか?

 bool   result;
   int   i, j, cmd, cmd2,total;

   total=OrdersTotal();

   for(i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         cmd=OrderType();
         
         if(cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP)  //take an orders which was activated 
           {
           for(j=0; j<total; j++)   //another variable j 
     { 
     if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType();
     if(cmd2!=OP_BUY && cmd2!=OP_SELL)
           {
            
            OrderPrint();
            
            result=OrderDelete(OrderTicket());  //first pending order become to OP_SELL or OP_BUY, second pending order will be delete
            if(result!=TRUE) Print("LastError = ", GetLastError());
            break;
           }
        }
       }
     }
     }
   }
 

OrdersTotal()が正しくない...

OrdersTotal()を使用 するループコード列が正しい結果を与えないことに驚いています(2つの異なるブローカーで観察)。

私はLinux Ubuntu-MATE 16.04デスクトップでMT4バージョン1090を使用しており、WINE 3.0を実行しています。

以下は、私が使用しているものです...

for(int cc = 0; cc < OrdersTotal(); cc++)
{
if (!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) continue;
if (OrderSymbol() != Symbol() ) continue;
if (OrderType() > 1) continue; //--保留中の取引を無視する。

OpenTradecnt++; //--そのシンボルのライブポジションが存在するごとにカウントアップします
Print("count of the open trades of this symbol is: ", OpenTradecnt).このシンボルの未決済取引のカウントは次のとおりです。
}

2つの異なるブローカーで、OrdersTotal()の値がMT4ブローカーの「取引」タブに表示されるものと常に一致しないことに気づきました。 最初は、ブローカーのせいでOrdersTotal()が正しく機能しないのだと思いました。 2番目のブローカーで気づいたとき、MT4に内部「問題」があるのか、私のコードが間違っているのか、MT4とサーバーが適切に同期している問題ではないかと思い始めました......どうでしょうか?

このフォーラムスレッドを読んだ後、私は読むためにfor..ループを変更するために結果に変化があるのだろうかと疑問に思っています。

for(int cc = OrdersTotal() - 1; cc >= 0; cc--)
{
...........
}

または、OnTick()イベント中にOrdersTotal()が適切に同期されるようにするフラグまたはコードの行はありますか?

この件に関して何か説明があれば、非常に助かります。

 

</>ボタンでコードを挿入してください。