MarketInfo関数の書式や引数を調べても、
実際にコンパイルして動かせるサンプルコードが見つからない——という人向けの記事です。
この記事では、MarketInfo関数の代表的な使い方に加えて、
実際にMetaEditorでコンパイルして、
Ask・Bid・スプレッドをチャート上に表示できるサンプルコードを紹介します。
MarketInfo関数の書式と引数
まず、MarketInfo関数が何を返す関数なのか、書式と引数を確認します。
MarketInfo関数とは、気配値表示ウインドウに表示されている各通貨ペアの
- Ask
- Bid
- スプレッド
- スワップ
などのマーケット情報を扱う関数です。
MarketInfo(string symbol,int type); MarketInfo(通貨ペア,何の情報か)
戻り値はdouble型です。symbolは通貨ペアです。typeは何の情報かになります。
typeはかなりの数がありますので、詳しくはMQL4でMarketInfoと入力して、
それにカーソルを合わせてキーボードのF1キーを押すと一覧が表示されます。
代表的なものだけを以下に記載しておきます。
代表的な使用例(Ask・Bid・通貨単位・スプレッド)
typeに渡す定数ごとに、実際の書き方を確認します。
Ask情報を取得したい場合
Ask情報を取得したい場合は、以下のようになります。
MarketInfo("USDJPY",MODE_ASK);
Bid情報を取得したい場合
Bid情報を取得したい場合は、以下のようになります。
MarketInfo("USDJPY",MODE_BID);
通貨単位を取得したい場合
通貨単位を取得したい場合は、以下のようになります。
MarketInfo("USDJPY",MODE_POINT);
スプレッド情報を取得したい場合
スプレッド情報を取得したい場合は、以下のようになります。
MarketInfo("USDJPY",MODE_SPREAD);
MarketInfo関数を使ってAsk・Bid・スプレッドを表示するインジケーターを作る
ここまでの内容を組み合わせて、
現在の通貨ペアのAsk・Bid・スプレッドを、
チャート左上に表示するインジケーターを作ってみましょう。
//+------------------------------------------------------------------+
//| MarketInfoLabel.mq4 |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0, "MarketInfoLabel");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double ask = MarketInfo(Symbol(), MODE_ASK);
double bid = MarketInfo(Symbol(), MODE_BID);
double spread = MarketInfo(Symbol(), MODE_SPREAD);
string text = StringFormat("%s Ask:%s Bid:%s Spread:%.0f",
Symbol(), DoubleToString(ask, Digits), DoubleToString(bid, Digits), spread);
if(ObjectFind(0, "MarketInfoLabel") < 0)
{
ObjectCreate(0, "MarketInfoLabel", OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, "MarketInfoLabel", OBJPROP_CORNER, CORNER_LEFT_UPPER);
ObjectSetInteger(0, "MarketInfoLabel", OBJPROP_XDISTANCE, 10);
ObjectSetInteger(0, "MarketInfoLabel", OBJPROP_YDISTANCE, 20);
}
ObjectSetString(0, "MarketInfoLabel", OBJPROP_TEXT, text);
return(0);
}
//+------------------------------------------------------------------+
MarketInfo()で取得したAsk・Bid・スプレッドを1つの文字列にまとめ、
OBJ_LABELオブジェクトのテキストとして更新しています。
オブジェクト名を固定してObjectFind()で存在チェックしてから作成することで、
毎ティック同じ名前でオブジェクトを重複作成しようとしてエラーになるのを防いでいます。
あわせて読みたい: 【MQL5入門】MarketInfo()は存在しない?SymbolInfoDouble/Integer/Stringでロット刻み・最小ストップ距離を取得する
【MQL】気配値表示ウインドウに表示されている様々な情報を返す関数『MarketInfo』についてわかりやすく説明してみた:まとめ
MarketInfo関数を使えば、
気配値表示ウインドウに表示されているAsk・Bid・スプレッド・スワップなどの情報を、
インジケーターやEAのコードから直接取得できます。
typeに渡す定数を切り替えるだけで取得できる情報が変わるので、
まずはAsk・Bid・スプレッドの3つから試してみてください。
コメント