public override MutualFundGroup GetMutualFunds(AFundCategory category) { try { //读取数据库 this.LoadMutualFundInfo(); //以Group输出 MutualFundGroup mfg = new MutualFundGroup(); foreach (DataRow oRow in _FundInfo.Tables[0].Rows) { MutualFund f = new MutualFund(oRow[C_ColName_Code].ToString()); this.LoadMutualFundInfo(f); if (category == null || ( (f.Category.AssetCategory == category.AssetCategory || category.AssetCategory == FundAssetCategory.Undefined) && (f.Category.InvestmentCategory == category.InvestmentCategory || category.InvestmentCategory == FundInvestmentCategory.Undefined) && (f.Category.OperationCategory == category.OperationCategory || category.OperationCategory == FundOperationCategory.Undefined) && (f.Category.StructureCategory == category.StructureCategory || category.StructureCategory == FundStructureCategory.Undefined) ) ) { mfg.Add(f); } } return(mfg); } catch (Exception ex) { throw ex; } }
public override void LoadMutualFundInfo(MutualFund f) { try { //读取数据库 this.LoadMutualFundInfo(); //更新数据 DataRow[] rows = _FundInfo.Tables[0].Select("SYMBOL='" + f.Code + "'"); if (rows.Length >= 1) { f.DataSource = this.DataSource; f.Category.DataSource = this.DataSource; DataRow row = rows[0]; f.Name = row[C_ColName_Name].ToString(); f.ListedDate = DataManager.ConvertToDate(row[C_ColName_ListedDate]); f.DelistedDate = DataManager.ConvertToDate(row[C_ColName_DelistedDate]); f.Category.SetupCategory(row[C_ColName_GSFundType].ToString(), 3); if (row[C_ColName_ParentCode] == DBNull.Value) { //非分级基金 f.IsStructured = false; f.Category.StructureCategory = FundStructureCategory.Parent; } else { //分级基金 f.IsStructured = true; f.ParentFundCode = row[C_ColName_ParentCode].ToString(); if (row[C_ColName_ParentCode].ToString() == row[C_ColName_Code].ToString()) { f.Category.StructureCategory = FundStructureCategory.Parent; //查找子基金 string sql = @"Select SYMBOL From CURFSCODE WHERE Symbol_Comp = '" + f.Code + "' AND Symbol <> Symbol_Comp"; DataSet ds = base.DBInstance.ExecuteSQL(sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { MessageManager.GetInstance().AddMessage(MessageType.Warning, Message.C_Msg_MF8, f.Code); } else { if (f.SubFundCodes == null) { f.SubFundCodes = new List <string>(); } foreach (DataRow rowsub in ds.Tables[0].Rows) { string code = rowsub[C_ColName_Code].ToString(); f.SubFundCodes.Add(code); } } } else { f.Category.StructureCategory = FundStructureCategory.Child; } } } else { MessageManager.GetInstance().AddMessage(MessageType.Warning, Message.C_Msg_MF5, f.Code); } } catch (Exception ex) { throw ex; } }
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); }
public abstract void LoadMutualFundInfo(MutualFund f);