public override void LoadMutualFundReport(SeriesFundReport r) { try { //读数据 string sqlShare = C_SQL_GetFundShareReport + " AND " + base.BuildSQLClauseIn(r.Code, "SYMBOL") + " AND Declaredate >= " + base.DBInstance.ConvertToSQLDate(r.TimeSeriesStartExtended.AddDays(-100)) + " AND Declaredate <= " + base.DBInstance.ConvertToSQLDate(r.TimeSeriesEnd) + " ORDER BY Symbol, PublishDate Desc "; string sqlAsset = C_SQL_GetFundAssetReport + " AND " + base.BuildSQLClauseIn(r.Code, "SYMBOL") + " AND PublishDate >= " + base.DBInstance.ConvertToSQLDate(r.TimeSeriesStartExtended.AddDays(-100)) + " AND PublishDate <= " + base.DBInstance.ConvertToSQLDate(r.TimeSeriesEnd) + " ORDER BY Symbol, Reportdate Desc "; DataSet dsShare = base.DBInstance.ExecuteSQL(sqlShare); DataSet dsAsset = base.DBInstance.ExecuteSQL(sqlAsset); //更新数据 this.updateFundReport(dsShare, dsAsset, r); } catch (Exception ex) { throw ex; } }
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); }
private void updateFundReport(DataSet dsShare, DataSet dsAsset, SeriesFundReport rpt) { //基本信息 rpt.DataSource = this.DataSource; rpt.OriginalTimeSeries.Clear(); string strSymbol = "SYMBOL='" + rpt.Code + "'"; DataRow[] rowsShare = dsShare.Tables[0].Select(strSymbol); DataRow[] rowsAsset = dsAsset.Tables[0].Select(strSymbol); //注意: 数据问题: // 1) 年报数据公布的较晚,在年报公布之前已有相关信息被披露,那么过时的数据将丢弃 // e.g. 166802.OF, // 2013/1/8 公布了2013/1/4 的基金份额数据;[因折算] // 2013/1/22 公布了2012/12/31的基金份额数据;[因年报] --这条因数据过期被丢弃 // 2) 通常份额的更新数据多于资产配置的 // 3) 所有序列按照报告日排序,非公告日 DateTime dShare1, dAsset1; DateTime dShare0, dAsset0; DataRow rShare, rAsset; int iShare = 0, iAsset = 0; //按信息公布日期合并数据 while (true) { //======================= // 准备数据 //======================= //1.基金份额 if (rowsShare.Length == 0) { rShare = null; } else if (iShare >= rowsShare.Length) { rShare = rowsShare[rowsShare.Length - 1]; } else { rShare = rowsShare[iShare]; } if (rShare == null) { dShare1 = DateTime.Today.AddDays(1); } else { dShare1 = DataManager.ConvertToDate(rShare[C_ColName_DeclareDate]);//本条数据的公告日 } if (iShare >= 1 && iShare < rowsShare.Length) { //前一条数据的公告日(报告日更晚的) dShare0 = DataManager.ConvertToDate(rowsShare[iShare - 1][C_ColName_DeclareDate]); if (dShare1 >= dShare0) { //丢弃过期数据 iShare++; continue; } } //2.基金资产 if (rowsAsset.Length == 0) { rAsset = null; } else if (iAsset >= rowsAsset.Length) { rAsset = rowsAsset[rowsAsset.Length - 1]; } else { rAsset = rowsAsset[iAsset]; } if (rAsset == null) { dAsset1 = DateTime.Today.AddDays(1); } else { dAsset1 = DataManager.ConvertToDate(rAsset[C_ColName_PublishDate]); } if (iAsset >= 1 && iAsset < rowsAsset.Length) { //前一条数据的公告日(报告日更晚的) dAsset0 = DataManager.ConvertToDate(rowsAsset[iAsset - 1][C_ColName_PublishDate]); if (dAsset1 >= dAsset0) { //丢弃过期数据 iAsset++; continue; } } //======================= // 合并数据 //======================= if (rShare == null && rAsset == null) { break; } if (dShare1 > dAsset1) { if (iShare >= rowsShare.Length) { updateFundReport(null, rAsset, rpt, true); iAsset++; } else { updateFundReport(rShare, rAsset, rpt, false); } iShare++; } else if (dShare1 < dAsset1) { if (iAsset >= rowsAsset.Length) { updateFundReport(rShare, null, rpt, false); iShare++; } else { updateFundReport(rShare, rAsset, rpt, true); } iAsset++; } else { updateFundReport(rShare, rAsset, rpt, false); iShare++; iAsset++; } //======================= // 退出条件 //======================= if (iShare >= rowsShare.Length && iAsset >= rowsAsset.Length) { break; } } //交易日校验,复权 rpt.Adjust(); }
public abstract void LoadMutualFundReport(SeriesFundReport r);