通过编程获取历史股价的方式很多,但是免费的方式可以简单地分为四类:
使用某种网友开发的插件: 比如Python就有TuShare, akshare, 这种只需要写几行代码就能获取,但是不同的库有不同的利弊。比如TuShare中有很多数据需要一定的积分才能获取。通过API接口,比如新浪,腾讯等等。从专门的行情软件上面提取数据。从财经网站上面爬取行情数据。TuShare是非常方便使用的, 比如在官网拿到Token后, 一行调用就可以获取股价信息:
importtushareasts ts.set_token(***) pro = ts.pro_api() price = ts.pro_bar(ts_code=000020.SZ, start_date=2022-09-01,\ end_date=2022-09-09) price结果如图:
通过API获取价格信息
接口
描述
http://hq.sinajs.cn/list= + 股票代码
当日行情
http://hq.sinajs.cn/list=s_+ 股票代码
实时行情
请求例子:
importrequests stock_code =sh600031,sz300866header = {referer:http://finance.sina.com.cn}当日行情接口response = requests.get(fhttp://hq.sinajs.cn/list={stock_code}, headers=header) print(response.text)结果
varhq_str_sh600031="三一重工,15.750,15.750,16.260,16.310,15.660,16.260,16.270,105649444,1702155639.000,6161,16.260,870579,16.250,132500,16.240,87700,16.230,103100,16.220,400510,16.270,328600,16.280,198700,16.290,795400,16.300,548100,16.310,2022-09-09,15:00:00,00,";varhq_str_sz300866="安克创新,59.250,58.620,59.150,59.420,57.850,59.150,59.160,1703977,100420830.250,700,59.150,300,59.140,300,59.130,2000,59.120,7400,59.110,300,59.160,2000,59.170,2700,59.190,700,59.200,400,59.250,2022-09-09,15:35:00,00,D|0|0.000";以上数据用,分割字符串中的内容,下标从0开始,依次为:
标号
内容
标号
内容
0
股票名字
1
当天开盘价
2
昨日收盘价
3
当天收盘价
4
当天最高价
5
当天最低价
...
指数也可以用这种方式获取。但是无法获取历史的股价信息。如果某天没有及时同步到本地数据库,就无法使用该接口获取那天的数据。接口可以一定性请求多个股票代码,用,隔开,不能有空格。
另外,这个接口现在一定要添加请求头:
header= {referer:http://finance.sina.com.cn}不然就会报错,提示:
Kinsokujikou desu!也就是日本语禁止访问的意思。很艺文!
接口
描述
http://qt.gtimg.cn/q= + 股票代码
最新行情
http://qt.gtimg.cn/q=ff_ + 股票代码
获取实时资金流向
http://qt.gtimg.cn/q=s_pk + 股票代码
盘口分析
http://qt.gtimg.cn/q=s_sh + 股票代码
简要信息
请求例子:
importrequests stock_code =sh600031,sz300866当日行情接口response = requests.get(fhttp://qt.gtimg.cn/q={stock_code}, timeout=6) print(response.text)结果
v_sh600031="1~三一重工~600031~16.26~15.75~15.75~1056494~612059~444435~16.26~62~16.25~8706~16.24~1325~16.23~877~16.22~1031~16.27~4005~16.28~3286~16.29~1987~16.30~7954~16.31~5481~~20220909160001~0.51~3.24~16.31~15.66~16.26/1056494/1702155639~1056494~170216~1.24~30.06~~16.31~15.66~4.13~1381.01~1381.01~2.20~17.33~14.18~2.47~-10712~16.11~26.21~11.48~~~1.51~170215.5639~0.0000~0~~GP-A~-27.26~4.16~2.75~7.32~3.17~28.30~14.13~4.77~-3.21~-9.62~8493286021~8493286021~-30.86~-29.80~8493286021~~~-41.60~0.06~";v_sz300866="51~安克创新~300866~59.15~58.62~59.25~17040~9711~7329~59.15~7~59.14~3~59.13~3~59.12~20~59.11~74~59.16~3~59.17~20~59.19~27~59.20~7~59.25~4~~20220909161451~0.53~0.90~59.42~57.85~59.15/17040/100420830~17040~10042~1.13~20.92~~59.42~57.85~2.68~89.46~240.40~3.82~70.34~46.90~0.70~46~58.93~20.88~24.49~~~1.45~10042.0830~0.0000~0~AR~GP-A-CYB~-41.84~-3.30~1.35~18.25~13.07~128.07~48.89~-6.41~-13.66~-5.83~151240045~406427207~27.38~-46.32~151240045~~~-45.35~-0.03~";以上数据用~分割字符串中的内容,下标从0开始,依次为:
标号
内容
标号
内容
0
未知
1
股票名字
2
股票代码
3
当前价格
4
昨收
5
今开
6
成交量(手)
7
股票投资小常识:在物价指数上涨时,货币贬值,人们会觉得买债券吃亏了,而引起债券价格下降,1988年抢购风时100元面值的国库券以七八十元的价格抛出,就是受此影响。
外盘
8
内盘
9
买一
10
买一量(手)
11-18
买二
19
卖一
20
卖一量
21-28
卖二
29
最近逐笔成交
30
时间
31
涨跌
32
涨跌%
33
最高
34
最低
35
价格/成交量(手)/成交额
36
成交量(手)
37
成交额(万)
38
换手率
39
市盈率
40
41
最高
42
最低
43
振幅
44
流通市值
45
总市值
股票投资小常识:买完以后就要每天去看盘,看股票,以防大盘和个股出现突变,做好了前面的一切准备工作以后,一般来说就等待股票上涨就好了,但是股市里面没有简单赚的钱。
46
市净率
47
涨停价
48
市净率
通达信是使用非常广泛的行情软件,其公司财富趋势已经在港交所上市。在通达信软件上下载行情后,数据会下载到本地(至少此时2022-09-10是这样)。数据在通达信的安装目录下:
可以使用程序读出来。附完整解析代码:
importstructimportdatetime class stock_price: def __init__(self, stock_date, stock_open, stock_high,\ stock_low, stock_close, stock_amount, stock_vol):self.stock_date = stock_dateself.stock_open = stock_openself.stock_high = stock_highself.stock_low = stock_lowself.stock_close = stock_closeself.stock_amount = stock_amountself.stock_vol = stock_vol def get_stock_price(filepath): data = [] with open(filepath,rb)asf:whileTrue: stock_date = f.read(4) stock_open = f.read(4) stock_high = f.read(4) stock_low= f.read(4) stock_close = f.read(4) stock_amount = f.read(4) stock_vol = f.read(4) stock_reservation = f.read(4)ifnot stock_date:breakstock_date =struct.unpack("l", stock_date)4字节 如20220909stock_open1 =struct.unpack("l", stock_open) 开盘价*100stock_high1 =struct.unpack("l", stock_high) 最高价*100stock_low=struct.unpack("l", stock_low) 最低价*100stock_close =struct.unpack("l", stock_close) 收盘价*100stock_amount =struct.unpack("f", stock_amount) 成交额 stock_vol =struct.unpack("f", stock_vol) 成交量 stock_reservation =struct.unpack("f", stock_reservation) 保留值 date_format = datetime.datetime.strptime(str(stock_date[0]),\ %Y%M%d) 格式化日期 data.append(stock_price(date_format.strftime(%Y-%M-%d), stock_open1[0]/100.0, stock_high1[0]/100.0,\ stock_low[0]/100.0, stock_close[0]/100.0, stock_amount[0]/100.0, \ stock_vol[0]/100.0))returndata找一个文件试试:
data_list = get_stock_price(./sz000002.day) print(f交易日期:{data_list[-1:][0].stock_date}) print(f开盘价:{data_list[-1:][0].stock_open}) print(f最高价:{ data_list[-1:][0].stock_high}) print(f最低价:{ data_list[-1:][0].stock_low}) print(f收盘价:{ data_list[-1:][0].stock_close})输出:交易日期:2022-09-09开盘价:17.49最高价:18.39最低价:17.41收盘价:18.15在同花顺里面验证了下价格信息,是正确的。不过这种方式的弊端在于,需要手工在通达信里面执行更新数据的操作,并且通达信在未来某天变更了读写文件的方式,这种方式就不能用了。其它的软件也是类似的。这里要注意的是,如果需要读取指数的信息,
struct.unpack("l", stock_open)这行代码里面的格式需要变动一下,目前变成
struct.unpack("f", stock_open)即可。
这种是最靠谱的方式的,但是实现也是比较繁琐的,某种程度上,也有法律上面的风险,参考:中国爬虫违法违规案例汇总 (https://github.com/HiddenStrawberry/Crawler_Illegal_Cases_In_China)。股票价格数据都是公开的,不是什么隐私,但是程序写的不好,把目标网站爬宕机了,就有法律风险了。上面例子中的新浪API接口还是很稳定,支持高并发的。貌似可能是某个性能高手开发的, 参考: 杨建:网站加速--服务器编写篇(上)(https://blog.csdn.net/lishenglong666/article/details/39028093), 原文不见了,放个转载。
......
股票投资小常识:故事都是来骗人的。好公司跌个跟头,再爬起来很容易。烂公司想好起来不可能。不要期待猪能变爱因斯坦。
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186