Esempio n. 1
0
        public void UpdateSummary(string portfolio)
        {
            string[] list = new string[]
            {
                "Portfolio Investment",
                "Portfolio Return If Unchange",
                "Portfolio Current Return",
                "Portfolio Theta [day]"
            };

            foreach (string item in list)
            {
                bool    is_new = false;
                DataRow row    = SummaryTable.FindByCriteria(item);

                if (row == null)
                {
                    row    = SummaryTable.NewRow();
                    is_new = true;
                }

                row["Criteria"] = item;
                row["Total"]    = DBNull.Value;
                row["TotalPrc"] = DBNull.Value;

                if (is_new)
                {
                    SummaryTable.Rows.Add(row);
                }
                SummaryTable.AcceptChanges();
            }

            try
            {
                // get portfolio rows
                DataRow[] portfolio_rows = PortfolioTable.Select("PortfolioMembership LIKE '*" + portfolio + ",*'");

                // update net-investment
                double net_investment = 0;
                foreach (DataRow prw in portfolio_rows)
                {
                    net_investment += (double)prw["NetInvestment"];
                }
                DataRow row = SummaryTable.FindByCriteria(list[0]);
                if (row != null)
                {
                    row["Total"] = net_investment;
                }

                // update return-if-unchange
                double return_if_unchanged = 0;
                foreach (DataRow prw in portfolio_rows)
                {
                    return_if_unchanged += (double)prw["ReturnIfUnchange"];
                }
                row = SummaryTable.FindByCriteria(list[1]);
                if (row != null)
                {
                    row["Total"] = return_if_unchanged;
                    double prc = return_if_unchanged / net_investment;
                    if (double.IsNaN(prc))
                    {
                        row["TotalPrc"] = DBNull.Value;
                    }
                    else
                    {
                        row["TotalPrc"] = prc;
                    }
                    row["IsCredit"] = true;
                }

                // update current-return
                double current_return = 0;
                foreach (DataRow prw in portfolio_rows)
                {
                    current_return += (double)prw["CurrentReturn"];
                }
                row = SummaryTable.FindByCriteria(list[2]);
                if (row != null)
                {
                    row["Total"] = current_return;
                    double prc = current_return / net_investment;
                    if (double.IsNaN(prc))
                    {
                        row["TotalPrc"] = DBNull.Value;
                    }
                    else
                    {
                        row["TotalPrc"] = prc;
                    }
                    row["IsCredit"] = true;
                }

                // update total-theta
                double total_theta = 0;
                foreach (DataRow prw in portfolio_rows)
                {
                    if (!double.IsNaN((double)prw["TotalTheta"]))
                    {
                        total_theta += (double)prw["TotalTheta"];
                    }
                }
                row = SummaryTable.FindByCriteria(list[3]);
                if (row != null)
                {
                    row["Total"] = total_theta;
                    double prc = total_theta / net_investment;
                    if (double.IsNaN(prc))
                    {
                        row["TotalPrc"] = DBNull.Value;
                    }
                    else
                    {
                        row["TotalPrc"] = prc;
                    }
                    row["IsCredit"] = true;
                }
            }
            catch { }
        }