カレントチャートのシンボル名を取得する (Symbol)
スクリプトや、EA から、現在のチャートのシンボル名を取得するには、_Symbol 変数 あるいは Symbol 関数 を使用します。
void OnStart() {
string sym = _Symbol; // Symbol() でも同様
Print(sym); //=> "USDJPY"
}
指定したチャートのシンボル名を取得する (ChartSymbol)
ChartSymbol 関数 を使用すると、チャート ID で指定したチャートのシンボル名を取得することができます。
void OnStart() {
// long chartId = ...;
string sym = ChartSymbol(chartId);
Print(sym); //=> "USDJPY"
}
すべてのシンボル名を取得する (SymbolTotal, SymbolName)
下記の関数を使用すると、現在のシステムで扱えるすべてのシンボル名を取得することができます。
- SymbolTotal() … シンボルの数を取得します。
- SymbolName() … 指定したインデックスのシンボル名を取得します。
次のサンプルスクリプトでは、すべてのシンボル名称と、それぞれの Bid/Ask 価格を表示しています。
/**
* すべてのシンボル名を取得します。
*
* Params:
* symbols - シンボル名が格納されます
* onlyInMarketWatch - 「気配値表示」内のシンボルに限定するのであれば true
* Returns:
* 見つかったシンボルの数
*/
int getAllSymbolNames(string &symbols[], bool onlyInMarketWatch=true) {
int n = SymbolsTotal(onlyInMarketWatch);
ArrayResize(symbols, n);
for (int i = 0; i < n; ++i) {
symbols[i] = SymbolName(i, onlyInMarketWatch);
}
return n;
}
// スクリプトのエントリポイント
void OnStart() {
string symbols[];
int n = getAllSymbolNames(symbols);
for (int i = 0; i < n; ++i) {
double bid = SymbolInfoDouble(symbols[i], SYMBOL_BID);
double ask = SymbolInfoDouble(symbols[i], SYMBOL_ASK);
PrintFormat("%2d: %s %f/%f", i + 1, symbols[i], bid, ask);
}
}
1: USDJPY 103.301000/103.326000
2: EURJPY 126.584000/126.639000
3: GBPJPY 139.443000/139.493000
4: AUDJPY 78.727000/78.759000
5: EURUSD 1.225320/1.225550
6: ...
関連記事
- MetaTrader/MQL: 表示しているチャートを列挙する (ChartFirst, ChartNext)
- MetaTrader/MQL: CTrade クラスで注文を出す (MT5)
- MetaTrader/MQL: OrderSend の引数を理解する - MqlTradeRequest/MqlTradeResult 構造体 (MT5)
- MetaTrader/MQL: 通貨(シンボル)のポイントサイズ、Digit 数を調べる (Point, Digits, SymbolInfoDouble)
- MQL で Hello World
- MetaTrader/MQL: MQL4 と MQL5 のどちらでコンパイルされているか調べる
- MetaTrader/MQL: チャートのサイズ(幅・高さ)を取得する (ChartGetInteger)