oops!! sorry pushed the add button too early.
At the point where the print statement is I get in the log
IS 0 StaticEA (EURUSD,M15) 16:59:01 target 652630.0 - position = 0.0 = 652630.0 > 600
So the value of position is showing zero and the if statement will be true causing my divide by zero error in the nest line of code
CN 2 StaticEA (EURUSD,M15) 16:59:01 zero divide in 'StaticEA.mq5' (107,113)
Hi BigAl,
1. Next time when posting code, please use SRC button till succeed.
2. You ask for advice by only showing partial of the code, you may get the answer but may not what you want
if (target > position && position > 0) { ... }
Note that this debug info indicates error in line 107 column 113 of StaticEA.mq5, so please copy and paste this one (identify it to be analysed here) or just double check it if there is some variable that assumes division by zero value.
zero divide in 'StaticEA.mq5' (107,113)
![Documentation on MQL5: MQL5 programs / Runtime Errors Documentation on MQL5: MQL5 programs / Runtime Errors](/i/community/logo_mql5_small.png)
- www.mql5.com
Hi BigAl,
1. Next time when posting code, please use SRC button till succeed.
2. You ask for advice by only showing partial of the code, you may get the answer but may not what you want
Ok thanks for the advice - just thought it may be easier to just provide the relevant code snippet.
Your suggestion will overcome the problem, but why does it sometimes give position a value of zero - is my code incorrect (or not correct enough?) please
Note that this debug info indicates error in line 107 column 113 of StaticEA.mq5, so please copy and paste this one (identify it to be analysed here) or just double check it if there is some variable that assumes division by zero value.
Thanks for the info - source code line is 107
position = MathRound(position * 100)/100;
where does column 113 show? is this from the source (not 113 columns) or from the logs somewhere?
Also do you know what the first 2 columns in the log mean?
Thanks
Thanks for the info - source code line is 107
position = MathRound(position * 100)/100;
where does column 113 show? is this from the source (not 113 columns) or from the logs somewhere?
Also do you know what the first 2 columns in the log mean?
Thanks
Hi BigAl, looks like some C++ collateral effect since you are using a constant as denominator.
Note that in your Print debug line the position value looks Null, and is not show (for example, we are expecting target TTT - position PPP = ...., but PPP is void in this Print)
IS 0 StaticEA (EURUSD,M15) 16:59:01 target 652630.0 - position = 0.0 = 652630.0 > 600
So if position is Null maybe this divide by zero is a MathRound error return and you have to solve and identify why position is Null when running this line.
Please post more code, like position declaration and other position variable operation before this Print to help we analyse it.
Hi BigAl, looks like some C++ collateral effect since you are using a constant as denominator.
Note that in your Print debug line the position value looks Null, and is not show (for example, we are expecting target TTT - position PPP = ...., but PPP is void in this Print)
So if position is Null maybe this divide by zero is a MathRound error return and you have to solve and identify why position is Null when running this line.
Please post more code, like position declaration and other position variable operation before this Print to help we analyse it.
Hi BigAl, looks like some C++ collateral effect since you are using a constant as denominator.
Note that in your Print debug line the position value looks Null, and is not show (for example, we are expecting target TTT - position PPP = ...., but PPP is void in this Print)
So if position is Null maybe this divide by zero is a MathRound error return and you have to solve and identify why position is Null when running this line.
Please post more code, like position declaration and other position variable operation before this Print to help we analyse it.
Hi again, have another divide by zero error. please see the associated code, expert log and journal below. Is this something to do with floating point maybe?
expert log last few ticks:
EK 0 StaticEA (EURUSD,M15) 16:58:57 After select = true
NF 0 StaticEA (EURUSD,M15) 16:58:57 After position = 652426.21
PN 0 StaticEA (EURUSD,M15) 16:58:57 After rounding 652426.21
MI 0 StaticEA (EURUSD,M15) 16:58:57 After normalise = 652426.21
DL 0 StaticEA (EURUSD,M15) 16:59:00 After select = true
MG 0 StaticEA (EURUSD,M15) 16:59:00 After position = 0.0
CO 0 StaticEA (EURUSD,M15) 16:59:00 After rounding 0.0
FK 0 StaticEA (EURUSD,M15) 16:59:00 After normalise = 0.0
HO 0 StaticEA (EURUSD,M15) 16:59:00 After select = true
QJ 0 StaticEA (EURUSD,M15) 16:59:00 After position = 0.0
OS 0 StaticEA (EURUSD,M15) 16:59:00 After rounding 0.0
RG 0 StaticEA (EURUSD,M15) 16:59:00 After normalise = 0.0
PL 0 StaticEA (EURUSD,M15) 16:59:00 target 652630.0 - position = 0.0 = 652630.0 > 600
OK 2 StaticEA (EURUSD,M15) 16:59:00 zero divide in 'StaticEA.mq5' (115,113)
journal log last few entries previous day
PL 0 Network 03:03:35 '20037049': scanning network for access points
QK 0 Network 03:03:38 '20037049': scanning network finished
RR 0 Trades 12:25:12 '20037049': exchange buy 0.01 EURUSD at market
HE 0 Trades 12:25:12 '20037049': order #23830852 buy 0.01 / 0.01 EURUSD at 1.29618 done
KD 0 Trades 12:25:12 '20037049': deal #17349090 buy 0.01 EURUSD at 1.29618 done (based on order #23830852)
KO 0 Trades 14:50:26 '20037049': exchange sell 0.01 EURUSD at market
IK 0 Trades 14:50:26 '20037049': order #23832912 sell 0.01 / 0.01 EURUSD at 1.29622 done
KI 0 Trades 14:50:26 '20037049': deal #17350297 sell 0.01 EURUSD at 1.29622 done (based on order #23832912)
GD 0 Network 15:03:35 '20037049': scanning network for access points
CR 0 Network 15:03:37 '20037049': scanning network finished
LE 0 Experts 16:59:00 expert StaticEA (EURUSD,M15) removed
HL 0 Network 21:03:35 '20037049': scanning network for access points
LJ 0 Network 21:03:37 '20037049': scanning network finished
today
PL 0 Network 03:03:35 '20037049': scanning network for access points
QK 0 Network 03:03:38 '20037049': scanning network finished
PositionSelect(_Symbol); Print("After select = ", PositionSelect(_Symbol)); position = myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000; Print("After position = ", position); position = MathRound(position * 100)/100; Print("After rounding ", position); NormalizeDouble(position, 2); Print("After normalise = ", position); if (target > position) { if (target - position < 600) return; Print("target ", target, " - position = ", position, " = ", target - position, " > 600"); Print("target - position = ", target - position, " / ask ", myprice.ask, " = ", (target - position)/myprice.ask); Print("(target - position) / myprice.ask / 1000 = ", (target - position) / myprice.ask / 1000); Print("(target = position) / myprice.ask / 1000 / 100 = ", (target - position) / myprice.ask / 1000 / 100); Print("Rounded = ", MathRound((target - position)/myprice.ask/1000) / 100); newvolume = MathRound((target - position)/myprice.ask/1000) / 100;
from the above you can see that the position select stays true, no trades are done yet within 3 seconds the position calculation after the select changes from 652426.21 to zero.
It is as if the server is busy and returns the PositionGetDouble(POSITION_VOLUME) as zero. So i will add that as a print check while waiting for your response.
![Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Position Properties Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Position Properties](/i/community/logo_mql5_small.png)
- www.mql5.com
Hi BigAl, looks like some C++ collateral effect since you are using a constant as denominator.
Note that in your Print debug line the position value looks Null, and is not show (for example, we are expecting target TTT - position PPP = ...., but PPP is void in this Print)
So if position is Null maybe this divide by zero is a MathRound error return and you have to solve and identify why position is Null when running this line.
Please post more code, like position declaration and other position variable operation before this Print to help we analyse it.
Print(" mypsice.ask ", myprice.ask, " * Volume ", PositionGetDouble(POSITION_VOLUME), " * 100000 = ", myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000); position = myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000;
when these code lines are executed myprice.ask is returning 0.0 sometimes
GG 0 StaticEA (EURUSD,M15) 17:03:57 position = 0.0 - target 652630.0 = -652630.0 > 600
can you explain why myprice.ask does this. is it a bug or some sort of restriction I am not aware of?
![Get in touch with developers using Service Desk! Get in touch with developers using Service Desk!](/i/community/logo_mql5_small.png)
- www.mql5.com
Hi BigAl,
1. Next time when posting code, please use SRC button till succeed.
2. You ask for advice by only showing partial of the code, you may get the answer but may not what you want
Print(" myprice.ask ", myprice.ask, " * Volume ", PositionGetDouble(POSITION_VOLUME), " * 100000 = ", myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000); position = myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000;
when these code lines are executed myprice.ask is returning 0.0 sometimes
GG 0 StaticEA (EURUSD,M15) 17:03:57 position = 0.0 - target 652630.0 = -652630.0 > 600
can you explain why myprice.ask does this. is it a bug or some sort of restriction I am not aware of?
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
MqlTick myprice;
MqlTradeRequest myrequest;
MqlTradeResult myresult;
ZeroMemory(myrequest);
myrequest.action = TRADE_ACTION_DEAL;
myrequest.sl = 0;
myrequest.tp = 0;
myrequest.symbol = _Symbol;
myrequest.magic = 0;
myrequest.type_filling = ORDER_FILLING_FOK;
myrequest.deviation = 10;
/* body of my code here
segment causing problem is here. The lot size is around 5 lots (4.98 - 5.02) does not seem to matter
*/
PositionSelect(_Symbol);
position = myprice.ask * PositionGetDouble(POSITION_VOLUME) * 100000;
position = MathRound(position * 100)/100;
NormalizeDouble(position, 2);
if (target > position)
{
if (target - position < 600) return;
Print("target ", target, " - position ", position, " = ", target - position, " > 600");