Product Validation fail MQL5 only. [Invalid Stops] - page 4

 
Fernando Carreiro #:

By the way here are the equivalent requirements for MQL4 ... https://book.mql4.com/appendix/limits

Requirements and Limitations in Making Trades

Tables below show calculation values that limit the conduction of trades when opening, closing, placing, deleting or modifying orders.

To get the minimum distance to StopLevel and freezing distance FreezeLevel the MarketInfo() function should be called.


Requirements.

Correct prices used when performing trade operations.
Order Type
Open Price
Close Price
Open Price of a Pending Order
Transforming a Pending Order into aMarket Order
Buy
Ask
Bid


Sell
Bid
Ask


BuyLimit


Below the current Ask price
Ask price reaches open price
SellLimit


Above the current Bid price
Bid price reaches open price
BuyStop


Above the current Ask price
Ask price reaches open price
SellStop


Below the current Bid price
Bid price reaches open price

The possibility of deleting a pending order is regulated by the FreezeLevel parameter.


StopLevel Minimum Distance Limitation.

A trade operation will not be performed if any of the following conditions is disrupted.

Order Type
Open Price StopLoss (SL) TakeProfit (TP)
Buy
Modification is prohibited
Bid-SL StopLevel TP-Bid StopLevel
Sell
Modification is prohibited SL-Ask StopLevel Ask-TP StopLevel
BuyLimit
Ask-OpenPriceStopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellStop
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

FreezeLevel Limitation (Freezing Distance).

Market orders can not be closed if the StopLoss and TakeProfit values violate the FreezLevel parameter requirements.
StopLoss or TakeProfit orders can not be modified if StopLoss or TakeProfit values violate the StopLevel parameter requirements.
Pending orders can not be deleted or modified if the declared open price violates the FreezeLevel parameter requirements.

Order Type
Open Price StopLoss (SL) TakeProfit (TP)
Buy
Modification is prohibited Bid-SL > FreezeLevel TP-Bid > FreezeLevel
Sell
Modification is prohibited SL-Ask > FreezeLevel Ask-TP > FreezeLevel
BuyLimit
Ask-OpenPrice > FreezeLevel Regulated by the StopLevel parameter
Regulated by the StopLevel parameter
SellLimit
OpenPrice-Bid > FreezeLevel Regulated by the StopLevel parameter Regulated by the StopLevel parameter
BuyStop
OpenPrice-Ask > FreezeLevel Regulated by the StopLevel parameter Regulated by the StopLevel parameter
SellStop
Bid-OpenPrice > FreezeLevel Regulated by the StopLevel parameter Regulated by the StopLevel parameter

Hi Fernando,

Are  freeze and stop levels changing while a position is open, or are they constant? In other words, do I need to run SymbolInforInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL) every time I change SL (or TP), or could I compute it just once and save it in a global variable?

thank you