ホーム » ソース共通化 » 取引関数 » OrderDelete() – 取引関数

OrderDelete() – 取引関数

取引関数

取引関数OrderDelete()について、MQL4とMQL5のソースコード共通化する方法を説明しています。

関数定義

MQL4の定義

bool  OrderDelete( 
   int        ticket,      // ticket 
   color      arrow_color  // color 
   );

オーダー専用の削除です。ポジションを削除するという概念は無く、クローズのためポジションに使うことはありません。

MQL5の定義

定義なし

MQL5には、OrderDelete()がありません。

共通化方法

  • Order系関数はオーダーで使用することとする
    OrderModify()
  • Position系関数は必要がない

ソースを共通化するだけではなく、MQL4→MQL5とMQL5→MQL4への移植のケースもあると思います。よってこれら2つのケースも考慮したソース共通化を考えます。

No.移植方法特徴
1MQL4→MQL5オーダーの削除にOrderDelete()が使用される
MQL5には存在しない関数のため同じ関数定義で利用可能にする
2MQL5→MQL4MQL5には存在しない関数のため同じ関数定義で利用可能にする
MQL4に移植した場合は、組込み関数が利用可能である
考慮すべき移植方法

ソース共通化

対処方法

共通化するためにMQL5用の定義をします。
#ifdef __MQL5__ ~ #endifを使用することでMQL5のコンパイルにのみ有効となります。

#ifdef __MQL5__
///////////////////////////////////////////////////////////////////////////////
// オーダーを削除する
bool OrderDelete(long lTicket, color arrow_color = clrNONE)
{
	bool bResult = false;
	MqlTradeRequest mqlRequest = {};
	MqlTradeResult mqlResult = {};
	ZeroMemory(mqlRequest);
	ZeroMemory(mqlResult);
	mqlRequest.action=TRADE_ACTION_REMOVE;									// 取引操作タイプ
	mqlRequest.order = lTicket;												// 注文チケット
	bResult = OrderSend(mqlRequest, mqlResult);
	if (bResult) {
	} else {
		//Error
	}
	return bResult;
}
#endif

MQL5にOrdeDelete()の定義をします。
MQL4はOrderDelete()の組込み関数をそのまま利用します。

使用例

OrderSelect()で説明しています。

余談

ヒナタ
ヒナタ

これは残していい関数名な気もするけど・・・

ITサービス屋
ITサービス屋

何が正解ってこともないから、きっとMQL5で関数を設計する人が変わったんだわ

ヒナタ
ヒナタ

そういうことなの・・・💤

コメント

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