この関数は複数のポジションを保有している時に、今何個オープン状態か分からなくなる人の為のコードです。

画面の右上に表示されている物が実行中の物です。

OnTick()の処理に組み込むことでリアルタイムに対応できますが、全ポジションを毎度全件チェックしますので処理重めです。

100個くらいのポジションで運用している人は訳が分からなくなりがちですので、結構使えるかな?と思います。

こういう処理も定期的に欲しくなる系統の処理です。

画面描画系は作る時にいつも忘れているので、こちらも備忘録です。

void CreateMonitor()
{
    ObjectCreate("obj_sel_lmt_cnt", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_sel_lmt_cnt",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_sel_lmt_cnt",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_sel_lmt_cnt",OBJPROP_YDISTANCE,20);                 // Y座標

    ObjectCreate("obj_buy_lmt_cnt", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_buy_lmt_cnt",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_buy_lmt_cnt",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_buy_lmt_cnt",OBJPROP_YDISTANCE,50);                 // Y座標
    
    ObjectCreate("obj_sel_cnt", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_sel_cnt",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_sel_cnt",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_sel_cnt",OBJPROP_YDISTANCE,80);                 // Y座標

    ObjectCreate("obj_buy_cnt", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_buy_cnt",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_buy_cnt",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_buy_cnt",OBJPROP_YDISTANCE,110);                 // Y座標

    ObjectCreate("obj_sel_sum", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_sel_sum",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_sel_sum",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_sel_sum",OBJPROP_YDISTANCE,140);                 // Y座標

    ObjectCreate("obj_buy_sum", OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0,"obj_buy_sum",OBJPROP_CORNER,CORNER_RIGHT_UPPER);  // コーナーアンカー設定
    ObjectSetInteger(0,"obj_buy_sum",OBJPROP_XDISTANCE,200);                // X座標
    ObjectSetInteger(0,"obj_buy_sum",OBJPROP_YDISTANCE,170);                 // Y座標

    ObjectSetText("obj_sel_lmt_cnt", "売り予約個数:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
    ObjectSetText("obj_buy_lmt_cnt", "買い予約個数:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
    ObjectSetText("obj_sel_cnt", "売り約定個数:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
    ObjectSetText("obj_buy_cnt", "買い約定個数:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
    ObjectSetText("obj_sel_sum", "売り損益合計:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
    ObjectSetText("obj_buy_sum", "買い損益合計:" , 11 , "メイリオ" , clrWhite); // テキストラベルオブジェクト、テキストタイプ設定
}
void ViewMonitor()
{
  int total=OrdersTotal();
  int obj_sel_lmt_cnt=0;
  int obj_buy_lmt_cnt=0;
  int obj_sel_cnt=0;
  int obj_buy_cnt=0;
  double obj_sel_sum=0;
  double obj_buy_sum=0;
  for(int cnt=total;cnt>=0;cnt--)
  {
    if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
    continue;
    
    if(OrderType()==OP_SELLLIMIT)obj_sel_lmt_cnt++;
    if(OrderType()==OP_BUYLIMIT)obj_buy_lmt_cnt++;
    if(OrderType()==OP_SELL)
    {
      obj_sel_cnt++;
      obj_sel_sum+=OrderProfit()+OrderSwap();
    }
    if(OrderType()==OP_BUY)
    {
      obj_buy_cnt++;
      obj_buy_sum+=OrderProfit()+OrderSwap()+OrderCommission();
      
    }

  }
  ObjectSetText("obj_sel_lmt_cnt", "売り予約個数:"+(string)obj_sel_lmt_cnt , 11 , "メイリオ" , clrWhite);
  ObjectSetText("obj_buy_lmt_cnt", "買い予約個数:"+(string)obj_buy_lmt_cnt , 11 , "メイリオ" , clrWhite);
  ObjectSetText("obj_sel_cnt", "売り約定個数:"+(string)obj_sel_cnt , 11 , "メイリオ" , clrWhite);
  ObjectSetText("obj_buy_cnt", "買い約定個数:"+(string)obj_buy_cnt , 11 , "メイリオ" , clrWhite);
  ObjectSetText("obj_sel_sum", "売り損益合計:"+(string)NormalizeDouble(obj_sel_sum,2) , 11 , "メイリオ" , clrWhite);
  ObjectSetText("obj_buy_sum", "買い損益合計:"+(string)NormalizeDouble(obj_buy_sum,2) , 11 , "メイリオ" , clrWhite);

}