関数OrderCloseBy()
両建て決済するチケットをOrderSelect()で選択してやる必要があります。(買チケット、売チケット、両方とも選択する)
どちらかのロットが多い場合は少ない方に合わせて両建て決済され、多い方のポジションは残ります。
※あくまでも同じロット数を決済する関数です。
※何も考えずにこの関数を使用すると最新のポジションから決済されます(笑)(変数チケットは上書きなので、、、)
通常通り決済したい場合はOrderClose()をご覧下さい。
書式
bool OrderCloseBy( int ticket, // 決済するチケット int opposite, // もう一方のチケット color arrow_color // 決済矢印カラー );
戻り値(返り値)
bool res = OrderCloseBy( buyTicket, // 決済するチケット(買又は売のチケットを選択) sellTicket, // もう一方のチケット(上のチケットと逆の売又は買のチケットを選択) clrNONE // 決済矢印カラー ); if( res == false ){ Print( GetLastError() ); //エラー内容を出力 }
成功した場合はtrueを返します。
サンプルコードを実際に動かした結果は画像をご覧下さい。
画像下から
買いポジション約定
売りポジション約定
両ポジション決済
![]()
“#数字”はチケット番号
関連記事:関数Print()
サンプルコード(コピペで動きますが、、、)
//グローバル変数
extern int MagicNumber = 12345;
int sellTicket = 0;
int buyTicket = 0;
bool flag = true;
void OnTick(){
   int slippage = 30;   
   // デモ口座で自動売買開始後すぐに両建てエントリーしてすぐに両建て決済をしているサンプル
   //スプレッドの分だけ損するコードです(笑)
   if( IsDemo() == true ){
   	//両建てエントリー	
   	if( flag == true ){
   		//買
   		buyTicket = OrderSend(
   					Symbol(),OP_BUY,MarketInfo(Symbol(),MODE_MINLOT),
   					MarketInfo(Symbol(),MODE_ASK),slippage,0,0,"OP_BUY",MagicNumber,
   					0,clrNONE
   				);
   		//売
   		sellTicket = OrderSend(
   					Symbol(),OP_SELL,MarketInfo(Symbol(),MODE_MINLOT),
   					MarketInfo(Symbol(),MODE_BID),slippage,0,0,"OP_SELL",MagicNumber,
   					0,clrNONE
   				);
   										
   		if( buyTicket == -1 ){
   			Print( GetLastError() );  //エラー内容を出力
   		}
   
   		if( sellTicket == -1 ){
   			Print( GetLastError() );  //エラー内容を出力
   		}
   
   		flag = false;
   	}
   
   	//両建て決済
   	if( flag == false ){
   		if(OrderSelect(buyTicket,SELECT_BY_TICKET,MODE_TRADES) && OrderSelect(sellTicket,SELECT_BY_TICKET,MODE_TRADES) ){
   			bool res = OrderCloseBy(buyTicket,sellTicket,clrNONE);
   			if( res == false ){
   				Print( GetLastError() );  //エラー内容を出力
   			}
   		}
   		buyTicket=0;
   	   sellTicket=0;
   	}
   }
}
関連記事一覧:関数IsDemo(),関数OrderSelect(),関数OrderSend()関数MarketInfo(),定数OP_BUY,OP_SELL
