【超入門】MQL5 EA講座 第87回「待機注文関数を作る-その2-」

MQL5でEA作ろう講座

前回は、OriginalCTradeクラスアクセスレベル=protectedPendingOpen関数を追加し、そのコード内容を解説しました。↓

前回86回で解説したアクセスレベル=protectedPendingOpen関数アクセスレベルprotectedなので、このままでは、実際にEA(自動売買プログラム)を作るときのメインプログラムで使う事は出来ません。

今回は、PendingOpen関数に直接アクセスできるアクセスレベル=public待機注文専用関数を追加していきたいと思います。

成行注文で言えば、

第72回「ポジションオープン関数を実装する」で紹介したPositionOpen関数アクセスレベル=protectedでそのまま直接は使えないので、第73回「Buy関数とSell関数を実装」で紹介したアクセスレベル=publicBuy関数Sell関数を通して注文を行う訳ですが、

今回は、成行注文におけるBuy関数Sell関数にあたる関数を、待機注文用に作ろうという訳です。

スポンサーリンク
スポンサーリンク

アクセスレベルpublicの関数を宣言

まずはPendingOpen関数に連結させる、アクセスレベルpublic関数を作る必要があります。

待機注文には以下の6つの種類があります↓

買いのリミット待機注文

売りのリミット待機注文

買いのストップ待機注文

売りのストップ待機注文

買いのストップリミット 待機注文

売りのストップリミット 待機注文

従って、publicキーワードの下に、6つの関数宣言を行います。

