MarketInfo関数の書式や引数を調べても、実際にコンパイルして動かせるサンプルコードが見つからない——という人向けの記事です。
この記事では、MarketInfo関数の代表的な使い方に加えて、実際にMetaEditorでコンパイルしてAsk・Bid・スプレッドをチャート上に表示できるサンプルコードを紹介します。
気配値表示ウインドウに表示されている様々な情報を返す関数『MarketInfo』
MarketInfo関数とは、気配値表示ウインドウに表示されている各通貨ペアの
- Ask
- Bid
- スプレッド
- スワップ
などのマーケット情報を扱う関数です。
MarketInfo(string symbol,int type); MarketInfo(通貨ペア,何の情報か)
戻り値はdouble型です。symbolは通貨ペアです。typeは何の情報かになります。
typeはかなりの数がありますので、詳しくはMQL4でMarketInfoと入力して、
それにカーソルを合わせてキーボードのF1キーを押すと一覧が表示されます。
代表的なものだけを以下に記載しておきます。
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()で存在チェックしてから作成することで、毎ティック同じ名前でオブジェクトを重複作成しようとしてエラーになるのを防いでいます。
コメント