[MQL]価格をpipsに換算するコード(逆もあり)
インジケーターやEAの作成では価格とpipsの換算を頻繁に行うので、関数化しておくと再利用できて便利です。
この記事では、MQLで価格をpipsに(または逆にpipsを価格に)換算する関数のコードを記載します。
コピペでそのまま使えます。
価格をpipsに換算
価格をpipsに換算する関数は下記のコードで書けます。引数priceに換算したい価格幅を入れるとpipsに換算して値を返します(価格幅ではなく価格そのものを入れても機能します)…
//+------------------------------------------------------------------+
//| 価格をpipsに換算する関数
//+------------------------------------------------------------------+
double PriceToPips(double price)
{
double pips = 0;
// 現在の通貨ペアの小数点以下の桁数を取得
int digits = (int)MarketInfo(Symbol(), MODE_DIGITS);
// 3桁・5桁のFXブローカーの場合
if(digits == 3 || digits == 5){
pips = price * MathPow(10, digits) / 10;
}
// 2桁・4桁のFXブローカーの場合
if(digits == 2 || digits == 4){
pips = price * MathPow(10, digits);
}
// 少数点以下を1桁に丸める(目的によって桁数は変更する)
pips = NormalizeDouble(pips, 1);
return(pips);
}
簡単にこの関数のポイントを説明します。
price * MathPow(10, digits)
は、priceをpointに換算する処理です。
通貨の少数点以下桁数に、3桁(円ペア通貨)・5桁(ドルペア通貨)を採用しているブローカーの場合はピップス=ポイント÷10でpips値を計算します。
通貨の少数点以下桁数に、2桁(円ペア通貨)・5桁(ドルペア通貨)を採用しているブローカーはピップス=ポイントでpips値を計算します。
また、何桁で丸めるかは最後にNormalizeDouble()で調整します。上記のコードでは少数点以下1桁で丸めています。
pipsを価格に換算
pipsを価格に換算する関数は下記のコードで書けます。引数pipsに換算したいpips値を入れると価格に換算して値を返します。
//+------------------------------------------------------------------+
//| pipsを価格に換算する関数
//+------------------------------------------------------------------+
double PipsToPrice(double pips)
{
double price = 0;
// 現在の通貨ペアの小数点以下の桁数を取得
int digits = (int)MarketInfo(Symbol(), MODE_DIGITS);
// 3桁・5桁のFXブローカー
if(digits == 3 || digits == 5){
price = pips / MathPow(10, digits) * 10;
}
// 2桁・4桁のFXブローカー
if(digits == 2 || digits == 4){
price = pips / MathPow(10, digits);
}
// 価格を有効桁数で丸める
price = NormalizeDouble(price, digits);
return(price);
}
簡単にこの関数のポイントを説明します。
pips / MathPow(10, digits)
は、pipsをpointに換算する処理です。
通貨の少数点以下桁数に、3桁(円ペア通貨)・5桁(ドルペア通貨)を採用しているブローカーの場合は、価格=ポイント×10で価格を計算します。
通貨の少数点以下桁数に、2桁(円ペア通貨)・5桁(ドルペア通貨)を採用しているブローカーは、価格=ポイントで価格を計算します。
また、何桁で丸めるかは最後にNormalizeDouble()で調整します。上記のコードではその通貨ペアの有効桁数でで丸めています。
まとめ
価格とpipsを換算する関数の書き方でした。
よく行う処理なので関数にしておくと何かと便利です。
ありがとうございます。ありがたく使わせて頂きます。
匿名さんへ
コメントありがとうございます。
どういたしまして、です。
AccountProfit()の損益をpipsに変換したいのですが損益額では変換は難しいでしょうか?
匿名さんへ
損益をpipsに変換するには自分で計算式を作る必要がありますが難しくはありません。紙面上で手計算してみるのが一番理解が早いと思います。
前日比をPIPS表示したく利用させて頂きました。ありがとうございます。
FX勉強中さんへ
コメントありがとうございます。FXの勉強頑張ってください。
わかりやすい記事ありがとうございます!
これってゴールド(XAUUSD)の場合はまた別にIF文が必要なんでしょうか?
例)
1234.56
digitsは2だけど小数点第1位(数字の5)がピップス。
コウヘイさんへ
コメントありがとうございます。
為替通貨ペア以外の場合はif文などを追加してお好みに調整してください。