Python量化学习-获取证券数据的几种方式

╄→гoц情女王★ 提交于 2020-12-30 18:00:09
I am not a designer nor a coder. I'm just a guy with a point-of-view and a computer. 翻译:俺不是码畜,俺只是一条对着电脑有点想法的图狗。 链接: https://zhuanlan.zhihu.com/p/35817328

经验

  • 一旦遇到问题,请过滤掉专家的意见,只采纳跟你有类似经历的人的意见。
  • 做好最坏的打算,以最积极的心态去面对,而不是逃避。
  • 学不学编程,完全取决于是否想学,其他的别多想。
  • 种一棵树最好的时间是十年前,其次是现在。


yeayee:Python数据分析及可视化实例目录zhuanlan.zhihu.com图标



新浪财经API

from urllib import request
import json
import pandas as pd

股票

def get_stock_data(id, scale, data_len):
    '''
    symnol = 股票代码
    scale = 5,15,30,60
    datalen = 获取数据长度,最大1023
    '''
    # 拼接API的url
    url = 'http://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol={0}&scale={1}&datalen={2}'.format(id, scale, data_len)
    # 发起请求
    req = request.Request(url)
    # 获取响应
    rsp = request.urlopen(req)
    # 读取响应结果
    res = rsp.read()
    # 将json序列转换为Python对象
    res_json = json.loads(res)
    # bar列表
    bar_list = []
    # 将结果逆序
    res_json.reverse()
    # 遍历列表
    for dict in res_json:
        bar = {}
        bar['date'] = dict['day']
        bar['open'] = float(dict['open'])
        bar['high'] = float(dict['high'])
        bar['low'] = float(dict['low'])
        bar['close'] = float(dict['close'])
        bar['vol'] = int(dict['volume'])
        bar_list.append(bar)
    # 将结果转换为DataFrame对象
    df = pd.DataFrame(data=bar_list)
    return df
df = get_stock_data('sz002415', 30, 30)
df.head()

期货

def get_future_data(id, scale):
    # 拼接API的url
    url = 'http://stock2.finance.sina.com.cn/futures/api/json.php/IndexService.getInnerFuturesMiniKLine{0}m?symbol={1}'.format(scale, id)
    # 发起请求
    req = request.Request(url)
    # 获取响应
    rsp = request.urlopen(req)
    # 读取响应结果
    res = rsp.read()
    # 将json序列转换为Python对象
    res_json = json.loads(res)
    # bar列表
#     print(res_json)
    bar_list = []
    # 将结果逆序
    res_json.reverse()
    # 遍历列表
    for line in res_json:
        bar = {}
        bar['date'] = line[0]
        bar['open'] = float(line[1])
        bar['high'] = float(line[2])
        bar['low'] = float(line[3])
        bar['close'] = float(line[4])
        bar['vol'] = int(line[5])
        bar_list.append(bar)
    # 将结果转换为DataFrame对象
    df = pd.DataFrame(data=bar_list)
    return df
df = get_future_data('rb1910', 5)
df.head()

其他接口:https://blog.csdn.net/afgasdg/article/details/86071921

baostock获取沪深股票历史数据(开放)

http://baostock.com/baostock/index.php

import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)
login success!
login respond error_code:0
login respond  error_msg:success
#### 获取历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节
rs = bs.query_history_k_data_plus("sz.002415",
    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
    start_date='2020-01-01', end_date='2020-12-28', 
    frequency="d", adjustflag="3") #frequency="d"取日k线,adjustflag="3"默认不复权
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
#### 结果集输出到csv文件 ####
# result.to_csv("D:/history_k_data.csv", encoding="gbk", index=False)
# print(result)
result.tail()

tushare获取证券数据(高级权限需要积分)

https://tushare.pro/

import tushare as ts
pro = ts.pro_api('****************************')

历史行情

df = pro.daily(ts_code='002415.SZ', start_date='20200101', end_date='20201228')  # 海康威视
df.head()

涨跌数据

df = pro.limit_list() # 获取涨跌数据,需要权限
df.head()






易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!