Пример #1
0
        string UpdateHQData(JRGCDBClass jgdb, DataRow tdr, DateTime EndT)
        {
            DataTable dt = tdr.Table.Clone();
            //DataTable DBdt = new DataTable();
            //DBdt.Columns.Add("SectorCode");
            //DBdt.Columns.Add("HQDate");
            //DBdt.Columns.Add("POpen");
            //DBdt.Columns.Add("PHigh");
            //DBdt.Columns.Add("PClose");
            //DBdt.Columns.Add("PLow");
            //DBdt.Columns.Add("Zf");
            //DBdt.Columns.Add("Volume");
            string   GLCode    = tdr["SectorCode"].ToString();
            string   GLName    = tdr["SectorName"].ToString();
            DateTime LunchDate = (DateTime)tdr["SectorCreateDate"];
            DateTime HQDate    = LunchDate;

            if (tdr["HQModifyDate"] != null)
            {
                DateTime tDate;
                if (DateTime.TryParse(tdr["HQModifyDate"].ToString(), out tDate))
                {
                    HQDate = tDate;
                }
            }
            GLClassProcess glcp = new GLClassProcess();
            DateTime       BegT = HQDate;
            DataTable      WDtb = glcp.getHQData(GLCode, BegT, EndT);

            if (WDtb == null)
            {
                throw (new Exception("无法从万得获取到数据!"));
            }
            CheckPin = string.Format("概念{0}:{1}获取到行情数据{2}条!", GLCode, GLName, (WDtb == null ? 0 : WDtb.Rows.Count));
            DataRow[] drs    = WDtb.Select("VOLUME is not null", "DateTime");
            DataTable savetb = WDtb.Clone();

            for (int i = 0; i < drs.Length; i++)
            {
                savetb.Rows.Add(drs[i].ItemArray);
            }
            savetb.Columns["WINDCODE"].ColumnName = "SectorCode";
            savetb.Columns["DateTime"].ColumnName = "HQDate";
            savetb.Columns["OPEN"].ColumnName     = "POpen";
            savetb.Columns["HIGH"].ColumnName     = "PHigh";
            savetb.Columns["CLOSE"].ColumnName    = "PClose";
            savetb.Columns["LOW"].ColumnName      = "PLow";
            //savetb.Columns["PCT_CHG"].ColumnName = "Zf";
            savetb.Columns["VOLUME"].ColumnName = "Volume";
            string       sql = string.Format("select * from SectorHQTable where SectorCode='{0}' and HQDate between '{1}' and '{2}'", GLCode, BegT, EndT);
            SaveDataTask sdt = new SaveDataTask();

            this.SaveDataPool.Add(sdt);
            sdt.Sqls = new string[] { "", "" };
            DataSet ds = new DataSet();

            ds.Tables.Add(savetb);
            sdt.Data    = ds;
            sdt.Sqls[0] = sql;
            CheckPin    = string.Format("概念{0}:{1}已提交数据保存程序执行。最后日期{2}!", GLCode, GLName, EndT.ToShortDateString());

            return(null);

            //this.SaveDataPool.Add(sdt);
            sql = string.Format("select * from SectorTable where SectorCode='{0}'", GLCode, BegT, EndT);
            tdr["HQModifyDate"] = EndT;
            if (savetb != null && savetb.Rows.Count > 0)
            {
                tdr["HQStartDate"] = savetb.Rows[0]["HQDate"];
            }
            dt.Rows.Add(tdr.ItemArray);
            if (dt.Rows.Count > 1)
            {
                throw (new Exception("概念信息重复!"));
            }
            ds.Tables.Add(dt);
            sdt.Sqls[1] = sql;

            //update sectortable set hqmodifydate = sectorcreatedate
            CheckPin = string.Format("概念{0}:{1}已提交数据保存程序执行。最后日期{2}!", GLCode, GLName, EndT.ToShortDateString());
            dt       = null;
            return(null);
        }
