通貨ペア、時間足
EAを作る時に通貨ペアと時間足を限定してコーディングするケースが多いです。
ユーザーが異なる通貨ペアと時間足を選択した時にアラームあるいはエラーを出して知らせる必要があります。それぞれは以下の関数で取り出すことができます
- Symbol():通貨ペア
- Period():時間足
Symbol()
チャートで使用されている通貨ペアは以下のように取得できます。
1 |
string Symbol(); |
Ref: Symbol – Chart Operations – MQL4 Documentation
注意点としてSymbol()から得られる情報はFX業者によって異なります。
例えば「USDJPY」の場合、
- USDJPY-b:OANDA(NewYork)
- USDJPY-oj5k:OANDA(TKY)
- USDJPY-oj3m:OANDA(TKY)
- USDJPY-cd:FXTF
- USDJPY:GaitameFinest
- USDJPY:Ducascopy
- etc.
同じ業者でも注文が何万Lotまでなど、口座によってもサフィックスで区別している場合があります。
文字列を操作するStringSubstr()を使うと欲しいところだけ取り出せます。
1 2 3 4 5 |
string StringSubstr( string string_value, // string int start_pos, // position to start with int length=0 // length of extracted string ); |
これを使ってSymbol()で戻ってくる文字列の6文字のみを取り出せば「USDJPY」を判断できます。
1 |
StringSubstr(Symbol(), 0, 6 ); |
あるいは、SymbolInfoString()でIDを指定すると他の通貨ペア情報を取り出せます。
1 2 3 4 |
string SymbolInfoString( string name, // Symbol ENUM_SYMBOL_INFO_STRING prop_id // Property identifier ); |
Ref: SymbolInfoString – Market Info – MQL4 Documentation
ENUM_SYMBOL_INFO_STRINGのIDは、
- SYMBOL_CURRENCY_BASE
- USD、基軸通貨
- SYMBOL_CURRENCY_PROFIT
- JPY、決済通貨
- SYMBOL_CURRENCY_MARGIN
- JPY、証拠金通貨
- SYMBOL_DESCRIPTION
- US Dollar vs Japanese Yen、シンボル説明
- SYMBOL_PATH
- Forex\USDJPY、パス
Period()
時間足は以下の関数で取得できます
1 |
int Period(); |
Ref: Period – Chart Operations – MQL4 Documentation
サンプルコード
通貨ペアが「USDJPY」、時間足が5分以外はアラートとプリントでエラーを出します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void OnTick() { if ( StringSubstr(Symbol(), 0, 6 ) != "USDJPY" || Period() != 5){ Alert("Set EA on USDJPY M5"); Print("Set EA on USDJPY M5"); Sleep(10000); return; } // ... } |
OnTick()に設定しましたがこれをTickで毎回呼び出すのはこの関数に限らず負荷になります。
OnInit()で確認することもできますが、チャートを途中で変更されるとワークできません。
Tick呼び出しを止めるなど工夫が必要でしょう。