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); }
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); }