股票代码编码怎么写

原标题:.NET股票历史数据采集(附数据和源码)

文章来源于网络,若有侵权,请联系我们删除。

文章配图

.NET股票历史数据采集(附数据和源码)

  cnblogs.com/asxinyu/p/dotnet_stock_data_design.html

  本文的初衷是数据分析(分析结果就不说了,就是想看看筛选点数据),只不过搞下来发现比我想象的要简单多了。

  本文采集的数据是:2000年到2018年2月份,上证和深证交易所所有的上市股票交易数据,按天采集,不是小时哦,有兴趣的朋友,可以稍微改造,做到实时(这和我就无关了)。

  一、数据采集需求

  原始需求:想分析某些股票的历史天交易数据里面满足某些条件的股票。

  初步分析:需要股票的基础数据,如名称,编码,交易所等信息,然后就是每天的开票收盘的价格,涨幅等信息。

  以为很简单,起始搞起来越滚越大,刚开始以为2个表就够了,没想到搞来搞去,有6个表了。

  还好,我们有强大的XCode组件,数据库设计,开发都极其简单,总共零零散散也就10个小时不到就完工了。主要的时间不是写代码,其实60%的时间都是在找资料,分析接口和想怎样设计上面,以及跑数据,还好源数据都保存下来了,重写跑起来很快。

  二、股市数据接口

  很早以前,有朋友也想让我给给他采集股票实时数据,而且用的是商业接口,由于时间匆忙,而且对股票一无所知,所以就拒绝了。

  这次开工之前,心里也很忐忑,会不会很复杂,反正是自己想玩和想看,所以抱着试一试的心态,没想到比我想的要简单很多。

  此处。。。。。。。。。。。。省略1万字,因为搜索和找了很多资源,最终用的是下面的接口,简单,实测速度快,18年的数据不到20分钟刷刷刷搞下来了。

  2.1、股票基础数据

  股票基础数据我用的是这个网址:http://quote.eastmoney.com/stocklist.html

  里面包括了上证和深圳交易所的所有股票代码信息,只需要直接采集即可,速度很快。

  如果要做实时,每天更新一次即可,注意:我开始也没注意,股票代码有很多含义,除了交易所之外,还有啥创业板,基金之类的,我没仔细研究,我只把我需要的类型进行了标记。可以在这里看看代码的一些类型:https://baike.so.com/doc/4974613-5197406.html

  股票基础数据结构比较简单:

  编码(唯一),名称,交易所,类型1是要分析,0是暂时忽略的,上市日期

  2.2、股票历史天数据

  股票历史天数据刚开始想应该很大,找了一些结构才发现,基本每天的主要指标也就10个字段左右,计算一下,每只股票就算20年,也就6000条而已。

  即使10000支股票,最多也就6000万而已,所以刚开始的时候直接全部撸到一个表里面了,实际上后面在分析的时候,极其不合理。分析的比较很复杂,搜索非常慢,所以后来我把历史数据进行了拆分,然后分析的时候多线程,速度瞬间提升10倍。由于XCode组件天生对分表分库和数据库反向工程的支持,所以开发起来非常快。

  股票历史数据找了很多,最早用的是搜狐的一个接口:http://www.cnblogs.com/ldlchina/p/5392670.html

  它的格式很简单,拼接股票代码和起始结束日期即可,后来还发现它还能查询指数信息:http://q.stock.sohu.com/hisHq?code={code}&start={start}&end={end},{code}替换为股票代码,大陆股票代码加前缀cn_。

  返回的json格式很标准,使用了Newlife组件的JsonParser类,轻松搞定。根据返回的数据信息,找了几支股票核对一下,就知道其意义了。在后面的数据库设计中会详细描述。说明:采集的时候我是先用临时表统一把返回的结果保存,防止程序有bug,下次又去请求,浪费人家的流量。也是保存在sqlite数据库。

  2.3、其他附加

  当然如果还要做复杂和完善一点,还有很多数据要采集,比如公司的一些基本信息,我暂时没有用到,后面我会把代码开源,大家随意折腾。

  三、数据库设计 

  数据库设计我们采用XCode开发的设计规范,都用xml文件,可以自动生成实体类,后面有时间我会针对XCode写一篇开发实践的文章,再一次带大家温习了XCode,在这里感谢@大石头,10多年码农,X组件博大精深,极大的提高了开发效率,简单,简单,简单到你有时候怀疑人生。

  1、股票基础信息

  <TableName="StockBaseInfo"Description="股票基础信息"ConnName="stock_base">

    <Columns>

     <ColumnName="Code"DataType="String"PrimaryKey="True"Description="股票编码"/>

     <ColumnName="Name"DataType="String"Master="True"Description="名称"/>

     <ColumnName="Exchange"DataType="String"Description="交易所"/>

     <ColumnName="Kind"DataType="Int32"Description="类型。1是要分析股票,0是暂时不分析"/>

     <ColumnName="StartDate"DataType="DateTime"Description="上市日期"/>

     <ColumnName="CreateDate"DataType="DateTime"Description="创建时间"/>

    </Columns>

    <Indexes>

     <IndexColumns="Name"/>

     <IndexColumns="StartDate"/>

    </Indexes>

  </Table>

  2、股票历史日数据

  其实在项目代码的xml文件表结构中,还有一个历史信息,就是一次性获取所有历史Json文本存储,避免重复抓取Json数据。结构很简单,就不贴了。

  <TableName="StockDayData"Description="股票日数据"ConnName="stock_day">

    <Columns>

     <ColumnName="ID"DataType="String"PrimaryKey="True"Description="编号。code日期"/>

     <ColumnName="Code"DataType="String"Description="股票编码"/>

     <ColumnName="StatDate"DataType="DateTime"Description="数据日期"/>

     <ColumnName="StartPrice"DataType="Double"Description="开盘价格"/>

     <ColumnName="EndPrice"DataType="Double"Description="收盘价格"/>

     <ColumnName="ChangePrice"DataType="Double"Description="涨跌金额"/>

     <ColumnName="ChangeRatio"DataType="Double"Description="涨跌幅度"/>

     <ColumnName="LowPrice"DataType="Double"Description="最低价格"/>

     <ColumnName="HighPrice"DataType="Double"Description="最高价格"/>

     <ColumnName="TotalHand"DataType="Int32"Description="总手"/>

     <ColumnName="TotalAmount"DataType="Double"Description="总金额(万)"/>

     <ColumnName="HandRate"DataType="Double"Description="换手率"/>

     <ColumnName="UpdateDate"DataType="DateTime"Description="更新日期"/>

    </Columns>

  </Table>

  3、板块分类和股票板块信息

  <TableName="GroupKind"Description="板块分类"ConnName="stock_base">

    <Columns>

     <ColumnName="ID"DataType="String"PrimaryKey="True"Description="编码。url相关"/>

     <ColumnName="Name"DataType="String"Master="True"Description="板块名称"/>

     <ColumnName="Kind"DataType="String"Description="分类。1.行业,2地域,3.概念"/>

     <ColumnName="Total"DataType="Int32"Description="总数"/>

     <ColumnName="CreateDate"DataType="DateTime"Description="创建时间"/>

    </Columns>

    <Indexes>

     <IndexColumns="Kind"/>

     <IndexColumns="Name"/>

    </Indexes>

   </Table>

   <TableName="StockGroup"Description="股票板块信息"ConnName="stock_base">

    <Columns>

     <ColumnName="ID"DataType="String"PrimaryKey="True"Description="编号。groupidstockid"/>

     <ColumnName="GroupID"DataType="String"Description="板块ID"/>

     <ColumnName="Kind"DataType="String"Description="分类。1.行业,2地域,3.概念"/>

     <ColumnName="Code"DataType="String"Description="股票代码"/>

     <ColumnName="StockName"DataType="String"Description="股票名称"/>

     <ColumnName="CreateDate"DataType="DateTime"Description="创建时间"/>

    </Columns>

    <Indexes>

     <IndexColumns="GroupID"/>

     <IndexColumns="Code"/>

    </Indexes>

  </Table>

  四、关键信息采集

  下面我们把数据采集过程简单分析一下,然后把源代码和数据库共享给大家。套路很简单,熟悉起来很快就可以搞定。

  我的博客中,前几年,写过好几篇关于C#数据采集的方法,套路都比较通用,主要是:HtmlAgilityPackXCode

发表评论

免责声明:本站部分内容转载于网络,其中内容仅代表作者个人观点,与本网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。

本站联系邮箱:douxingdu02@163.co m