We have a panel that has buttons and a PositionDisplay control so it looks a bit similar to ChartTrader. We know to set the properties AveragePrice, Position, PnL, and PnLValue so PositionDisplay will display same info as found in ChartTrader.
We calculate PnL from inside our strategy then call ourPanel.SetPnL(calculatedPnL). The problem is when calculating value for PnL. It's correct when there's only one order but when there's more then it starts to differ by at least .125. We calculate pnl using:
Code:
(marketDataUpdate.Price - Position.AveragePrice) * Position.MarketPosition == MarketPosition.Long ? 1 : -1
We've tried the Points formula found here and looks like:
Code:
(1 for Long position, or -1 for short position) * Quantity * (Exit Price - Entry Price - Entry Commission - Exit Commission) / (Exit Rate * Point Value) / Lot Size
For Exit/Entry Price/Commision/Rate, we use OnExecutionUpdate(Execution execution, ...) handler to set vars _LastEntry/_LastExit, checking execution.IsEntry/IsExit before setting the vars.
PointValue = this.Instrument.MasterInstrument.PointValue
Lot Size = Account.ForexLotSize
but its result differs from what I see in ChartTrader.
And also by clicking on bottom part of PositionDisplay control it switches between calculation mode from points to pips, ticks, currency, percentage.
Is there a built-in calculate method that takes a CalculationMode parameter that one can call to calculate Profit and Loss? If not, how to properly calculate for those different calculation mode?