Download MetaTrader 5

Checking if Trade is closed on stoploss or takeprofit

To add comments, please log in or register
bluestacks
58
bluestacks 2016.01.11 12:57 

Hi,

I would like to ask if someone has already tried to accurately check if a certain trade is closed by stoploss or takeprofit. I have a function that deals with this but its not that accurate because it checks the orderhistory then checks the comment if it has "tp" or "sl" on it but the problem with that one is i want to have a specific trade that if that trade will be closed either sl or tp, it will open another trade.


Thanks...

whroeder1
14737
whroeder1 2016.01.11 15:50  
  1. Some brokers modify comment with tp/sl; others do not. Not a good idea, brokers can change comments, including complete replacement.
  2. There is no accurate way to check; you can guess if the close price is closer to TP vs SL but orders can also be closed by other means.
  3. if that trade will be closed either sl or tp
    Makes no sense; the future is unknown.
ffoorr
1046
ffoorr 2016.01.12 13:38  

There is a fonction which indicate how the orders was closed, in this article :

https://www.mql5.com/en/articles/1399

whroeder1
14737
whroeder1 2016.01.12 15:33  
ffoorr: There is a fonction which indicate how the orders was closed,

If you had bothered to read the article all it does is detect a change in orders (pending to open, closed or deleted)

Nothing there is about SL/TP

Carl Schreiber
6670
Carl Schreiber 2016.01.12 16:26  

Well to me this problem is quite easy to solve:

1) define a 3-dim. array (double): {ticket,sl,tp,...}

2) if you open a new pos enter ticket, sl and tp.

3) If it was closed compare the exit price against sl and tp...

- Or you directly compare the OrderClosePrice() against OrderStoppLoss() and OrderTakeProfit()

honest_knave
Moderator
2400
honest_knave 2016.01.13 08:28  

A couple of complications to consider:

  • Slippage
  • Manually closing an order near to a TP or SL

ffoorr
1046
ffoorr 2016.01.13 09:01  
gooly:

Well to me this problem is quite easy to solve:

1) define a 3-dim. array (double): {ticket,sl,tp,...}

2) if you open a new pos enter ticket, sl and tp.

3) If it was closed compare the exit price against sl and tp...

- Or you directly compare the OrderClosePrice() against OrderStoppLoss() and OrderTakeProfit()


Gooly, this method is also indicated in the comments of the article,


whroeder, yes, the fonction do indicate if the order were closed by SL or TP, see the expert provided with the article

honest_knave
Moderator
2400
honest_knave 2016.01.13 09:20  

But yet I feel we're still only making a good approximation of whether the trade was closed by SL or TP.

AFAIK, there is no way to tell definitively (using MQL) what method was used to close an order.

IIRC, the order history shows a color change if the close price was at TP (green) or SL (red) but I don't think there is a way to access that directly from MQL.

ffoorr
1046
ffoorr 2016.01.13 09:43  

the easy way seem to be this one :


if ( MathAbs( OrderClosePrice() - OrderStopLoss() ) < Point ) // closed by SL
if ( MathAbs( OrderClosePrice() - OrderTakeProfit() ) < Point ) // closed by TP
https://www.mql5.com/en/articles/1399

honest_knave
Moderator
2400
honest_knave 2016.01.13 09:44  

Unfortunately it still isn't conclusive.

What if the trade was manually closed within a point on the SL or TP?

What if the trade was closed by SL or TP but the slippage was more than a point?

ffoorr
1046
ffoorr 2016.01.13 09:54  

MT4 program is encapsuled, no one know what the program do,

May be it work you will have to test to know.  ;-))

123
To add comments, please log in or register