Rounding up price values mql5
Math Utils
- www.mql5.com
Handy functions for comparison, rounding, formatting and debugging of doubles (prices, lots and money).
The link does not tell you how to do that, if i use
double Floorx= MathFloor(bid);
for GBP USD 1.38671 I get 1, but i want to tell the function to return 1.3800. How do I modify this to work for all symbols?
Build a MathRound Function that takes a parameter for the digits to consider. Then you can control the rounding process.
Other than that, use MathRound (>your value< * MathPow(10, >your digits<)) / MathPow(10, >your digits<)
Dominik Egert:
Can you give example code?
Build a MathRound Function that takes a parameter for the digits to consider. Then you can control the rounding process.
Other than that, use MathRound (>your value< * MathPow(10, >your digits<)) / MathPow(10, >your digits<)
Can't you read? I did.
#include <math_utils.mqh> void OnStart() { double price = 1.1796; PrintFormat("price = %.4f, Round down = %.4f, Round up = %.4f", price, RoundToDigitsDown(price, 2), RoundToDigitsUp(price, 2)); } // Output: // price = 1.1796, Round down = 1.1700, Round up = 1.1800
Peter Kaiza: How do toy round up or down price value to whole numbers in Mql5? for example:
MT4:NormalizeDouble - General - MQL5 programming forum #3.3 (2017.01.04) EUR/USD = price now: 1.1796;
Round up: = 1.1800
round down:=1.1700
How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum #2 (2017.05.19)
William Roeder:
MT4:NormalizeDouble - General - MQL5 programming forum #3.3 (2017.01.04)
How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum #2 (2017.05.19)
MT4:NormalizeDouble - General - MQL5 programming forum #3.3 (2017.01.04)
How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum #2 (2017.05.19)
Flawed!
#define PRINT( A) Print( #A + " = ", (A)) double MathNearest( double v, double to){ return to * MathRound(v / to); } double MathRoundDown(double v, double to){ return to * MathFloor(v / to); } double MathRoundUp( double v, double to){ return to * MathCeil( v / to); } void OnStart() { //--- testing edge cases for floor //--- MathFloor(lots / step) * step always fails this test. PRINT(MathRoundDown(2.26, 0.01)); //2.25 PRINT(MathRoundDown(18.15, 0.01)); //8.14 PRINT(MathRoundDown(-9.13, 0.01)); //-9.14 PRINT(MathRoundDown(-65.18, 0.01)); //-65.19 //--- testing edge cases for ceil //--- MathCeil(lots / step) * step always fails this test. PRINT(MathRoundUp(9.13, 0.01)); // 9.14 PRINT(MathRoundUp(65.18, 0.01)); // 65.19 PRINT(MathRoundUp(-2.26, 0.01)); //-2.25 PRINT(MathRoundUp(-18.15, 0.01)); //-18.14 }
Simple and naïve functions, they don't take care of floating point roundoff errors.
How do toy round up or down price value to whole numbers in Mql5? for example:
EUR/USD = price now: 1.1796;
Round up: = 1.1800
round down:=1.1700
USD/JPY: Price now= 109.45
Round up: = 110:00
round down:=109:00
Thanks.