関数OrdersTotal()
書式
int OrdersTotal(); //引数なし
戻り値(返り値)
保有中のポジションと待機注文の合計を返します。
画像はサンプルの結果です。
画像下から、
ポジションと待機注文の合計:0
成行買いエントリー
ポジションと待機注文の合計:1
逆指値注文完了
ポジションと待機注文の合計:2
成行買ポジション決済
待機注文を削除
ポジションと待機注文の合計:0
サンプルコード(コピペで動きます。)
//グローバル変数
extern int MagicNumber = 12345;
int buyPendingTicket = 0;
int buyTicket = 0;
int flag = 0;
int slippage = 30; //30pointを指定:1point=0.1pips換算_Point
void OnTick(){
if(flag ==0){
Print("ポジションを持っていない状態:"+OrdersTotal());
flag =1;
}
//買エントリー
if( flag == 1 ){
buyTicket = OrderSend(Symbol(),OP_BUY,MarketInfo(Symbol(),MODE_MINLOT),Ask,slippage,0,0,"OP_BUY",MagicNumber,0,clrNONE);
if( buyTicket == -1 ){
Print( "オーダー失敗エラーコードは"+GetLastError()+"です" ); //エラー内容を出力
}
flag = 2;
}
if(flag == 2){
Print("成行のポジション1つ所持してる状態:"+OrdersTotal());
flag=3;
}
//買逆指値注文(待機注文)
if(flag == 3){
buyPendingTicket = OrderSend(
Symbol(),OP_BUYSTOP,MarketInfo(Symbol(),MODE_MINLOT),
Ask+(1000*_Point),30,Ask+(1000*_Point)-(500*_Point),Ask+(1000*_Point)+(500*_Point),
NULL,MagicNumber,0,clrNONE
);
flag =4;
}
if(flag == 4){
Print("成行のポジション1つと待機注文を1つ所持してる状態:"+OrdersTotal());
flag = 5;
}
if(flag == 5){
for(int count=0; count<OrdersTotal();count++){
if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)&& OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
if( OrderType() == OP_BUY ){
bool res = OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrNONE);
// クローズ失敗した場合、エラーログを出力する
if( res == false ){
Print("オーダークローズエラー:エラーコード=",GetLastError());
}
}else if(OrderType() == OP_BUYSTOP){
bool resDelete = OrderDelete(OrderTicket(),clrNONE);
if( resDelete == false ){
Print("オーダーデリートエラー:エラーコード=",GetLastError());
}
flag = 6;
}
}else{
Print("オーダーセレクトエラー:エラーコード=",GetLastError());
}
}
}
if(flag == 6){
Print("成行のポジション決済&待機注文を削除:"+OrdersTotal());
flag = 7;
}
}
関数MarketInfo(),定数OP_BUY,OP_BUYSTOP,関数OrderSelect(),関数OrderClose,関数OrderSend(),関数OrderDelete()