从钱龙数据中读取股票权息信息导入到数据库

从钱龙数据中读取股票权息信息导入到数据库
前面写了如果读股票代码和日线数据,下面是如何读股票的权息信息。

钱龙中权息数据存储在QLDATA/history/shase/weight和QLDATA/history/sznse/weight目录下,每个文件对应一只股票。

与前文一样,只贴核心代码:

        private static void ReadStockWeights(string strPath, string p_strMarket)
        {
            string[] parts = strPath.Split('//');
            string strStockCode = null;
            for (int i = parts.Length - 1; i >= 0;i-- )
            {
                string strTemp = parts[i];
                if (strTemp.ToUpper().EndsWith(".WGT"))
                {
                    strStockCode = strTemp.Substring(0, strTemp.Length - 4) ;
                    break;
                }
            }
            Debug.Assert(strStockCode != null);
            Console.WriteLine("Read stock weight from file '" + strPath + "'");
            FileStream stream = new FileStream(strPath, FileMode.Open, FileAccess.Read);
            BinaryReader b_reader = new BinaryReader(stream);
            List<StockWeightInfo> weightInfos = new List<StockWeightInfo>();
            try
            {
                while (stream.CanRead && stream.Position < stream.Length)
                {
                    int[] oneRow = new int[9];
                    for( int i=0;i<9;i++)
                    {
                        oneRow[i] = b_reader.ReadInt32();
                    }//for
                    if (oneRow[8] != 0)
                    {
                        throw new Exception("Last entry is not empty");
                    }
                    //read date
                    int nYear = oneRow[0] >> 20;
                    int nMon = (int)(((uint)(oneRow[0] << 12))>> 28);
                    int nDay = (oneRow[0] & 0xffff)>> 11;

                    DateTime wgtDate;
                    if (nYear == 0 && nMon == 0 && nDay == 0)
                        wgtDate = DateTime.MinValue;
                    else
                            wgtDate = new DateTime(nYear, nMon, nDay);
                    StockWeightInfo wgtInfo = new StockWeightInfo();
                    wgtInfo.m_date = wgtDate;
                    wgtInfo.m_stockCountAsGift = oneRow[1];/**10000.0f;
                    wgtInfo.m_stockCountForSell = oneRow[2];/**10000.0f;
                    wgtInfo.m_priceForSell = oneRow[3];/**1000.0f;
                    wgtInfo.m_bonus = oneRow[4];/**1000.0f;
                    wgtInfo.m_stockCountOfIncreasement = oneRow[5];/**10000.0f;
                    wgtInfo.m_stockOwnership = (ulong)oneRow[6];
                    wgtInfo.m_freeStockCount = (ulong)oneRow[7];
                    if (!weightInfos.Contains(wgtInfo))
                    {
                        weightInfos.Add(wgtInfo);
                        //Console.WriteLine();
                        //Console.Write(wgtInfo.ToString());
                    }
                }//while
                weightInfos.Sort();
            }
            catch (EndOfStreamException)
            {
                Console.WriteLine("Unexpected end of stream");
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
                throw;
            }
            finally
            {
                stream.Close();
            }
            SqlCommand cmd = new SqlCommand("", m_conn);
            cmd.Transaction = m_tran;
            cmd.CommandText = "INSERT INTO [StockWeightInfos] ([StockCode] ,[Market] ,[Date] ,[StockCountAsGift] ,[StockCountForSell] ,[PriceForSell] ,[Bonus] ,[StockCountOfIncreasement] ,[StockOwnership] ,[FreeStockCount]) " +
                               "VALUES (@StockCode, @Market ,@Date ,@StockCountAsGift ,@StockCountForSell ,@PriceForSell ,@Bonus ,@StockCountOfIncreasement ,@StockOwnership ,@FreeStockCount)";
            cmd.Parameters.Add("@StockCode", SqlDbType.NVarChar, 50);
            cmd.Parameters.Add("@Market", SqlDbType.NVarChar, 50);
            cmd.Parameters.Add("@Date", SqlDbType.DateTime);
            cmd.Parameters.Add("@StockCountAsGift", SqlDbType.Real);
            cmd.Parameters.Add("@StockCountForSell", SqlDbType.Real);
            cmd.Parameters.Add("@PriceForSell", SqlDbType.Real);
            cmd.Parameters.Add("@Bonus", SqlDbType.Real);
            cmd.Parameters.Add("@StockCountOfIncreasement", SqlDbType.Real);
            cmd.Parameters.Add("@StockOwnership", SqlDbType.BigInt);
            cmd.Parameters.Add("@FreeStockCount", SqlDbType.BigInt);
            foreach(StockWeightInfo info in weightInfos)
            {
                cmd.Parameters["@StockCode"].Value = strStockCode;
                cmd.Parameters["@Market"].Value = p_strMarket;
                cmd.Parameters["@Bonus"].Value = info.m_bonus / 1000.0;
                if (info.m_date != DateTime.MinValue)
                    cmd.Parameters["@Date"].Value = info.m_date;
                else
                    cmd.Parameters["@Date"].Value = DBNull.Value;
                cmd.Parameters["@FreeStockCount"].Value = info.m_freeStockCount;
                cmd.Parameters["@PriceForSell"].Value = info.m_priceForSell/1000.0;
                cmd.Parameters["@StockCountAsGift"].Value = info.m_stockCountAsGift/10000.0;
                cmd.Parameters["@StockCountForSell"].Value = info.m_stockCountForSell/10000.0;
                cmd.Parameters["@StockCountOfIncreasement"].Value = info.m_stockCountOfIncreasement/10000.0;
                cmd.Parameters["@StockOwnership"].Value = info.m_stockOwnership;
                int nCnt=cmd.ExecuteNonQuery();
                Debug.Assert(nCnt == 1);
            }//foreach
        }//ReadStockWeights

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
★★1.编译注意事项 使用VC6打开工作区StkUI.dsw 然后可以按照以下顺序依次编译各个工程 GuiLib、profuisdll、XPFace、StkLib、StkNet、StkUI、Tools 其工程StkUI是软件的主界面程序,Tools 是注册机以及一些简单的工具,其他 都是动态连接库。 ★★2.工程profuisdll介绍 profuisdll是一套比较专业的Windows界面库,是俄国人做的,还不错,本软件 改正了它的几个bug。在ProfUIS\Modified.txt文件有说明。 本软件3.0版仅使用了该界面库的颜色选择对话框。 ★★3.工程GuiLib介绍 GuiLib是另一套Windows界面库,本软件改正了它的几个bug。在GuiLib\Modified.txt 文件有说明。 本软件3.0版使用了该界面库的界面框架、菜单条、工具条。 ★★4.工程XPFace介绍 主要是本软件的一些界面美化的类,放在了这个DLL里面。 ★★5.工程StkLib介绍 这个工程是实现股票数据结构、技术指标计算的动态连接库,代码与平台无关。 其比较重要的几个文件如下: Database.h 读取数据文件接口定义 QianLong.h 钱龙格式数据文件接口定义 SelfDB.h 自有格式数据文件接口定义,除了除权数据和行情数据外, 其他与钱龙一样 Stock.h 股票数据结构定义 Technique.h 技术指标类定义 Container.h 股票信息数据CStockInfo的数组类 Express.h 股票列表视图的列变量定义,以及自定义列的表达式计算 Strategy.h 策略定义 Profile.h 记录软件的用户配置并保存 BaseData.cpp 基本资料数据结构类实现 Database.cpp 数据文件读写实现 DRData.cpp 除权数据结构数组类实现 KData.cpp K线数据结构数组类实现 Report.cpp 行情数据结构数组类实现 Minute.cpp 行情分时数据结构数组类实现 Outline.cpp 行情额外数据结构数组类实现 QianLong.cpp 钱龙数据文件读写实现 SelfDB.cpp 自有格式数据文件读写实现 Stock.cpp 股票数据结构实现 StStore.cpp 数据文件读写实现 TechCL.cpp 自有技术指标 TechEnergy.cpp 能量类技术指标 TechKLine.cpp K线叠加类技术指标 Technique.cpp 技术指标基类 TechSwing.cpp 摆动类技术指标 TechTrend.cpp 趋势类技术指标 TechOther.cpp 其它类技术指标 Container.cpp 股票信息数据CStockInfo的数组类实现 Express.cpp 股票列表视图的列变量定义,以及自定义列的表达式计算实现 Strategy.cpp 策略定义实现 Profile.cpp 记录软件的用户配置并保存 有关详细的说明,参看源文件的注释。 工程StkLib的几个全局静态变量: g_stockcontainer:AfxGetStockContainer()可以得到该变量的引用,该 变量记录所有股票的行情信息和基本信息,CStockInfo的数组。 g_domaincontainer:AfxGetDomainContainer()可以得到该变量的引用, 该变量记录所有板块的信息。 g_groupcontainer:AfxGetGroupContainer()可以得到该变量的引用,该 变量记录所有分组的信息。 g_stdatabase:AfxGetDB()可以得到该变量的引用,该变量实现了本软件的 数据文件接口。 g_stprofile:AfxGetProfile()可以得到该变量的引用,该变量记录当前软 件的一些设置。 ★★6.工程StkNet介绍 这个工程是实现网络数据自动下载功能的动态连接库。其比较重要的几个文 件如下: NetDB.h 一些数据下载,安装的接口 HttpClt.h HTTP协议客户端类 InfoZip.h 压缩/解压缩Zip文件 Markup.h XML解析 XMLDoc.h XML辅助 secret.h 主要包括一些注册机的加密算法和读取硬盘序列号的类。 NetDB.cpp 一些数据下载,安装的接口实现 HttpClt.cpp HTTP协议客户端类实现 InfoZip.cpp 压缩/解压缩 Markup.cpp XML解析实现 Secret.cpp 加密文件,读取硬盘系列号等 XMLDoc.cpp XML辅助实现 secret.cpp 主要包括一些注册机的加密算法和读取硬盘序列号的类实现。 其工程的Tongshi Files为支持通视卡行情的实现程序 其工程的Yongxin Files为支持清华永新卡行情的实现程序 其工程的Receiver Files为本软件的行情接收的实现程序,其将通视卡和清 华永新卡的数据结构转换成本软件内的通用数据结构,报价(REPORT)、分时(MINUTE)、 额外(OUTLINE)、K线(KDATA)、除权信息(DRDATA) 工程StkNet的全局静态变量: g_sview:AfxGetSView()可以得到该变量的引用,该变量记录注册信息。 ★★7.工程StkUI介绍 该工程生成最终可执行文件,主要是软件的界面。主要几个文件如下: BaseView.cpp 基本资料视图 ChildFrm.cpp 子窗口框架 MainFrm.cpp 主框架,响应菜单命令 StkUI.cpp 应用程序类,主程序初始化,初始数据读取等 StaticDoc.cpp 文档类 WizardView.cpp 向导视图 SimuView.cpp 策略视图 MarketView.cpp 实时行情视图 SListView.cpp 股票列表视图 StockGraph.cpp 技术指标视图画图类 DrawTech.cpp 画具体技术指标的函数,属于CGraphView类的方法 GraphView.cpp 技术指标视图 StrategyView.cpp 策略树视图 GroupView.cpp 股票分组树视图 TechsView.cpp 技术指标树视图 ★★8.工程Tools介绍 该工程包含以下几个模块: 注册机,利用了StkNet工程导出的AfxGetSView()。 从txt基本资料文件提取财务数据的小工具。 修改文件时间的小工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值