Пример #1
0
        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
                    }
                }
            }
        }