前回は待機注文の情報取得・管理用のクラス・関数を集約する事を目的としたインクルードファイル「OriginalPending.mqh」を作り、そこにOriginalCpendingクラスを作りました。
そして宣言したアクセスレベル=private,publicそれぞれのメンバのうちOrderCount関数の処理実装記述について主に解説してきました。
今回は、このOrderCount関数にメインプログラムからアクセスできるようにする、publicレベル関数の処理実装記述を解説していきたいと思います。
BuyLimitNum関数について
BuyLimitNum関数は買いリミット待機注文の数を取得するアクセスレベル=publicの関数です。
BuyLimitNum関数の戻り値と仮引数について
BuyLimitNum関数の戻り値と仮引数は以下の通りです。
// 買いのリミット注文数を取得する
int OriginalCpending::BuyLimitNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。買いリミット待機注文数を返す想定なので戻り値はint型です。
BuyLimitNum関数の処理実装記述について
BuyLimitNum関数の処理実装記述は以下の通りです。
int OriginalCpending::BuyLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyLimit);
}
BuyLimitNum関数の処理実装記述は極めてシンプルで、前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountBuyLimit」を呼び出して、戻り値としてreturnを使って返すだけです。
private関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは買いのリミット待機注文の数を格納している変数「CountBuyLimit」を呼び出せば、買いのリミット待機注文の数を取得する関数の完成です。
SellLimitNum関数について
SellLimitNum関数は売りリミット待機注文の数を取得するアクセスレベル=publicの関数です。
SellLimitNum関数の戻り値と仮引数について
SellLimitNum関数の戻り値と仮引数は以下の通りです。
// 売りのリミット注文数を取得する
int OriginalCpending::SellLimitNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。売りのリミット待機注文数を返す想定なので戻り値はint型です。
SellLimitNum関数の処理実装記述について
SellLimitNum関数の処理実装記述は以下の通りです。
// 売りのリミット注文数を取得する
int OriginalCpending::SellLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellLimit);
}
SellLimitNum関数の処理実装記述もBuyLimitNum関数と構造は同様で、前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountSellLimit」を呼び出して、戻り値としてreturnを使って返すだけです。
private関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは売りのリミット待機注文の数を格納している変数「CountSellLimit」を呼び出せば、売りのリミット待機注文の数を取得する関数の完成です。
BuyStopNum関数について
BuyStopNum関数は買いストップ待機注文の数を取得するアクセスレベル=publicの関数です。
BuyStopNum関数の戻り値と仮引数について
BuyStopNum関数の戻り値と仮引数は以下の通りです。
// 買いのストップト注文数を取得する
int OriginalCpending::BuyStopNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。買いのストップ待機注文数を返す想定なので戻り値はint型です。
BuyStopNum関数の処理実装記述について
BuyStopNum関数の処理実装記述は以下の通りです。
int OriginalCpending::BuyStopNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyStop);
}
前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountBuyStop」を呼び出して、戻り値としてreturnを使って返すだけです。
privateレベルの関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは買いのストップ待機注文の数を格納している「CountBuyStop」を呼び出せば、買いのストップ待機注文の数を取得する関数の完成です。
SellStopNum関数について
SellStopNum関数は売りのストップ待機注文の数を取得するアクセスレベル=publicの関数です。
SellStopNum関数の戻り値と仮引数について
SellStopNum関数の戻り値と仮引数は以下の通りです。
// 売りのストップト注文数を取得する
int OriginalCpending::SellStopNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。売りのストップ待機注文数を返す想定なので戻り値はint型です。
SellStopNum関数の処理実装記述について
SellStopNum関数の処理実装記述は以下の通りです。
int OriginalCpending::SellStopNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellStop);
}
前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountSellStop」を呼び出して、戻り値としてreturnを使って返すだけです。
privateレベルの関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは売りのストップ待機注文の数を格納している変数「CountSellStop」を呼び出せば、売りのストップ待機注文の数を取得する関数の完成です。
BuyStopLimitNum関数について
BuyStopLimitNum関数は買いストップリミットの待機注文の数を取得するアクセスレベル=publicの関数です。
BuyStopLimitNum関数の戻り値と仮引数について
BuyStopLimitNum関数の戻り値と仮引数は以下の通りです。買いのストップリミットの待機注文数を返す想定なので戻り値はint型です。
※ストップリミット注文については
講座記事第86回の「ストップリミットオーダーとは?」セクションをご覧ください。
// 買いのストップトリミット注文数を取得する
int OriginalCpending::BuyStopLimitNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。
BuyStopLimitNum関数の処理実装記述について
BuyStopLimitNum関数の処理実装記述は以下の通りです。
int OriginalCpending::BuyStopLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyStopLimit);
}
前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountBuyStopLimit」を呼び出して、戻り値としてreturnを使って返すだけです。
private関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは買いストップリミットの待機注文の数を格納している変数「CountBuyStopLimit」を呼び出せば、買いストップリミットの待機注文の数を取得する関数の完成です。
SellStopLimitNum関数について
SellStopLimitNum関数は売りストップリミットの待機注文の数を取得するアクセスレベル=publicの関数です。
SellStopLimitNum関数の戻り値と仮引数について
SellStopLimitNum関数の戻り値と仮引数は以下の通りです。
// 売りのストップトリミット注文数を取得する
int OriginalCpending::SellStopLimitNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。売りストップリミットの待機注文数を返す想定なので戻り値はint型です。
SellStopLimitNum関数の処理実装記述について
SellStopLimitNum関数の処理実装記述は以下の通りです。
int OriginalCpending::SellStopLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellStopLimit);
}
前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountSellStopLimit」を呼び出して、戻り値としてreturnを使って返すだけです。
privateレベルの関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは売りストップリミットの待機注文の数を格納している「CountSellStopLimit」を呼び出せば、売りストップリミットの待機注文の数を取得する関数の完成です。
TotalPendingNum関数について
TotalPendingNum関数は待機注文全体の数を取得するアクセスレベル=publicの関数です。
TotalPendingNum関数の戻り値と仮引数について
TotalPendingNum関数の仮引数は以下の通りです。
//待機注文全体の数を取得する
int OriginalCpending::TotalPendingNum(string parSymbol)
仮引数「parSymbol」には取引銘柄が記述される想定です。待機注文全体の数を返す想定なので戻り値はint型です。
TotalPendingNum関数の処理実装記述について
TotalPendingNum関数の処理実装記述は以下の通りです。
int OriginalCpending::TotalPendingNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountTotalPending);
}
前回作ったOrderCount関数を{}内で呼び出して、privateレベルの変数である「CountTotalPending」を呼び出して、戻り値としてreturnを使って返すだけです。
privateレベルの関数であるOrderCount関数は、待機注文の種類に応じて待機注文の数を各種privateレベルの変数に振り分ける働きをしていますから、ここでは待機注文全体の数を格納している変数「CountTotalPending」を呼び出せば、待機注文全体の数を取得する関数の完成です。
GetOrderTickets関数について
GetOrderTickets関数は待機注文のオーダー番号を取得するpublicレベルの関数です。
※MQL5ではオーダー番号、ポジション番号、約定番号(ディール番号)という概念が存在します。
それぞれの違いについては各用語のアンカーテキストリンクから該当の記事をご参照ください。
GetOrderTickets関数の戻り値と仮引数について
GetOrderTickets関数の戻り値と仮引数は以下の通りです。
//オーダー番号を取得する
void OriginalCpending::GetOrderTickets(string parSymbol,ulong &parTickets[])
第1引数には取引銘柄、第2引数にはメインプログラムで待機注文のオーダー番号を格納する配列を記述する想定になっています。配列をreturnで返すことはできないので、戻り値はvoid型です。
<参考リンク>
参照渡し 値渡し、引数、仮引数、配列、void型、return演算子
GetOrderTickets関数の処理実装記述について
GetOrderTickets関数の処理実装記述は以下の通りです。
void OriginalCpending::GetOrderTickets(string parSymbol,ulong &parTickets[])
{
OrderCount(parSymbol);//注文種別の振り分けと、各種配列各種格納配列へのオーダー番号代入を行う
ArrayCopy(parTickets,TicketsPending);//メインプラグラムで用意した待機注文格納配列にオーダー番号をコピー
return;
}
OrderCount関数を呼び出すのは、今回の記事でこれまでに説明してきた関数と同じです。
OrderCount関数を呼び出す理由はprivateレベルの配列「TicketsPending」を使う為です。配列「TicketsPending」には待機注文のオーダー番号が格納されています。
ArrayCopy関数は第2引数に指定した配列を第1引数の配列に複製する関数です。
従って、コピー元の配列「TicketsPending」を第2引数に記述し、第1引数にはメインプログラムで用意するコピー先配列(=GetOrderTickets関数の仮引数「parTickets」に記述される配列)を記述します。
この処理記述によって、GetOrderTickets関数をメインプログラムから使う事によって、待機注文のオーダー番号を取得できるようになりました。
OriginalCpendingクラスの全体記述
今回の講座記事では以下の関数をOriginalCpendingクラスの関数として追加し、その処理実装記述を解説しました。
- BuyLimitNum関数:買いリミット待機注文の数を取得するアクセスレベル=publicの関数
- SellLimitNum関数:売りリミット待機注文の数を取得するアクセスレベル=publicの関数
- BuyStopNum関数:買いストップ待機注文の数を取得するアクセスレベル=publicの関数
- SellStopNum関数:売りのストップ待機注文の数を取得するアクセスレベル=publicの関数
- BuyStopLimitNum関数:買いストップリミットの待機注文の数を取得するアクセスレベル=publicの関数
- SellStopLimitNum関数:売りストップリミットの待機注文の数を取得するアクセスレベル=publicの関数
- TotalPendingNum関数:待機注文全体の数を取得するアクセスレベル=publicの関数
- GetOrderTickets関数:待機注文のオーダー番号を取得するアクセスレベル=publicの関数
OriginalCpendingクラスの全体記述は以下の通りです↓
//+------------------------------------------------------------------+
//| OriginalCpending.mqh |
//| MQL5ssei |
//| https://mqlinvestmentlab.com/ |
//+------------------------------------------------------------------+
#property copyright "MQL5ssei"
#property link "https://mqlinvestmentlab.com/"
#property version "1.00"
class OriginalCpending
{
private:
void OrderCount(string parSymbol);
int CountBuyLimit, CountSellLimit, CountBuyStop, CountSellStop, CountBuyStopLimit, CountSellStopLimit, CountTotalPending;
ulong TicketsPending[];
public:
int BuyLimitNum(string parSymbol);
int SellLimitNum(string parSymbol);
int BuyStopNum(string parSymbol);
int SellStopNum(string parSymbol);
int BuyStopLimitNum(string parSymbol);
int SellStopLimitNum(string parSymbol);
int TotalPendingNum(string parSymbol);
void GetOrderTickets(string parSymbol, ulong &parTickets[]);
};
void OriginalCpending::OrderCount(string parSymbol)
{
//ポジション数を格納する変数の初期化
CountBuyLimit = 0;
CountSellLimit = 0;
CountBuyStop = 0;
CountSellStop = 0;
CountBuyStopLimit = 0;
CountSellStopLimit = 0;
CountTotalPending = 0;
//オーダー番号を格納する配列の初期化とリサイズ
ArrayResize(TicketsPending, 1);
ArrayInitialize(TicketsPending, 0);
for(int i = 0; i < OrdersTotal(); i++)//注文数分チェック
{
ulong ticket = OrderGetTicket(i);
if(OrderGetString(ORDER_SYMBOL) == parSymbol)
{
long type = OrderGetInteger(ORDER_TYPE);
switch((int)type)
{
case ORDER_TYPE_BUY_STOP://ストップ買い待機注文なら
CountBuyStop++;//インクリメント
break;
case ORDER_TYPE_SELL_STOP://ストップ売り待機注文なら
CountSellStop++;//インクリメント
break;
case ORDER_TYPE_BUY_LIMIT://リミット買い待機注文なら
CountBuyLimit++;//インクリメント
break;
case ORDER_TYPE_SELL_LIMIT://リミット売り待機注文なら
CountSellLimit++; //インクリメント
break;
case ORDER_TYPE_BUY_STOP_LIMIT://ストップリミット買い待機注文なら
CountBuyStopLimit++;//インクリメント
break;
case ORDER_TYPE_SELL_STOP_LIMIT://ストップリミット売り待機注文なら
CountSellStopLimit++; //インクリメント
break;
}//switch文の終わり
//全体の待機注文数をインクリメント
CountTotalPending++;
ArrayResize(TicketsPending,CountTotalPending);
TicketsPending[ArraySize(TicketsPending)-1] = ticket;
}//if文の終わり
}//for文の終わり
}//処理実装記述の終わり
// 買いのリミット注文数を取得する
int OriginalCpending::BuyLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyLimit);
}
// 売りのリミット注文数を取得する
int OriginalCpending::SellLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellLimit);
}
// 買いのストップト注文数を取得する
int OriginalCpending::BuyStopNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyStop);
}
// 売りのストップト注文数を取得する
int OriginalCpending::SellStopNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellStop);
}
// 買いのストップトリミット注文数を取得する
int OriginalCpending::BuyStopLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountBuyStopLimit);
}
// 売りのストップトリミット注文数を取得する
int OriginalCpending::SellStopLimitNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountSellStopLimit);
}
//待機注文全体の数を取得する
int OriginalCpending::TotalPendingNum(string parSymbol)
{
OrderCount(parSymbol);
return(CountTotalPending);
}
//オーダー番号を取得する
void OriginalCpending::GetOrderTickets(string parSymbol,ulong &parTickets[])
{
OrderCount(parSymbol);//注文種別の振り分けと、各種配列各種格納配列へのオーダー番号代入を行う
ArrayCopy(parTickets,TicketsPending);//メインプラグラムで用意した待機注文格納配列にオーダー番号をコピー
return;
}
今回は以上となります。
最後までお読みいただきありがとうございました。
※今回の内容がよくわからなかったという方は、ひょっとするとクラスに関しての基本的な理解が追い付いていない可能性があります。クラスについては以下のリンクをご参照ください。↓
- MQL5 EA講座 第48回「クラスについて1-クラスとは?-」
- MQL5 EA講座 第49回「クラスについて2 -クラスの使い方-」
- MQL5 EA講座 第50回「クラスについて3 -アクセス指定子-」
- MQL5 EA講座 第51回「クラスについて4 -派生クラス-」
- MQL5 EA講座 第52回「クラスについて5 -コンストラクタ-」
- MQL5 EA講座 第53回「クラスについて6 -仮想関数-」
コメント