待機注文とポジションの合計を返すOrdersTotal()関数(MQL4)

関数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()

シェアする

  • このエントリーをはてなブックマークに追加

フォローする