This is due to precision limitations with float arithmetic... Read this -> https://www.mql5.com/en/articles/1561 for answers.
Yep, this situation has driven me nuts before too. My solution now is to always convert my numbers to integers whenever comparitive maths are to be involved. BidInPips = Bid/Point, etc.
int AskInPips=NormalizeDouble(Ask,Digits)/Point; int BidInPips=NormalizeDouble(Bid,Digits)/Point; if(AskInPips-BidInPips>3) Print("Spread is now ",AskInPips-BidInPips," pips);Then revert back to the floating point versions of the variable in question when you actually intend to do something with them like submit a trade order.
Thanks a lot, Gordon and Phillip !
I will try to fix right now the precission issue.
Roberto Valbuena
Spain
I will try to fix right now the precission issue.
Roberto Valbuena
Spain
double dPoint = MarketInfo ( Symbol () , MODE_POINT ) ;
double dAsk = MarketInfo ( Symbol () , MODE_ASK ) ;
double dBid = MarketInfo ( Symbol () , MODE_BID ) ;
int iAsk = MathRound ( dAsk / dPoint ) ;
int iBid = MathRound ( dBid / dPoint ) ;
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
I would like to ask for some help with a problem I have; I really can't figure out what is wrong with this code. I declare some variables, make a division with them and then, depending on the result, I want to perform some actions.
When I run the code I can see by the Print() statement that the result from the division is 1, but then, the if() statement is not executed. I guess it has something to do with data types, but can't understand what am I missing.
The code (simplified) goes like this:
// ---------------------------- Begin
double A, B;
Print(" (Bid - A) / B = ", (Bid - A) / B ); // And eventually this print the result as 1
if ( (Bid - A) / B == 1.0 ) ... // And this does not get executed
// ---------------------------- End
Initially I made the comparison to 1, instead of 1.0 but I changed it to 1.0 to make sure it was a double value; I have tried also to declare a double variable initialized to 1.0, but hasn't worked either.
Any help will be appreciated
Roberto Valbuena
Spain