コード例 #1
0
        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;
            }
        }
コード例 #2
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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
 public abstract void LoadMutualFundReport(SeriesFundReport r);