MarketBookGet関数の働き・役割
MarketBookGet関数は、指定されたシンボルの板情報を含むMqlBookInfo構造体の配列を返します。この関数を使用することで、特定のシンボルに対する現在の買い注文や売り注文の状況を把握することができます。
板情報は、MarketBookAdd関数で事前に開かれている必要があります。MarketBookGet関数は、その板情報を取得し、動的配列に格納します。この配列には、各注文の種類、価格、ボリューム、正確なボリュームが含まれています。成功した場合、関数はtrueを返し、失敗した場合はfalseを返します。
MarketBookGet関数の引数について
MarketBookGet関数の引数は以下の通りです。
引数:
- symbol 銘柄名を指定します。この引数には、板情報を取得したいシンボルの名称を文字列で指定します。NULLを指定すると、現在のチャートのシンボルが使用されます。
- book[] 板情報記録の配列への参照を指定します。この配列は、事前に記録の数に充分なように割り当てることができます。もし動的配列が予め動作メモリに割り当てられていない場合、クライアント端末が配列自体を配布します。
bool MarketBookGet(
string symbol, // 銘柄名
MqlBookInfo& book[] // 配列への参照
);
symbol引数には、板情報を取得したいシンボルの名称を指定します。book引数には、MqlBookInfo構造体の配列を参照として渡します。この配列には、取得した板情報が格納されます。
MarketBookGet関数の戻り値について
MarketBookGet関数の戻り値は、板情報の取得が成功したかどうかを示します。
- true: 板情報の取得が成功した場合。この場合、指定したシンボルの板情報が正常に配列に格納されたことを意味します。
- false: 板情報の取得が失敗した場合。この場合、指定したシンボルの板情報が取得できなかったことを意味します。
関数がfalseを返す場合、エラーメッセージを取得するためにGetLastError関数を使用して、具体的なエラーの原因を確認することが推奨されます。成功した場合は、配列内に取得した板情報が格納され、各エントリの詳細を確認することができます。
注意点
板情報は事前にMarketBookAdd関数で開かれている必要があります。MarketBookAdd関数で指定したシンボルの板情報を取得する準備を整えた後に、MarketBookGet関数を呼び出します。
次に、配列book[]は事前に十分なメモリが割り当てられている必要があります。動的配列の場合、クライアント端末が自動的にメモリを割り当てますが、事前に配列を適切に準備しておくことが重要です。
また、MarketBookGet関数はすべてのシンボルで利用できるわけではなく、一部のシンボルに限定されている場合があります。そのため、対象のシンボルが板情報をサポートしているか確認することが必要です。
MarketBookGet関数を使ったサンプルコード
// MqlBookInfo構造体の配列を宣言します
MqlBookInfo priceArray[];
// MarketBookGet関数を使用して現在のDOM情報を取得します
bool getBook = MarketBookGet(NULL, priceArray);
if (getBook)
{
// 取得したDOM情報の配列サイズを取得します
int size = ArraySize(priceArray);
// 現在のシンボルについての板情報をエキスパートログに出力します
Print("MarketBookInfo about ", Symbol());
// 取得した各板情報を出力します
for (int i = 0; i < size; i++)
{
PrintFormat("Type: %d, Price: %f, Volume: %d, Volume Real: %f",
priceArray[i].type,
priceArray[i].price,
priceArray[i].volume,
priceArray[i].volume_real);
}
}
else
{
// DOM情報の取得に失敗した場合のエラーメッセージを出力します
Print("Failed to receive DOM for the symbol ", Symbol());
}
このサンプルコードでは、まずMqlBookInfo構造体の配列を宣言します。その後、MarketBookGet関数を使用して現在のDOM情報を取得し、取得した情報をエキスパートログに出力します。DOM情報の取得に失敗した場合は、エラーメッセージをエキスパートログに出力します。
サンプルコードに使われた関数や文法要素の簡単な解説
MqlBookInfo構造体の配列宣言
// MqlBookInfo構造体の配列を宣言します
MqlBookInfo priceArray[];
この行では、MqlBookInfo構造体の配列を宣言しています。この配列には、MarketBookGet関数によって取得される現在のDOM情報が格納されます。
MarketBookGet関数
// MarketBookGet関数を使用して現在のDOM情報を取得します
bool getBook = MarketBookGet(NULL, priceArray);
MarketBookGet関数は、現在のDOM情報を取得し、それをMqlBookInfo構造体の配列に格納します。この関数は、DOM情報の取得に成功するとtrueを返し、失敗するとfalseを返します。第一引数にはシンボル名を指定しますが、NULLを指定すると現在のチャートのシンボルが使用されます。
ArraySize関数
// 取得したDOM情報の配列サイズを取得します
int size = ArraySize(priceArray);
ArraySize関数は、配列のサイズ(要素の数)を取得します。ここでは、取得したDOM情報の配列サイズを取得し、後続の処理で使用します。
Print関数
// 現在のシンボルについての板情報をエキスパートログに出力します
Print("MarketBookInfo about ", Symbol());
Print関数は、指定したメッセージをエキスパートログに出力します。ここでは、現在のシンボルについての板情報をエキスパートログに出力しています。
PrintFormat関数
// 取得した各板情報を出力します
PrintFormat("Type: %d, Price: %f, Volume: %d, Volume Real: %f",
priceArray[i].type,
priceArray[i].price,
priceArray[i].volume,
priceArray[i].volume_real);
PrintFormat関数は、指定したフォーマットに従って文字列をフォーマットし、エキスパートログに出力します。ここでは、各MqlBookInfo構造体のフィールド値をフォーマットして出力しています。
Symbol関数
// 現在のシンボルを取得します
Symbol()
Symbol関数は、現在のチャートのシンボル名を返します。このシンボル名は、ログメッセージなどに使用されます。