[MQL4] ストラテジーテスターの中では SymbolInfo や MarketInfo が取得できない時がある
@MetaTrader 4.00 Build 1170 (20 Dec 2018)
SymbolInfoDouble(), SymbolInfoInteger(), SymbolInfoString() 等の関数はストラテジーテスターの中では動作しない時があるので注意が必要です。
通貨ペアで指定した通貨以外の情報は SymbolInfo では取得できない
具体的には、ストラテジーテスターの「通貨ペア」で指定した通貨と関数で指定した通貨が異なる場合です。
例えば、以下のように、ストラテジーテスターの「通貨ペア」を「USDJPY」にして、EA内で「EURUSD」の情報を取ってみます。
1 2 | Print ( "SymbolInfo: " , SymbolInfoDouble ( "EURUSD" , SYMBOL_POINT)); Print ( "MarketInfo: " , MarketInfo ( "EURUSD" , MODE_POINT)); |
結果は以下のようになります1。
MarketInfo: 1e-05 SymbolInfo: 0.0 |
ご覧のように MarketInfo() は問題なく取得できています。
ただし、この MarketInfo()
も特定の条件が整わないと値を取ることはできません。
MarketInfo も取得できない時がある
MarketInfo()
でも値が取得できないのは、気配値表示ウィンドウに表示されておらず、かつストラテジーテスターの「通貨ペア」で指定していない場合です。
例えば、以下のように、気配値表示ウィンドウに「EURUSD」を非表示にした状態で、上記と同様のストラテジーテスターを走らせます2。
結果は以下のようになります。
MarketInfo: 0.0 SymbolInfo: 0.0 |
ただし、起動後一度でもストラテジーテスターで対象の通貨3を指定していると、値が取得できるようです。 データのキャッシュが残っているためだと思われますが、正確にはよくわかりません。
他の条件はよくわかりませんが、気配値表示ウィンドウに表示されていれば MarketInfo()
の情報は取れるようです。
表示し忘れに気をつけましよう。
なお、気配値表示ウィンドウから通貨を削除してしまうとリアルEA実行中も MarketInfo()
の情報が取れなくなってしまいます4。
こちらも気をつけましょう。