Detecting a 'round number' (00's, 50's) between two values without lots of iterations pip by pip

 

Hi,

I am trying to write a function that returns a round number if it's present between two values;

e.g.

1.66500

1.67000

1.67500

I want the funtion to take two price value and then return the round number between these values.

I have already written this function

-----------------------------------------------

string roundNumbers (double p){

string price,substr;

if ( MarketInfo(Symbol(),MODE_DIGITS)==5)
{
price=DoubleToStr(p,5); // convert to string
substr=StringSubstr(price,4,2);
return (substr); // returns 00,50, or anything else
}
if ( MarketInfo(Symbol(),MODE_DIGITS)==3)
{
price=DoubleToStr(p,3); // convert to string
substr=StringSubstr(price,4,2);
return (substr); // returns 00,50, or anything else
}
}

-------------------------------------------

and then i can call if with something like;

if ((roundNumbers (1.68773)=="00"){ Print ("This is not a round number");}

but I'm not really there yet. The problem being is that I can see a way to do it by having an iterative loop between two value that iterated pip by pip and each time calls this function, but I am playing to scan mulitple currencies, and time frames simultaneoulsy and that to me seems like a hell of a lot of looping! Please help - James

 
jamesmql88 wrote >>

Hi,

I am trying to write a function that returns a round number if it's present between two values;

e.g.

1.66500

1.67000

1.67500

I want the funtion to take two price value and then return the round number between these values.

I have already written this function

-----------------------------------------------

string roundNumbers (double p){

string price,substr;

if ( MarketInfo(Symbol(),MODE_DIGITS)==5)
{
price=DoubleToStr(p,5); // convert to string
substr=StringSubstr(price,4,2);
return (substr); // returns 00,50, or anything else
}
if ( MarketInfo(Symbol(),MODE_DIGITS)==3)
{
price=DoubleToStr(p,3); // convert to string
substr=StringSubstr(price,4,2);
return (substr); // returns 00,50, or anything else
}
}

-------------------------------------------

and then i can call if with something like;

if ((roundNumbers (1.68773)=="00"){ Print ("This is not a round number");}

but I'm not really there yet. The problem being is that I can see a way to do it by having an iterative loop between two value that iterated pip by pip and each time calls this function, but I am playing to scan mulitple currencies, and time frames simultaneoulsy and that to me seems like a hell of a lot of looping! Please help - James

if you use the search box in top right of this page you will find for example https://www.mql5.com/en/forum/118820 :-)

 
EADeveloper wrote >>

if you use the search box in top right of this page you will find for example https://www.mql5.com/en/forum/118820 :-)

Thankyou, I'll check that out.

 
double rounded.above = MathCeil( Bid / 100)*100,
       rounded.below = MathFloor(Bid / 100)*100;

Extended discussion (in Russian) at Hunting Foot

Code at BHS system

Reason: