Пример #1
0
 private void _AddReturnInfoToDgvReturn(ReturnInfo info)
 {
     dgvReturn.Rows.Add();
     DataGridViewRow newRow = dgvReturn.Rows[dgvReturn.Rows.Count - 1];
     newRow.Cells["colRCode"].Value = info.code;
     newRow.Cells["colREarning"].Value = info.earning;
     newRow.Cells["colRBreakEven"].Value = (!double.IsNaN(info.breakEven)) ? (object)info.breakEven : (object)"N/A";
     newRow.Cells["colRROI"].Value = info.ROI * 100;
 }
Пример #2
0
        private void _UpdateDgvReturn()
        {
            dgvReturn.Rows.Clear();
            SortedDictionary<string, ReturnInfo> returnInfo = new SortedDictionary<string, ReturnInfo>();
            foreach (string code in _prevBalance.Keys)
            {
                returnInfo.Add(code, new ReturnInfo(code));
            }
            foreach (string code in _prevBalanceFuture.Keys)
            {
                if (!returnInfo.ContainsKey(code))
                    returnInfo.Add(code, new ReturnInfo(code));
            }
            foreach (string code in _netTran.Keys)
            {
                if (!returnInfo.ContainsKey(code))
                    returnInfo.Add(code, new ReturnInfo(code));
            }
            foreach (string code in _netTranFurture.Keys)
            {
                if (!returnInfo.ContainsKey(code))
                    returnInfo.Add(code, new ReturnInfo(code));
            }

            ReturnInfo totalReturn = new ReturnInfo("TOTAL");
            totalReturn.breakEven = double.NaN;
            List<double> allPayments = new List<double>();
            List<DateTime> allDates = new List<DateTime>();
            foreach (KeyValuePair<string, ReturnInfo> kwpRet in returnInfo)
            {
                Transaction curPrevBalance, curNetTran, curPostBalance;
                FutureTransaction curNetTranFuture;
                SortedDictionary<string, FutureTransaction> curBalanceFutureDct;
                List<double> payments = new List<double>();
                List<DateTime> dates = new List<DateTime>();
                if (_prevBalance.TryGetValue(kwpRet.Key, out curPrevBalance))
                {
                    kwpRet.Value.earning += curPrevBalance.payment;
                    payments.Add(curPrevBalance.payment);
                    dates.Add(curPrevBalance.date);
                    allPayments.Add(curPrevBalance.payment);
                    allDates.Add(curPrevBalance.date);
                }
                if (_prevBalanceFuture.TryGetValue(kwpRet.Key, out curBalanceFutureDct))
                {
                    foreach (FutureTransaction ft in curBalanceFutureDct.Values)
                    {
                        kwpRet.Value.earning += ft.payment;
                        payments.Add(ft.payment);
                        dates.Add(ft.date);
                        allPayments.Add(ft.payment);
                        allDates.Add(ft.date);
                    }
                }
                if (_netTran.TryGetValue(kwpRet.Key, out curNetTran))
                {
                    kwpRet.Value.earning += curNetTran.payment;
                    foreach (Transaction t in _tranDct[kwpRet.Key])
                    {
                        payments.Add(t.payment);
                        dates.Add(t.date);
                        allPayments.Add(t.payment);
                        allDates.Add(t.date);
                    }
                }
                if (_netTranFurture.TryGetValue(kwpRet.Key, out curNetTranFuture))
                {
                    kwpRet.Value.earning += curNetTranFuture.payment;
                    foreach (List<FutureTransaction> ftLst in _tranFutureDct[kwpRet.Key].Values)
                    {
                        foreach (FutureTransaction ft in ftLst)
                        {
                            payments.Add(ft.payment);
                            dates.Add(ft.date);
                            allPayments.Add(ft.payment);
                            allDates.Add(ft.date);
                        }
                    }
                }
                if (_postBalanceFuture.TryGetValue(kwpRet.Key, out curBalanceFutureDct))
                {
                    foreach (FutureTransaction ft in curBalanceFutureDct.Values)
                    {
                        kwpRet.Value.earning += ft.payment;
                        payments.Add(ft.payment);
                        dates.Add(ft.date);
                        allPayments.Add(ft.payment);
                        allDates.Add(ft.date);
                    }
                }
                if (_postBalance.TryGetValue(kwpRet.Key, out curPostBalance))
                {
                    kwpRet.Value.breakEven = kwpRet.Value.earning / curPostBalance.amount;
                    kwpRet.Value.earning += curPostBalance.payment;
                    payments.Add(curPostBalance.payment);
                    dates.Add(curPostBalance.date);
                    allPayments.Add(curPostBalance.payment);
                    allDates.Add(curPostBalance.date);
                }
                else
                    kwpRet.Value.breakEven = double.NaN;
                kwpRet.Value.ROI = Him.Financial.Financial.XIRR(payments.ToArray(), dates.ToArray());
                totalReturn.earning += kwpRet.Value.earning;
            }
            totalReturn.ROI = Him.Financial.Financial.XIRR(allPayments.ToArray(), allDates.ToArray());
            foreach (ReturnInfo info in returnInfo.Values)
                _AddReturnInfoToDgvReturn(info);
            _AddReturnInfoToDgvReturn(totalReturn);
            dgvReturn.Rows[dgvReturn.Rows.Count - 1].DefaultCellStyle.BackColor = Color.LightPink;
        }