/stock-analysis

analyze stock data

Primary LanguageJupyter Notebook

股票数据分析

我们使用网易的股票历史交易数据,来进行基本的统计分析。

股票数据来源

打开 money.163.com,搜索你想要的股票,找到历史交易数据,找到下载数据的链接,即可下载想要的数据。

根据选择的字段,最终的下载链接大概是这样的:http://quotes.money.163.com/service/chddata.html?code=0600690&start=19931119&end=20180706&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;PCHG;TURNOVER;VOTURNOVER;VATURNOVER

把 code, start, end 字段修改一下即可下载其他股票在指定时间的交易数据。需要注意,股票代码前面的那个数字表示的是交易所,0 表示上海证券交易所,1 表示深圳证券交易所。

示例数据如下:

日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌幅,换手率,成交量,成交金额
2018-07-06,'600690,青岛海尔,18.22,18.64,17.51,18.24,18.21,0.0549,0.7088,43215639,780514355
2018-07-05,'600690,青岛海尔,18.21,18.85,18.05,18.42,18.18,0.165,0.6093,37150823,685499190
2018-07-04,'600690,青岛海尔,18.18,18.86,17.98,18.43,18.43,-1.3565,0.5812,35436927,653393994
2018-07-03,'600690,青岛海尔,18.43,18.96,17.82,18.72,18.77,-1.8114,0.7425,45274004,824268443

除权除息

下载下来的数据是未经除权除息的。在进行数据分析时,需要先进行除权除息。这里的关键是看前收盘和上一交易日的收盘价之间的差值。如果这个值不相同,则说明这是一个除权除息日,需要向前除权。需要注意,停牌期间的收盘价是 0 ,故需要扣除这一情况。

比如,下面是一个除权除息的数据:

日期,股票代码,名称,收盘价,开盘价,前收盘,涨跌幅,换手率,成交金额
2018-06-11,'600690,青岛海尔,20.36,20.43,20.36,0,0.7654,956119524
2018-06-08,'600690,青岛海尔,20.36,20.25,20.31,0.2462,0.9937,1243670054
2018-06-07,'600690,XD青岛海,20.31,20.4,20.35,-0.1966,0.788,978910159
2018-06-06,'600690,青岛海尔,20.69,20.42,20.47,1.0747,0.8941,1128508922
2018-06-05,'600690,青岛海尔,20.47,20.49,20.28,0.9369,0.8047,998596131

从交易数据可以看到,06-06 的收盘价 20.69 和 06-07 的前收盘 20.35 数值不同,说明这是个除权除息日。从股票价值的角度,差异的部分 20.69 - 20.35 = 0.34 即是股息。从同花顺数据可知,2018 年的分红为每 10 股分红 3.42 元。忽略掉数据精度的影响,与我们的计算结果相同。

下面是另外一个除权除息的数据:

日期,股票代码,名称,收盘价,开盘价,前收盘,涨跌幅,换手率,成交金额
2015-07-17,'600690,青岛海尔,14.21,13.93,13.93,2.0101,2.2727,1745340657
2015-07-16,'600690,DR青岛海,13.93,13.71,14.23,-2.1082,0.7095,547128871
2015-07-15,'600690,青岛海尔,28.95,28.96,29.26,-1.0595,2.1765,1681479282
2015-07-14,'600690,青岛海尔,29.26,30.55,31.26,-6.398,2.9782,2439246494

按照前述规则,这里的股息为 28.95 - 14.23 = 14.72,实际上这个除权除息的策略是 10 转增 10,外加每 10 股分红 4.92 元。对除权除息而言,可以不关心是送转还是现金分红。

下面是一段停牌的数据:

日期,股票代码,名称,收盘价,开盘价,前收盘,涨跌幅,换手率,成交金额
2016-02-02,'600690,青岛海尔,8.51,8.18,8.93,-4.7032,1.8993,888538495
2016-02-01,'600690,青岛海尔,8.93,8.93,9.92,-9.9798,0.7363,362911767
2016-01-29,'600690,青岛海尔,0,0,9.92,None,0,0
2016-01-28,'600690,青岛海尔,0,0,9.92,None,0,0

...

2015-10-16,'600690,青岛海尔,9.92,9.85,9.78,1.4315,1.0761,587501668
2015-10-15,'600690,青岛海尔,9.78,9.51,9.56,2.3013,0.7698,410535743

股票列表

股票列表数据来自东方财富网,没有实时更新。目前数据是 2015年12月份获取出来的数据。SZ.txt 是深市股票列表,SH.txt 是沪市的全部股票列表。

ETF 基金列表

curl 'http://91.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=1000&fs=b:MK0021,b:MK0022,b:MK0023,b:MK0024&fields=f12,f14'

沪深 A 股列表

curl 'http://91.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=10000&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&fields=f12,f14'

开放式基金列表

TODO: None

基金数据来源

使用 sina 的接口来获取数据。

请求如下:

curl 'https://stock.finance.sina.com.cn/fundInfo/api/openapi.php/CaihuiFundInfoService.getNav?symbol=100032&datefrom=2020-01-01&dateto=2020-06-17&page=1'

应答如下:

{
    "result": {
        "status": {
            "code": 0
        },
        "data": {
            "data": [
                {
                    "fbrq": "2020-06-17 00:00:00",
                    "jjjz": "0.982",
                    "ljjz": "2.687"
                },
                {
                    "fbrq": "2020-06-16 00:00:00",
                    "jjjz": "0.98",
                    "ljjz": "2.684"
                },
                {
                    "fbrq": "2020-06-15 00:00:00",
                    "jjjz": "0.965",
                    "ljjz": "2.668"
                }
            ],
            "total_num": "110"
        }
    }
}

几个关键参数:

  1. symbol 是基金代码
  2. datefrom 是开始日期
  3. dateto 是结束日期
  4. page 是返回的页数,目前没有发现可以一次性返回所有数据的接口,只能分页查询,每页返回 20 条记录。

返回的数据:

  1. fbrq 日期
  2. jjjz 基金净值
  3. ljjz 累计净值,因为基金会分红,分拆分。所以累计净值和基金净值不同

需要注意,这个接口不是公开的接口。可能会存在预料之外的变化或不可用。

这个接口的发现途径如下:

  1. 搜索某个基金,打开基金的主页,如 http://finance.sina.com.cn/fund/quotes/100032/bc.shtml
  2. 点击 "历史净值" 标签,找到查询的功能
  3. 输入开始日期,结束日期后,打开浏览器网络的调试功能,通过抓取网络请求数据,就可以发现这个 API 接口