2019年4月4日木曜日

[MT4] tester cannot calculate prices が出てしまった場合の対処方法

昨日まで使えていた EA でテストをしようとしたところ、"tester cannot calculate prices" というエラーが出て、動かなくなってしまいました。
エラーの前に "margin exchange rate cannot be calculated" という警告が出ているのも気になります。

調べてみたところ、以下のような条件下でおこるようです条件が AND か OR か不確定。 - "Expert properties"(エキスパート設定)の "Initial deposit currency"(初期証拠金通貨)がブローカーのものと異なる - テストの "Symbol" (通貨ペア)が直接計算できない例えば、証拠金を「USD」にしていて、「EURJPY」で計算しようとしている場合など - サーバーと通信出来ていない > 参考 > > [Tester: exchange rate cannot be calculated - Forex Forum - MQL4 and MetaTrader 4 - MQL4 programming forum](https://www.mql5.com/en/forum/128233) ### 対策1 テスト用の通貨を変更する "Expert properties"(エキスパート設定) を開きます日本語の環境で再現しなかったので、英語のキャプチャになっています
"Testing"(テスト設定)タブを選択し、 "Initial deposit"(初期証拠金)の通貨を変更します。
基本的には、ブローカーの通貨(日本のブローカーなら"JPY")にすると大丈夫のようです。 テストしたい通貨ペアの Base Currency ("USDJPY" なら "JPY", "EURUSD" なら "USD"、基本的に後側の通貨)にしても大丈夫かもしれません。 ### 対策2 サーバーに接続する 対策1でも駄目なら、サーバーに接続するとうまくいくかもしれませんサーバーに接続すると、ヒストリーデータを勝手に上書きしたりするので注意。 一度、サーバーに接続してからテストを実行し、その後オフラインにしても問題はなさそうです。 ### 原因は? 今回、複数ある環境で再現実験をしてみたのですが、再現しないものもありました。 サーバーから何らかの情報を受け取っていて、その情報が足りないと起こるようです。 あくまで推測ですが、多分以下のようなことではないかと思います。 例えば、"Initial deposit"(初期証拠金)通貨を "USD" にしてあり、「"EURJPY" を 101.315円で買う」という処理が走ったとします。 この時、証拠金計算のために JPY -> USD の換算が必要になりますが、その換算が出来なかった場合、エラーになるのだろうと思います。 1. 変換用レートがどこかに保存されているはずなので、それを使用 1. 換算レートが保存されていなかった場合、サーバーに問い合わせ 1. サーバーに接続できなかったらエラー