Hi,
I recived the message Stop Loss invalid:
2020.09.14 22:47:26.559 2020.09.01 09:04:04 failed modify #306 buy 5 WINV20 sl: 100470, tp: 100490 -> sl: 100472, tp: 100490 [Invalid stops]
2020.09.14 22:47:26.559 2020.09.01 09:04:04 CTrade::OrderSend: modify WINV20 (sl: 100472, tp: 100490) [invalid stops]
2020.09.14 22:47:26.559 2020.09.01 09:04:04 TrailingStop - com falha. ResultRetcode: 10016, RetcodeDescription: invalid stops
In market of my country the price is mutliple 5, and sl: 100472 is wrong , the correct is 100470
What do I need to change in this code:
Hi Silverveins, perhaps variable "stepTS" is not multiple of 5. You may "Print" that variable or debug it before executing "positionModify" to confirm my suggestion. I can't see in your source code how did you setup "stepTS". If it was a constant, then it's easy, just make it a multiple of 5. If you calculate or obtain "stepTS" otherwise, you may need to "round it" to the nearest multiple of 5. In MT4 I would suggest recalculating stepTS at the begining of your TrailingStop routine as follows:
stepTS = MathRound(stepTS / 5.0) * 5.0;
-
Floating point has infinite number of decimals, it's your not understanding floating point and that some numbers can't be represented exactly. (like 1/10.)
Double-precision floating-point format - Wikipedia, the free encyclopedia -
Print out your values to the precision you want with DoubleToString - Conversion Functions - MQL4 Reference.
-
SL/TP (stops) need to be normalized to tick size (not Point) — code fails on metals. (On 5Digit Broker Stops are only allowed to be placed on full pip values. How to find out in mql? - MQL4 programming forum) and abide by the limits Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - MQL4 programming forum
-
Open price for pending orders need to be adjusted. On Currencies, Point == TickSize, so you will get the same answer, but it won't work on Metals. So do it right: Trailing Bar Entry EA - MQL4 programming forum or Bid/Ask: (No Need) to use NormalizeDouble in OrderSend - MQL4 programming forum
-
Lot size must also be adjusted to a multiple of LotStep and check against min and max. If that is not a power of 1/10 then NormalizeDouble is wrong. Do it right.
-
MathRound() and NormalizeDouble() are rounding in a different way. Make it explicit.
MT4:NormalizeDouble - MQL5 programming forum
How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum - Prices you get from the terminal are already normalized.
- PIP, Point, or Tick are all different in general.
What is a TICK? - MQL4 programming forum 2014.08.03

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi,
I recived the message Stop Loss invalid:
2020.09.14 22:47:26.559 2020.09.01 09:04:04 failed modify #306 buy 5 WINV20 sl: 100470, tp: 100490 -> sl: 100472, tp: 100490 [Invalid stops]
2020.09.14 22:47:26.559 2020.09.01 09:04:04 CTrade::OrderSend: modify WINV20 (sl: 100472, tp: 100490) [invalid stops]
2020.09.14 22:47:26.559 2020.09.01 09:04:04 TrailingStop - com falha. ResultRetcode: 10016, RetcodeDescription: invalid stops
In market of my country the price is mutliple 5, and sl: 100472 is wrong , the correct is 100470
What do I need to change in this code: