スポンサーリンク
ホーム » MQL5でEA作ろう講座 » 【超入門】MQL5 EA講座 第87回「待機注文関数を作る-その2-」
a

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

MQL5でEA作ろう講座
スポンサーリンク

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5にて開発した、MT5EAを実運用するにあたり、

当サイトでは以下のFX業者をおススメいたします。

外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事はコチラ

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事はコチラ

フィリップ証券

フィリップ証券に関する記事はコチラ

—————————————————————

前回は、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回「待機注文情報取得用のクラスを追加する」

—————————————————————

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5を使って自作したEAシステムトレードに利用するには、取引プラットフォームとしてMT5を提供しているFX会社に口座を開設しなくてはいけません。

当サイトでは以下のFX会社での口座開設・EA運用をおススメしています。

おススメする理由の詳細につきましては、各FX会社について解説する記事を書いておりますので、下記のリンク記事を参考にしていただければと思います。


外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事は↓をご覧ください。

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事は↓をご覧ください。

フィリップ証券

フィリップ証券に関する記事は↓をご覧ください。

関連用語リンク集

MQL5FX関連の用語リンク集です。
当サイトでは、元々わからない言葉や概念に出くわしたら、すぐその言葉に立ち戻れるよう、かなり細かく内部リンクを張り巡らせており、多様な用語を網羅しています。

興味のある内容に直接アクセスし、疑問の解決にお役立ていただければと思います。

スポンサーリンク
MQL5でEA作ろう講座
スポンサーリンク
シェアする
エムキューエルをフォローする
スポンサーリンク
【超入門】MQL5 でEAを作ろうブログ

コメント

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