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.
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
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.