public void PnLTableUpdate() { if (dataGridViewPnL.InvokeRequired) { DelegateTables d = new DelegateTables(PnLTableUpdate); this.Invoke(d, new object[] { }); } else { // start date DateTime dateStart = PnLExplainStartDateSelector.Date.GetRoundDate(TenorUnit.Day); var dataStart = TSP.GetAllocationToTable(dateStart); // end date DateTime dateEnd = PnLExaplainEndDateSelector.Date.GetRoundDate(TenorUnit.Day); Dictionary <string, PnLElement> dataEnd; if (dateEnd == TSP.FXMH.LastRealDate_NoLive.Date) { dataEnd = TSP.GetLastAllocationToTable(); } else { dataEnd = TSP.GetAllocationToTable(dateEnd); } // Total Statistics double value1 = dataStart["Total"].Position - (dataStart["Total"].Deposit - dataStart["Total"].Withdrawal); double value2 = dataEnd["Total"].Position - (dataEnd["Total"].Deposit - dataEnd["Total"].Withdrawal); double AbsoluteValueChange = value2 - value1; double RelativeChange = AbsoluteValueChange / dataStart["Total"].Position; // fill rows dataGridViewPnL.Rows.Clear(); foreach (var key in dataStart.Keys) { PnLElement item = dataStart[key]; PnLElement item2 = dataEnd[key]; Currency ccy = CurrencyPorperties.FromNameToCurrency(key); if (ccy.IsNone()) { ccy = Fiat; } double depositNetTotal = Math.Round((item2.Deposit - item.Deposit) - (item2.Withdrawal - item.Withdrawal), 2); double realizedPnLChange = item2.RealizedPnL - item.RealizedPnL; double onGoingPnLChange = item2.OnGoingPnL - item.OnGoingPnL + realizedPnLChange; if (key != "Total") { dataGridViewPnL.Rows. Add(key, // Ccy item.Presentation_Position(ccy), // Position item.Presentation_XChangeRate(ccy), // Rate PercentageToString(item.Weight), // Weight PercentageToString(item2.Position / item.Position - 1), // Delta Pos. PercentageToString(item2.xChangeRate / item.xChangeRate - 1), // Delta Rate Math.Round(onGoingPnLChange, 2), // Delta On Going PnL Math.Round(realizedPnLChange, 2), // Delta Realizes PnL depositNetTotal); // Deposit Net Total } else { dataGridViewPnL.Rows. Add(key, // Ccy item.Presentation_Position(ccy), // Total 0, // 0 PercentageToString(item.Weight), // Weight (100%) Math.Round(AbsoluteValueChange, 2), // Delta Pos. (Total Absolute Change) PercentageToString(RelativeChange), // Delta Rate (Total Relative Change) Math.Round(onGoingPnLChange, 2), // Delta On Going PnL Math.Round(realizedPnLChange, 2), // Delta Realized PnL depositNetTotal); // Deposit Net Total } } } }