I would like to Enter the trade and then have the 1st Pyramid order occur at the next Bid with a multiple of 20pips.
Example:
Entry 1.3315 then (Pyramid at next Bid with 20pip multiple after entry)
1st Pyramid occurs at 1.3320 (5 Pips from Entry in this example , but varies depending on when the entry criteria triggers the entry order,so could be more or less then 5pips )
2nd Pyramid at 1.3340
then each subsequent pyrmaids will be every 20 pips .etc
As th 1st Pyramid is not set from the entry price and fluctuates I am finding it difficult to choose the best way to code this,
Does anyone know how I can find the next Bid multiple of 20pips from the entry price ?
You can use MathMod() so . . .
double PyramidStep = 0.0020; double NextStep; NextStep = Bid - MathMod(Bid, PyramidStep) + PyramidStep; // 1st step above Bid
. . . but MathMod() doesn't always work so you should really code your own version: https://www.mql5.com/en/forum/129832
int StepPips = 20; double NextStep = MathFloor( Bid / pips2dbl + StepPips) * pips2dbl;
Thanks,Raptouk and WHRoeder, I'll look both.
You can use MathMod() so . . .
. . . but MathMod() doesn't always work so you should really code your own version: https://www.mql5.com/en/forum/129832
Function to replace MathMod presented in the thread specified is not correct :
double MathModCorrect(double a, double b) { int tmpres=a/b; return(a-tmpres*b); }
for a=1.25500 and b=0.0005 give :
2013.02.21 12:47:17 tst EURUSD,H1: a = 1.25500 tmpres = 2509 tmpres*b = 1.25450
This does not solve the problem of MathMod.
Function to replace MathMod presented in the thread specified is not correct :
for a=1.25500 and b=0.0005 give :
This does not solve the problem of MathMod.
Just tested this, you are correct, one day I will remember to check proposed solutions from every source not just the ones that I think need checking.
Try this . . .
double MathModCorrect(double a, double b) { double Power = MathPow(10, Digits); double RoundUp = 4.9 / (Power * 10); a = MathRound( Power * ( a + RoundUp ) ) ; b = MathRound( Power * ( b + RoundUp ) ) ; int tmpres = a / b; return( (a - tmpres * b) / Power ); }
Try this . . .
Not much time to test, but seem correct to me. Thank you RaptorUk.
Not much time to test, but seem correct to me. Thank you RaptorUk.
Try this . . .
The function proposed by RaptorUK doesn't work in all cases. The problem comes from Digits (for example if Digits is 1).
If the RoundUp value is too close to a or b , you will get wrong result.
As I only used this function with positive numbers, I use this simple function :
double CustomMathMod(double dividend,double divisor) { return(dividend-int(dividend/divisor)*divisor); }

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I would like to Enter the trade and then have the 1st Pyramid order occur at the next Bid with a multiple of 20pips.
Example:
Entry 1.3315 then (Pyramid at next Bid with 20pip multiple after entry)
1st Pyramid occurs at 1.3320 (5 Pips from Entry in this example , but varies depending on when the entry criteria triggers the entry order,so could be more or less then 5pips )
2nd Pyramid at 1.3340
then each subsequent pyrmaids will be every 20 pips .etc
As th 1st Pyramid is not set from the entry price and fluctuates I am finding it difficult to choose the best way to code this,
Does anyone know how I can find the next Bid multiple of 20pips from the entry price ?
I could only think of excel functions , No.s ending in 20. """"20.
Have it cycle through a list of Bid prices 1.2980,1.3300,1.3320, (The list of at least 200 numbers).
Thanks