MT4の通貨単位は、日本・円やアメリカ・ドルの各国毎の通貨単位以外にも、取引をするための通貨単位として「Point」と「Pips」があります。
「Point」と「Pips」の違いについては、こちらを参考にしてください。
MT4を採用している FX業者では、通貨ペアによって小数点以下の桁数が変わり、「Point」と「Pips」の関係が変わってくることがあります。
多くの通貨ペアは小数点以下 3桁 or 5桁 で 1 Pips = 10 Point ですが、USDZAR(アメリカ・ドル/南アフリカ・ランド)では小数点以下 4桁 となっており 1 Pips = 1 Point になります。
このため、EAのプログラムを組む時は、このような通貨ペアを選択しても問題が起きないようにしておく必要があります。取引する通貨ペアが決まっていないEAプログラムでは必須です。
この時に組むプログラムの内容は次のようにします。
通貨ペアで表示される小数点以下の桁数を取得して、単位を「Pips」から「Point」、「Pips」から「各国の通貨単位」へ自動変換する。
※設定値の入力は Pipsに統一する方が良いです。Pipsと Pointを混ぜると間違いが起きる原因になります。ですので、プログラム上で設定値の入力 Pipsから Point、各国の通貨単位へ自動変換させる方が間違いがないです。
コード
#property strict
int CurrencyPips = 100; // 通貨単位をPips単位で入力
int CurrencyPoint; // CurrencyPipsのPoint換算値
double CurrencyValue; // CurrencyPipsあたりの通貨価格(各国の通貨単位)
double BaseYen; // 各国の決済通貨の基準価格(円)
double CurrencyYen; // CurrencyPipsの円換算値
int coe = 1; // 単位をPipsからPointへ変換する変数
void OnInit() { // 初期処理
if(_Digits == 3 || _Digits == 5) { // 2,4桁表示業者の場合の係数は「1」
coe = 10; // 3,5桁表示業者の場合の係数は「10」
}
CurrencyPoint = CurrencyPips * coe; // PipsをPointに変換
CurrencyValue = CurrencyPoint * Point(); // Pointを通貨単位に変換
BaseYen = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE) / (100 * Point() / 0.001); // 決済通貨の基準価格(円)
CurrencyYen = CurrencyValue * BaseYen; // CurrencyPipsの円換算値
Print(CurrencyPips, " PipsをPointに変換:", CurrencyPoint, " Point");
Print(CurrencyPoint, " Pointを通貨単位に変換:", CurrencyValue, " ", SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT));
Print(CurrencyPips, " Pips/1通貨量 に相当する金額(日本円):", CurrencyYen, " 円");
Print("確認通貨ペア:", Symbol());
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
今回、確認した通貨ペアは EURUSD(ユーロ/米ドル)です。
10~14行目のコードで現在選択している通貨ペアが3,5桁表示か2,4桁表示になっているかを判定して、PipsをPoint値へ補正する係数を決定します。
16行目でPips単位をPoint単位へ変換して、これを基準にして以降のコードでは使うことになります。
利益や損切幅を数値で設定する時、特定の通貨ペアでしか行わない場合は10~14行目のコードは不要ですが、そうでない場合は必須です。
実際にこれを組み込んだEAはこちらになりますので参考にしてください。