決済されたかを確認する。

スポンサーリンク

おはようございます。
今日はOK牧場で見つけた質問です。

例えば95円で売り注文、ストップロスが「95+0.6」,決済値が「95-0.3」。
double pr1 = 95;  //例えば95円
chiket1 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr1,3,pr1+0.6,pr1-0.3,"",123451,0,Red);
chiket2 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr2,3,pr2+0.6,pr2-0.3,"",123452,0,Red);
chiket3 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr3,3,pr3+0.6,pr3-0.3,"",123453,0,Red);
chiket4 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr4,3,pr4+0.6,pr4-0.3,"",123454,0,Red);
chiket5 = OrderSend(Symbol(),OP_SELLLIMIT,lots ,pr5,3,pr5+0.6,pr5-0.3,"",123455,0,Red);

質問1.この注文のうち、どれが決済されたかが確認出来る方法もしくは関数が知りたいのです。
マジックナンバーもしくはチケットナンバーで判明出来れば有りがたいのですが。
出来れば質問2もお願いします。
質問2.指値注文の自動売買は、ストラテジーテスターにてビジュアルモードで検証出来ないので検証する方法があれば知りたい。(指値に達しても約定しない)

質問1は普通にするならば、
OrdersTotal()の数だけfor文作ってこうします。

//オーダーの有無を調べるbool FTLOrderSelect(int magic, int type = -1){   for(int i=0; i<OrdersTotal(); i++)   {      if(OrderSelect(i, SELECT_BY_POS) == false) break;      if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;      if(OrderType() != type && type != -1)continue;            return(true);   }      return(false);}

該当マジックナンバーにオーダーがあればtrue、なければfalseが返ります。
決済されたポジションもfalse扱いになります。
これで問題は解決されたでしょうか・・・。
それぞれ関数が分からなければ、こちらがお勧め。
質問2は・・・ありえないと思います。
バックテストでも予約注文は通りますよ。
ストラテジーテスターの操作履歴を確認してみてください。
今日もお読みくださり、ありがとうございます。

コメント

タイトルとURLをコピーしました