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」で計算しようとしている場合など - サーバーと通信出来ていない
2019年3月9日土曜日

[MQL4] MarketInfo で値が取れない時は気配値表示ウィンドウを確認する

気配値表示ウィンドウに対象の通貨ペアを表示していない場合、基本的に [MarketInfo()](https://docs.mql4.com/marketinformation/marketinfo) の値は取得できません値が0になってしまう。

`MarketInfo()` の値が取れない時は、気配値表示ウィンドウを確認してみましょう。

2019年3月8日金曜日

[MQL4] ストラテジーテスターの中では SymbolInfo や MarketInfo が取得できない時がある

@MetaTrader 4.00 Build 1170 (20 Dec 2018)

[SymbolInfoDouble()](https://docs.mql4.com/marketinformation/symbolinfodouble), [SymbolInfoInteger()](https://docs.mql4.com/marketinformation/symbolinfointeger), [SymbolInfoString()](https://docs.mql4.com/marketinformation/symbolinfostring) 等の関数はストラテジーテスターの中では動作しない時があるので注意が必要です。

2019年3月4日月曜日

[MQL4] SYMBOL_TRADE_TICK_VALUE は過去の値がとれない

[値幅を基準通貨の金額に換算する](https://strategyofc.blogspot.com/2018/07/mql4.html) 際に使う [SymbolInfoDouble(null, SYMBOL_TRADE_TICK_VALUE)](https://docs.mql4.com/marketinformation/symbolinfodouble) ですが、過去の値はとれないので注意が必要です。

つまり、Strategy Tester 内で使用することが出来ません。

[MarketInfo(null, MODE_TICKVALUE)](https://docs.mql4.com/marketinformation/marketinfo) も同様です。

> 参考
> 
> [How to calculate pip value in currency account (USD, EUR etc) some bars ago or some time ago? - Currency Pairs - Expert Advisors and Automated Trading - MQL5 programming forum](https://www.mql5.com/en/forum/40812)

2019年1月17日木曜日

[MQL4] ObjectDelete() をループ内で実行するときには decrement にする

特定の Object をまとめて消したい時、以下のようにループで各オブジェクトを消したくなります。

しかし、以下は Object が2個以上あるとうまくいきません。

```mq4
// NG
for (int i = 0; i < ObjectsTotal(EMPTY); i++) {
    string objectName = ObjectName(i);
    ObjectDelete(objectName);
}
```

2019年1月5日土曜日

[MQL4] OnTick() 内で Bid, Ask を更新する方法

EA の `OnTick()` 処理中に Bid, Ask が更新されたとしても `Bid`, `Ask` 変数にこれらの値は反映されません。

注文の実行時など、最新の値を使用したい時は [RefreshRates()](https://docs.mql4.com/series/refreshrates) を使用すると `Bid`, `Ask` 変数等を更新する事が出来ます。

2019年1月4日金曜日

[MQL4] 他通貨の Bid, Ask を取得する方法2種

他通貨のバー情報を取得するには [iHigh()](https://docs.mql4.com/series/ihigh) 等の関数が使えます。
通常はこれで十分なのですが、リアルタイムで Bid, Ask の情報を取得したいことも時としてあります。

その場合、以下のようにして取得することが可能です。