前提
mql上では最小単位として「point」という概念で値が扱われます。
一般的に言われるpipsとは桁が違う場合が多くります。
また、内部的な数値として小数点以下幾つも値を持っている場合がある。
mql4では定義済み変数として「表示している通貨ペアが取り扱う最小単位の値」、「表示している通貨ペアの精度(小数点以下桁数)」がある。
表示している通貨ペアが取り扱える最小単位の値
表示している通貨ペアの精度
もう少し使いやすくする場合は、
MarketInfo(Symbol(),MODE_POINT), Digits() ));
として指定した通貨ペアの情報を取得することが可能である。
整理
基本的な考え方としては最小単位が1pips、ただし小数点が3桁、5桁ある通貨に関しては基準(Point)の10倍した数値が1pipsという認識でいいかと思います。
メジャー取引所での比較をしようと思ったのですが、主に金に対してのpipsが諸説あり基準が不明のために今回整理は端折ります。
その代わり実際にどう使えば良いのかを解説します。
mqlを書くときに考慮するべき事項
必ず同一の取引所での利用ならば何も問題はありません。
上記の表が示す意味は取引所によって1pipsの桁が違うことがあるということです。
で、どうしたらいいかというと桁を合わせる処理を実装します。
この辺りはググればよくでてくるあたりの話です。
実際に利用するコード
if(MarketInfo(Symbol(),MODE_POINT) == 3 || MarketInfo(Symbol(),MODE_POINT) == 5) {
point = _Point * 10.0;
} else {
point = _Point;
}
このコードがしている処理についてですが、あくまで小数点以下3桁、5桁の通貨ペアに対してはデフォルトのPoint数に10を掛けて桁を合わせています。
ですがこれでできることは雑に言うと為替だけの話です。
為替の場合取引所や通貨ペアの差が多くなく、ほぼこの処理だけを入れておくことで処理しきることができます。
しかしながら、CFDなどですと取引所や通貨ペアで値が変わる場合が間々あります。
整理すべく途中まで調べた結果ですが、例えばXMとGemforexのダウは「0.01」が最低数値ですが、TitanFXは「0.1」が最低数値だったりします。
そのため以下のような処理をして調整をします。
どちらに合わせるべきかというのは標準的な値を知りそちらに合わせるべきかと思います。
if(MarketInfo(Symbol(),MODE_POINT) == 3 || MarketInfo(Symbol(),MODE_POINT) == 5) {
point = _Point * 10.0;
} else if(AccountCompany() == "取引所名" && Symbol() == "通貨ペア名"){
point = _Point * 【調整係数】;
} else {
point = _Point;
}
調整係数の探し方
ごちゃごちゃ長くなったのですが、いつも私がこのあたりで苦労するため簡単に調整値を出せるようにEA化しました。
左上にいろいろな情報を表示します。
右上のテキストボックスに「調整係数候補」の数値を入れると画面上の緑ライン、赤ラインが移動します。
0.01,0.1,1,10,100,1000等々。
表示されているラインがそれぞれ、「BID+差分pips」、「BID-差分pips」を表示しています。
デフォルトの値は50pipsにしてあります。
目的の値幅のラインが引ける値を探してください。
先述したとおり基本は10が入っていることで想定の値が表示されるはずです。
その値が「調整係数」となります。
Printボタンを押すことで下の条件文を下のターミナルに表示しますのでコピーして利用してください。
PointAdjuster.zip
Pips計算の方法
ここまで出来たら後は簡単。
例えばBidより20pips下の値段を計算したい場合はこの様に使ってください。