Пример #2
0
        /// <summary>
        /// 更新概念指数的历史成分股变动日数据
        /// </summary>
        /// <param name="jgdb"></param>
        /// <param name="tdr"></param>
        /// <param name="EndT"></param>
        /// <returns></returns>
        string UpdateMember(JRGCDBClass jgdb, DataRow tdr, DateTime EndT)
        {
            DataTable dt   = tdr.Table;
            DataTable DBdt = new DataTable();

            DBdt.Columns.Add("SectorCode");
            DBdt.Columns.Add("ChangeDate");
            DBdt.Columns.Add("MumberList");
            DBdt.Columns.Add("MumberCnt");
            string         GLCode    = tdr["SectorCode"].ToString();
            string         GLName    = tdr["SectorName"].ToString();
            DateTime       LunchDate = (DateTime)tdr["SectorCreateDate"];
            GLClassProcess glcp      = new GLClassProcess();

            DateTime BegT              = (DateTime)tdr["LastModifyDate"];
            Int64    iMemCnt           = 0;
            bool     bMemCnt           = Int64.TryParse(tdr["CurrMumberCount"].ToString(), out iMemCnt);
            DateTime LoopT             = BegT;
            string   strLastMemberList = null;
            DateTime lastDate          = BegT;

            while (LoopT <= EndT)//从最后更新日开始,每一个月检查一次成员数量是否不一样,忽略只调整成员内容,不调整数量的情况
            {
                Int64 MemCnt = glcp.getRecordCount(GLCode, LoopT);
                if (MemCnt != iMemCnt) //如果该日成分股数量与上一日期的不同
                {
                    bool    isFirstDay = (LunchDate == LoopT);
                    DataRow dr         = DBdt.NewRow();
                    dr["SectorCode"] = GLCode;

                    for (int j = 31; j >= 0; j--)//往前一个月每日检查
                    {
                        DateTime dd    = LoopT;
                        Int64    ddcnt = MemCnt;
                        if (!isFirstDay)
                        {
                            dd = LoopT.AddDays(-1 * j);
                            if (dd <= lastDate)
                            {
                                continue;                //一个月内有多个价格
                            }
                            CheckPin = string.Format("概念{0}:{1}已计算到日期{2}", GLCode, GLName, dd.ToShortDateString());
                            ddcnt    = glcp.getRecordCount(GLCode, dd);
                        }
                        else
                        {
                            CheckPin = string.Format("概念{0}:{1}建立日期{2}", GLCode, GLName, dd.ToShortDateString());
                        }
                        if (ddcnt != iMemCnt)                   //如果当日数量不等于前值,标志为改变日期
                        {
                            dr["ChangeDate"] = dd;              //更新日期
                            DataTable memdt = glcp.getRecords(GLCode, dd);
                            dr["MumberCnt"] = memdt.Rows.Count; //股票数量
                            List <string> memberList = new List <string>();
                            foreach (DataRow wdr in memdt.Rows)
                            {
                                string   secid = wdr["wind_code"].ToString();
                                string[] arr   = secid.Split('.');
                                secid = string.Format("{0}.{1}", arr[1], arr[0]);
                                memberList.Add(secid);
                            }
                            string strChange = string.Join(",", memberList.ToArray());
                            dr["MumberList"]  = strChange;
                            strLastMemberList = strChange;
                            if (dd < LoopT)
                            {
                                LoopT = dd;
                            }
                            lastDate = LoopT;
                            iMemCnt  = memberList.Count;
                            break;
                        }
                    }
                    DBdt.Rows.Add(dr);
                }
                LoopT    = LoopT.AddMonths(1);
                CheckPin = string.Format("概念{0}:{1}已计算到日期{2}", GLCode, GLName, LoopT.ToShortDateString());
            }
            if (strLastMemberList != null)
            {
                tdr["CurrMumberCount"] = iMemCnt;
                tdr["CurrMumberList"]  = strLastMemberList;
                if (LoopT > EndT)
                {
                    LoopT = EndT;
                }
                tdr["LastModifyDate"] = LoopT;
            }
            string sql = string.Format("select * from SectorMemberTable where SectorCode='{0}'", GLCode);

            for (int i = DBdt.Rows.Count - 1; i >= 0; i--)
            {
                DataRow dr = DBdt.Rows[i];
                if (dr["SectorCode"].ToString() == "884221.WI")
                {
                    int itest = 32;
                }
                if (dr["ChangeDate"].ToString() == "")
                {
                    DBdt.Rows.Remove(dr);
                }
            }
            jgdb.Save(DBdt, sql);
            sql = string.Format("select * from SectorTable where SectorCode='{0}'", GLCode);
            jgdb.Save(dt, sql);

            CheckPin = string.Format("概念{0}:{1}已保存完毕。最后日期{2}!", GLCode, GLName, LoopT.ToShortDateString());
            return(null);
        }