ポジションクローズ関数

売買シグナルの表示」で学習した豊嶋先生の本に記載のあるプログラムのEA編にてポジションクローズ関数があるので、それについてメモ。
それにしても、以前のエントリーが1月19日なので、1ヶ月半も経っているのか。休日出勤続きで毎日夜中まで働いていると進むものも進まんし効率悪いなぁ・・・。
さて。

本で紹介されているポジションクローズ関数は下記。

void ClosePosition(){
   for(int i=0; i<OrdersTotal(); i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
      if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;

      //Check Order Type
      if(OrderType() == OP_BUY){
         OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, White);
         break;
      }

      if(OrderType() == OP_SELL){
         OrderClose(OrderTicket(), OrderLots(). Ask, Slippage, White);
         break;
      }
   }
}

使用されているオーダー関連のAPIは下記。

・OrdersTotal() - オーダーの総数(現在のEAの対象外のものも含む)。
・OrderSelect() - 指定したオーダーの選択
・OrderMagicNumber() - オーダーのマジックナンバーの取得。
・OrderSymbol() - オーダーの通貨ペアの取得。
・Symbol() - 現在EAやインジケーターが動いている通貨ペアの取得。
・OrderType() - オーダーの売買種類の取得。
・OrderClose() - オーダークローズ。
・OrderTicket() - 現在選択されているオーダーのチケット番号の取得。
・OrderLots() - 現在選択されているオーダーのLot数の取得。

オーダーの管理イメージは下記。