できるだけ、早く全部のオーダーを一括クローズしたい

 

MAGIC#ごとに、まとめてオーダーを一気に、クローズしたいのですが、特にGOLD (XAUUSD) は相場が急激に変化した際に、

どうしてもタイムラグが生じてしまい、クローズ中に利益がさがってしまうことがあります。

だいたい10個くらいのオーダーのトータルの利益が$10 以上になったらまとめて、一気にクローズというような使い方をしています。

下記の一般的なコード以外に、なにかいい方法はありますか?


for(int x=OrdersTotal();x>=0;x--)
{
   if(OrderSelect(x,SELECT_BY_POS)==true && OrderMagic()==MAGIC)
   {
      if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE))
      {
         Print("Close Order");
      }
      else
      {
         Print("Error on closing");
      }
   }
} 
 
Cromo:

MAGIC#ごとに、まとめてオーダーを一気に、クローズしたいのですが、特にGOLD (XAUUSD) は相場が急激に変化した際に、

どうしてもタイムラグが生じてしまい、クローズ中に利益がさがってしまうことがあります。

だいたい10個くらいのオーダーのトータルの利益が$10 以上になったらまとめて、一気にクローズというような使い方をしています。

下記の一般的なコード以外に、なにかいい方法はありますか?


以下のような構成でいかがでしょう。

①チケットNoでクローズのみを行うEAを作成

②複数のチャートを開き①を挿入

③メインのEAで同じMAGIC#の各チケットNoを取得して

①のEAに振り分け(連携す)る


例えば①を5つのチャートで稼働させておけば、決済完了までの時間は理論上5分の1に短縮できると思います。

→(10個を順次行っていたことを、2個づつ、5つに分散しているだけなので)

ただ、証券会社・ブローカーがスキャル禁止にしているところだとうまく行かないかもしれません。


③から①への連携(共有)方法は、イベントやグローバル変数を使う、ファイルを使う等、アイデア次第だと思います。


 

ありがとうございます。

ふむふむ、、いろいろ方法はありそうですね。

コード的には(関数として)シンプルですが、これ以上なにか早くする方法はありますか?

1個クローズしたら、またチケット#を見つけて、また1個、、、というふうになるので、全体的には

10個のオーダーを全部クローズするには、見ていると、だいぶ

もっさりしています。
理由: