How to calculate OrderProfit()?

 

Sombody tell me I can use the below calculation formula get the value of OrderProfit()


(OrderClosePrice()-OrderOpenPrice())*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)/Point

So I test it in a EA file.

        profit=OrderProfit();

       Calprofit=(OrderClosePrice()-OrderOpenPrice())*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)/Point;

       Print(TimeCurrent(),":","close",OrderTicket(),",","Profit="+profit,",","CalProfit="+Calprofit);


But I found in the result log file, the profit is not equal Calprofit.

Is there something wrong?

Hope can get your help, thanks a lot!

 
There are costs that are not considered by OrderProfit() - read the reference, you'll find it there!
 
MarketInfo(OrderSymbol(),MODE_TICKVALUE)/Point;

There is Tick, PIP, and Point. They are all different in general. A tick is the smallest change of price. A Point is the least significant digit quoted. In currencies a pip is defined as 0.0001 (or for JPY 0.01)

On a 4 digit broker a point (0.0001) = pip (0.0001). [JPY 0.01 == 0.01] On a 5 digit broker a point (0.00001) = 1/10 pip (0.00010/10). Just because you quote an extra digit doesn't change the value of a pip. (0.0001 == 0.00010) EA's must adjust pips to points (for mq4.) In currencies a tick is a point. Price can change by least significant digit (1.23456 -> 1.23457)

In metals a Tick is still the smallest change but is larger than a point. If price can change from 123.25 to 123.50, you have a TickSize of 0.25 and a point of 0.01. Pip has no meaning.

This is why you don't use TickValue by itself. Only as a ratio with TickSize. See DeltaValuePerLot()

Reason: