コード例 #1
0
        /// <summary>
        /// 数据检查,查看是否需要根据历史成交进行补充。
        /// </summary>
        /// <param name="st"></param>
        /// <param name="et"></param>
        /// <param name="o"></param>
        /// <param name="dt"></param>
        /// <param name="ErrInfo"></param>
        /// <param name="result"></param>
        /// <param name="ClientID"></param>
        private static void CheckDataIntegrity(DateTime st, DateTime et, 券商 o, DataTable dt, StringBuilder ErrInfo, StringBuilder result, int ClientID)
        {
            #region 成交金额修正
            if (dt.Columns.Contains("成交金额"))
            {
                foreach (DataRow row in dt.Rows)
                {
                    row["成交金额"] = Math.Abs(CommonUtils.GetDecimal(row["成交金额"]));
                }
            }
            else if (dt.Columns.Contains("成交数量") && dt.Columns.Contains("成交价格"))
            {
                dt.Columns.Add("成交金额");
                foreach (DataRow row in dt.Rows)
                {
                    row["成交金额"] = Math.Abs(CommonUtils.GetDecimal(row["成交价格"]) * CommonUtils.GetDecimal(row["成交数量"]));
                }
            }
            #endregion

            #region 买卖标志修正
            if (dt.Columns.Contains("买卖标志") && dt.Rows.Count > 0 && Regex.IsMatch(dt.Rows[0]["买卖标志"] + "", "[012]"))
            {
                foreach (DataRow row in dt.Rows)
                {
                    row["买卖标志"] = GetTradeSymble(row);
                }
            }
            else if (!dt.Columns.Contains("买卖标志") && !HasBuySaleColumn(dt) && dt.Columns.Contains("备注"))
            {
                dt.Columns.Add("买卖标志");
                foreach (DataRow row in dt.Rows)
                {
                    row["买卖标志"] = Regex.Match(row["备注"] + "", "买|卖").Value;
                }
            }
            #endregion

            List <string> VIPColumns = new List <string>()
            {
                "证券代码", "证券名称", "成交价格", "成交数量", "成交金额"
            };
            var needAddColumn = VIPColumns.Where(_ => !dt.Columns.Contains(_)).ToList();

            if (needAddColumn.Count > 0)
            {
                TdxApi.QueryHistoryData(ClientID, 1, st.ToString("yyyyMMdd"), et.ToString("yyyyMMdd"), result, ErrInfo);
                if (ErrInfo.Length == 0)
                {
                    var dt1 = CommonUtils.ChangeDataStringToTable(result.ToString());
                    needAddColumn = needAddColumn.Where(_ => dt1.Columns.Contains(_)).ToList();
                    AddDataColumnFromHisTrade(dt, dt1, needAddColumn);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 通达信接口-历史数据查询(默认查询交割单)
        /// </summary>
        /// <param name="st">开始时间</param>
        /// <param name="et">结束时间</param>
        /// <param name="o">券商</param>
        /// <param name="historyDataType">表示查询信息的种类,0历史委托  1历史成交   2交割单</param>
        /// <returns></returns>
        public static DataTable QueryHisData(DateTime st, DateTime et, 券商 o, int historyDataType = 2, bool originalData = false)
        {
            DataTable     dt      = null;
            StringBuilder ErrInfo = new StringBuilder(256);

            //StringBuilder result = new StringBuilder(1024 * 1024);
            queryHisResult.Clear();
            if (o.营业部代码 == 8888)
            {
                if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday ||
                    DateTime.Today.DayOfWeek == DayOfWeek.Saturday ||
                    DateTime.Now.Hour <= 9 ||
                    DateTime.Now.Hour >= 15)
                {
                    o.营业部代码 = 24;
                    o.IP    = "124.74.242.150";
                    o.Port  = 443;
                }
            }

            var ClientID = TdxApi.Logon(o.IP, o.Port, o.版本号, o.营业部代码, o.登录帐号, o.交易帐号, o.TradePsw, o.CommunicatePsw, ErrInfo);

            if (ErrInfo.Length > 0)
            {
                CommonUtils.Log(string.Format("通达信接口登录失败, 组合号:{0}, 起始日期:{1},结束日期:{2} ,错误信息:{3}", o.称, st.ToString(), et.ToString(), ErrInfo.ToString()));
            }
            else
            {
                DateTime searchEndDate = et;
                if (StrangeGroups.Contains(o.称) && st == et)
                {
                    searchEndDate = et.AddDays(1);
                }
                TdxApi.QueryHistoryData(ClientID, historyDataType, st.ToString("yyyyMMdd"), searchEndDate.ToString("yyyyMMdd"), queryHisResult, ErrInfo);
                if (ErrInfo.Length == 0)
                {
                    dt = CommonUtils.ChangeDataStringToTable(queryHisResult.ToString());
                    if (!originalData && historyDataType == 2)
                    {
                        FilteTableData(o, st, et, dt);
                        CheckDataIntegrity(st, et, o, dt, ErrInfo, queryHisResult, ClientID);
                        RepairData(o, dt);
                    }
                }
                else
                {
                    CommonUtils.Log("通达信接口查询失败,错误信息" + ErrInfo.ToString());
                }
            }
            TdxApi.Logoff(ClientID);
            return(dt);
        }