Example #1
0
        private void updateFundReport(DataRow rowShare, DataRow rowAsset, SeriesFundReport r, bool useAssetReportDate)
        {
            MutualFundReport rpt = new MutualFundReport();

            if (rowShare != null)
            {
                rpt.PublishDate = DataManager.ConvertToDate(rowShare[C_ColName_DeclareDate]);
                rpt.ReportDate  = DataManager.ConvertToDate(rowShare[C_ColName_PublishDate]);

                rpt.TotalShare = DataManager.ConvertToDouble(rowShare[C_ColName_FundShare]) * 10000;        //单位:份
            }

            if (rowAsset != null)
            {
                if (useAssetReportDate)
                {
                    rpt.PublishDate = DataManager.ConvertToDate(rowAsset[C_ColName_PublishDate]);
                    rpt.ReportDate  = DataManager.ConvertToDate(rowAsset[C_ColName_ReportDate]);
                }

                rpt.TotalNetAsset    = DataManager.ConvertToDouble(rowAsset[C_ColName_FundNetAsset]);       //单位:元
                rpt.TotalEquityAsset = DataManager.ConvertToDouble(rowAsset[C_ColName_FundEquityAsset]);    //单位:元
                rpt.TotalBondAsset   = DataManager.ConvertToDouble(rowAsset[C_ColName_FundBondAsset]);      //单位:元

                rpt.ConvertableBondAsset = DataManager.ConvertToDouble(rowAsset[C_ColName_FundCBAsset]);    //单位:元
                rpt.PureBondAsset        = rpt.TotalBondAsset - rpt.ConvertableBondAsset;                   //单位:元
            }

            rpt.TradeDate = rpt.PublishDate;
            r.OriginalTimeSeries.Add(rpt);
        }
Example #2
0
        public MutualFund GetWholeFund()
        {
            if (base.SecurityHoldings == null || base.SecurityHoldings.Count == 0)
            {
                return(null);
            }

            WholeFund      = new MutualFund("");
            WholeFund.Name = "基金组中包含的所有基金组成的整体";
            WholeFund.SetDatePeriod(base.TimeSeriesStart, base.TimeSeriesEnd);

            #region 构造整体基金的累计净值序列
            //==========================
            //计算公式:
            //  NAVw = Sum(NAVi * SHAREi)/Sum(SHAREi)
            //==========================
            try
            {
                WholeFund.TradingNAV.TradingDates       = ((MutualFund)base.SecurityHoldings[0]).TradingNAV.TradingDates;
                WholeFund.TradingNAV.InsideSampleLength = ((MutualFund)base.SecurityHoldings[0]).TradingNAV.InsideSampleLength;
                WholeFund.TradingNAV.AdjustedTimeSeries = new List <ATimeItem>();
                WholeFund.FundReport.AdjustedTimeSeries = new List <ATimeItem>();

                //计算净值
                for (int i = 0; i < WholeFund.TradingNAV.TradingDates.Count; i++)
                {
                    NetAssetValue NAVw = new NetAssetValue();
                    NAVw.TradeDate = WholeFund.TradingNAV.TradingDates[i];
                    NAVw.IsTrading = true;

                    MutualFundReport RPTw = new MutualFundReport();
                    RPTw.TradeDate  = NAVw.TradeDate;
                    RPTw.ReportDate = new DateTime(1900, 1, 1);
                    RPTw.IsTrading  = true;

                    //SecurityHoldings[0]的时间序列可能不够长,不能在此处使用
                    //NAVw.IsOutsideSamplePeriod = ((MutualFund)base.SecurityHoldings[0]).TradingNAV.AdjustedTimeSeries[i].IsOutsideSamplePeriod;

                    foreach (MutualFund f in base.SecurityHoldings)
                    {
                        if (f.TradingNAV.AdjustedTimeSeries == null || f.FundReport.AdjustedTimeSeries == null ||
                            i >= f.TradingNAV.AdjustedTimeSeries.Count || i >= f.FundReport.AdjustedTimeSeries.Count)
                        {
                            continue;
                        }

                        NAVw.IsOutsideSamplePeriod = f.TradingNAV.AdjustedTimeSeries[i].IsOutsideSamplePeriod;
                        RPTw.IsOutsideSamplePeriod = NAVw.IsOutsideSamplePeriod;

                        //成立不足30天的去除
                        if (f.ListedDate.AddDays(30) > WholeFund.TradingNAV.TradingDates[i])
                        {
                            continue;
                        }

                        //计算净值 和 资产配置
                        NetAssetValue    NAVi = (NetAssetValue)f.TradingNAV.AdjustedTimeSeries[i];
                        MutualFundReport RPTi = (MutualFundReport)f.FundReport.AdjustedTimeSeries[i];
                        NAVw.UnitNAV    += NAVi.UnitNAV * RPTi.TotalShare;
                        RPTw.TotalShare += RPTi.TotalShare;

                        if (RPTw.ReportDate < RPTi.ReportDate)
                        {
                            RPTw.ReportDate = RPTi.ReportDate;
                        }

                        RPTw.TotalEquityAsset     += RPTi.TotalEquityAsset;
                        RPTw.TotalBondAsset       += RPTi.TotalBondAsset;
                        RPTw.TotalNetAsset        += RPTi.TotalNetAsset;
                        RPTw.PureBondAsset        += RPTi.PureBondAsset;
                        RPTw.ConvertableBondAsset += RPTi.ConvertableBondAsset;
                    }

                    NAVw.UnitNAV      = NAVw.UnitNAV / RPTw.TotalShare;
                    NAVw.AccumUnitNAV = NAVw.UnitNAV;
                    WholeFund.TradingNAV.AdjustedTimeSeries.Add(NAVw);
                    WholeFund.FundReport.AdjustedTimeSeries.Add(RPTw);
                }

                //计算净值收益率
                WholeFund.TradingNAV.Calculate();
                WholeFund.FundReport.Calculate();
            }
            catch (Exception ex)
            {
                throw new Exception(Message.C_Msg_MF11, ex);
            }
            #endregion

            return(WholeFund);
        }