double PriceToPips(double price) {
double pips = 0;
int digits = (int)MarketInfo(Symbol(), MODE_DIGITS);
if(digits == 3 || digits == 5) {
pips = price * MathPow(10, digits) / 10;
}
if(digits == 2 || digits == 4) {
pips = price * MathPow(10, digits);
}
pips = NormalizeDouble(pips, 1);
return(pips);
}
double PipsToPrice(double pips) {
double price = 0;
int digits = (int)MarketInfo(Symbol(), MODE_DIGITS);
if(digits == 3 || digits == 5) {
price = pips / MathPow(10, digits) * 10;
}
if(digits == 2 || digits == 4) {
price = pips / MathPow(10, digits);
}
price = NormalizeDouble(price, digits);
return(price);
}
//+------------------------------------------------------------------+
//| Function: round down |
//+------------------------------------------------------------------+
double RoundDown(double val, int digit)
{
return ((double)(int)(val * MathPow(10, digit))) / MathPow(10, digit);
/*
上記式は、以下の手順を1行に集約したもの
double rev1 = val * MathPow(10, digit); // valに10のdigit乗を掛けて小数点位置をずらす
int rev2 = (int)rev1; // 整数に型変換することで小数点以下をカット
double rev3 = (double)rev2; // データ型をdoubleに戻す
double rev4 = rev3 / MathPow(10, digit); // 10のdigit乗で割って小数点位置を元に戻す
return rev4;
*/
}
//+------------------------------------------------------------------+
//| Function: round up |
//+------------------------------------------------------------------+
double RoundUp(double val, int digit)
{
double adjust = (val >= 0)? 0.9 : -0.9;
return ((double)(int)(val * MathPow(10, digit) + adjust)) / MathPow(10, digit);
/*
上記式は、以下の手順を2行に集約したもの
double adjust = (val >= 0)? 0.9 : -0.9; // valが0以上の場合はajust=0.9、そうでなければadjust=-0.9
double rev1 = val * MathPow(10, digit); // valに10のdigit乗を掛けて小数点位置をずらす
double rev2 = rev1 + adjust; // adjustの値を足す
int rev3 = (int)rev2; // 整数に型変換することで小数点以下をカット
double rev4 = (double)rev3; // doubleに戻す
double rev5 = rev4 / MathPow(10, digit); // 10のdigit乗で割って小数点位置を元に戻す
return rev5;
*/
}