//買いのリミット待機注文を出す
		bool BuyLimit(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//売りのリミット待機注文を出す	
		bool SellLimit(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime pExpiration = 0, string parComment = NULL);
	//買いのストップ待機注文を出す	
		bool BuyStop(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//売りのストップ待機注文を出す	
		bool SellStop(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//買いのストップリミット待機注文を出す
		bool BuyStopLimit(string parSymbol, double parVolume, double parPrice, double parStopLimit, double parStop = 0, double parProfit = 0,  datetime parExpiration = 0, string parComment = NULL);
	//売りのストップリミット待機注文を出す	
		bool SellStopLimit(string parSymbol, double parVolume, double parPrice, double parStopLimit, double parStop = 0, double parProfit = 0,  datetime parExpiration = 0, string parComment = NULL);

BuyLimit関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数、parPriceは約定予定価格、parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

SellLimit関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数、parPriceは約定予定価格、parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

BuyStop関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数、parPriceは約定予定価格、parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

SellStop関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数、parPriceは約定予定価格、parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

BuyStopLimit関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数が入ります。

そして次のparPriceなんですが、parPriceはストップリミットが発動する為のトリガーとなる価格、parStopLimitは最終的に約定となる予定の価格が記述される想定です。

※この部分はストップオーダーリミットオーダーとは違う部分なので注意が必要です。

parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

SellStopLimit関数の戻り値と引数構成について

parSymbolは銘柄、parVolumeはロット数が入ります。

BuyStopLimit関数の所で既に説明済みですが、parPriceはストップリミットが発動する為のトリガーとなる価格、parStopLimitは最終的に約定となる予定の価格が記述される想定です。

※この部分はストップオーダーリミットオーダーとは違う部分なので注意が必要です。

parStop は損切り価格、 parProfitは利益確定価格、parExpirationは有効期限、 parComment はコメント欄が記述される想定です。

注文が成功したら、true、失敗したらfalseを返す想定なので、戻り値データ型bool型です。

各関数の処理実装記述について

もうすでに、アクセスレベル=protectedPendingOpen関数は完成しているので、6つのpublic=アクセスレベル関数の処理実装記述は極めてシンプルなものになります。

1:関数内でPendingOpen関数を呼び出し、

2:注文タイプを指定する引数「parType」の所に、それぞれの待機注文タイプを指定する。

3:最後に注文の成功/失敗を戻り値として返す

以上になります。一応、それぞれ個別にコードを見ていきましょう

BuyLimit関数の処理実装記述について

BuyLimit関数の処理実装記述は以下の通りです。

//買いのリミット待機注文を出す
bool OriginalCTrade::BuyLimit(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_LIMIT,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数値「ORDER_TYPE_BUY_LIMIT」を指定することによって、買いのリミット待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

SellLimit関数の処理実装記述について

SellLimit関数の処理実装記述は以下の通りです。

//売りのリミット待機注文を出す
bool OriginalCTrade::SellLimit(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_LIMIT,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数ORDER_TYPE_SELL_LIMITを指定することによって、売りのリミット待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

BuyStop関数の処理実装記述について

BuyStop関数の処理実装記述は以下の通りです。

//買いのストップ待機注文を出す
bool OriginalCTrade::BuyStop(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_STOP,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数ORDER_TYPE_BUY_STOPを指定することによって、買いのストップ待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

SellStop関数の処理実装記述について

SellStop関数の処理実装記述は以下の通りです。

//売りのストップ待機注文を出す
bool OriginalCTrade::SellStop(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_STOP,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数ORDER_TYPE_SELL_STOPを指定することによって、売りのストップ待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

BuyStopLimit関数の処理実装記述について

BuyStopLimit関数の処理実装記述は以下の通りです。

//買いのストップリミット待機注文を出す
bool OriginalCTrade::BuyStopLimit(string parSymbol,double parVolume,double parPrice,double parStopLimit,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_STOP_LIMIT,parVolume,parPrice,parStop,parProfit,parStopLimit,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数ORDER_TYPE_BUY_STOP_LIMITを指定することによって、買いのストップリミット待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

SellStopLimit関数の処理実装記述について

SellStopLimit関数の処理実装記述は以下の通りです。

//売りのストップリミット待機注文を出す
bool OriginalCTrade::SellStopLimit(string parSymbol,double parVolume,double parPrice,double parStopLimit,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_STOP_LIMIT,parVolume,parPrice,parStop,parProfit,parStopLimit,parExpiration,parComment);
	return(success);
}

{}内でPendingOpen関数を呼び出して、注文を出します(PendingOpen関数の処理実装記述にはOrderSend関数が含まれています)。第2引数定数ORDER_TYPE_SELL_STOP_LIMITを指定することによって、売りのストップリミット待機注文が実行されます。

PendingOpen関数戻り値待機注文の成否)を変数「success」に格納し、それを戻り値として返します。

まとめ:コード全体の記述内容

今回は、前回作ったPendingOpen関数アクセスレベル=protected)にメインプログラムからアクセスする為のアクセスレベル=public関数を合計で6つOriginalCTradeクラスに追加しました。追加した関数は以下の通りです。

BuyLimit関数(買いのリミット待機注文を出す)

SellLimit関数(売りのリミット待機注文を出す)

BuyStop関数(買いのストップ待機注文を出す)

SellStop関数(売りのストップ待機注文を出す)

BuyStopLimit関数(買いのストップリミット待機注文を出す)

SellStopLimit関数(売りのストップリミット待機注文を出す)

今回追加した関数群に関するコード記述は以下の通りです。

宣言部分↓

//買いのリミット待機注文を出す
		bool BuyLimit(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//売りのリミット待機注文を出す	
		bool SellLimit(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime pExpiration = 0, string parComment = NULL);
	//買いのストップ待機注文を出す	
		bool BuyStop(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//売りのストップ待機注文を出す	
		bool SellStop(string parSymbol, double parVolume, double parPrice, double parStop = 0, double parProfit = 0, datetime parExpiration = 0, string parComment = NULL);
	//買いのストップリミット待機注文を出す
		bool BuyStopLimit(string parSymbol, double parVolume, double parPrice, double parStopLimit, double parStop = 0, double parProfit = 0,  datetime parExpiration = 0, string parComment = NULL);
	//売りのストップリミット待機注文を出す	
		bool SellStopLimit(string parSymbol, double parVolume, double parPrice, double parStopLimit, double parStop = 0, double parProfit = 0,  datetime parExpiration = 0, string parComment = NULL);

処理実装記述部分↓

//買いのリミット待機注文を出す
bool OriginalCTrade::BuyLimit(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_LIMIT,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

//売りのリミット待機注文を出す
bool OriginalCTrade::SellLimit(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_LIMIT,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

//買いのストップ待機注文を出す
bool OriginalCTrade::BuyStop(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_STOP,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

//売りのストップ待機注文を出す
bool OriginalCTrade::SellStop(string parSymbol,double parVolume,double parPrice,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_STOP,parVolume,parPrice,parStop,parProfit,0,parExpiration,parComment);
	return(success);
}

//買いのストップリミット待機注文を出す
bool OriginalCTrade::BuyStopLimit(string parSymbol,double parVolume,double parPrice,double parStopLimit,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_BUY_STOP_LIMIT,parVolume,parPrice,parStop,parProfit,parStopLimit,parExpiration,parComment);
	return(success);
}

//売りのストップリミット待機注文を出す
bool OriginalCTrade::SellStopLimit(string parSymbol,double parVolume,double parPrice,double parStopLimit,double parStop=0.000000,double parProfit=0.000000,datetime parExpiration=0,string parComment=NULL)
{
	bool success = PendingOpen(parSymbol,ORDER_TYPE_SELL_STOP_LIMIT,parVolume,parPrice,parStop,parProfit,parStopLimit,parExpiration,parComment);
	return(success);
}

OriginalTrade.mqhファイル内に追加した関数もだいぶ数が増えてきたので、現時点(講座記事第87回時点)のOriginalTrade.mqhファイル全体のコード記述は↓の記事からご確認ください。

講座記事第87回時点でのOriginalTrade.mqhファイル全体のコード記述について

今回は以上になります。最後までお読みいただきありがとうございました

【超入門】MQL5 EA講座 第86回「待機注文関数を作る-その1-」

       →MQL5 EA講座 第88回「待機注文情報取得用のクラスを追加する」

コメント

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