前回は、OriginalCTradeクラスにアクセスレベル=protectedのPendingOpen関数を追加し、そのコード内容を解説しました。↓
前回86回で解説したアクセスレベル=protectedのPendingOpen関数はアクセスレベルがprotectedなので、このままでは、実際にEA(自動売買プログラム)を作るときのメインプログラムで使う事は出来ません。
今回は、PendingOpen関数に直接アクセスできるアクセスレベル=publicの待機注文専用関数を追加していきたいと思います。
成行注文で言えば、
第72回「ポジションオープン関数を実装する」で紹介したPositionOpen関数はアクセスレベル=protectedでそのまま直接は使えないので、第73回「Buy関数とSell関数を実装」で紹介したアクセスレベル=publicのBuy関数や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型です。
各関数の処理実装記述について
もうすでに、アクセスレベル=protectedのPendingOpen関数は完成しているので、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関数(売りのリミット待機注文を出す)
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ファイル全体のコード記述について
今回は以上になります。最後までお読みいただきありがとうございました
コメント