前言


使用Python开发一个web股票项目。
【github项目地址】:
https://github.com/pythonstock/stock
【知乎专栏地址】:
https://zhuanlan.zhihu.com/pythonstock
【docker hub地址下载】:
https://hub.docker.com/r/pythonstock/pythonstock
【相关stock资料分类】:
http://blog.csdn.net/freewebsys/article/category/7076584
主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。

本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108191889

1,关于历史数据接口问题


因为要迁移 tushare 到 akShare 涉及到的函数都需要修改下,
历史数据的获得使用 stock_zh_a_hist 因 ak 更新频繁,所以最新的代码参数使用 help 来解决问题。

2,使用help 查看函数


import akshare as ak
>>> help(ak.stock_zh_a_hist)
Help on function stock_zh_a_hist in module akshare.stock_feature.stock_em_hist:

stock_zh_a_hist(symbol: str = '000001', start_date: str = '19700101', end_date: str = '22220101', adjust: str = '') -> pandas.core.frame.DataFrame
    东方财富网-行情首页-上证 A 股-每日行情
    http://quote.eastmoney.com/concept/sh603777.html?from=classic
    :param symbol: 股票代码
    :type symbol: str
    :param start_date: 开始日期
    :type start_date: str
    :param end_date: 结束日期
    :type end_date: str
    :param adjust: choice of {"qfq": "1", "hfq": "2", "": "不复权"}
    :type adjust: str
    :return: 每日行情
    :rtype: pandas.DataFrame

因为在代码调用的过程中,发现稳定中有 period: str = ‘daily’ 参数,可能是版本没有更新造成的。我这里报参数错误。默认是按照日期维度查询的。问题不大。

历史数据的计算每天往回计算 3 个月的数据。

# 增加读取股票缓存方法。加快处理速度。
def get_hist_data_cache(code, date_start, date_end):
    cache_dir = bash_stock_tmp % (date_end[0:7], date_end)
    # 如果没有文件夹创建一个。月文件夹和日文件夹。方便删除。
    # print("cache_dir:", cache_dir)
    if not os.path.exists(cache_dir):
        os.makedirs(cache_dir)
    cache_file = cache_dir + "%s^%s.gzip.pickle" % (date_end, code)
    # 如果缓存存在就直接返回缓存数据。压缩方式。
    if os.path.isfile(cache_file):
        print("######### read from cache #########", cache_file)
        return pd.read_pickle(cache_file, compression="gzip")
    else:
        print("######### get data, write cache #########", code, date_start, date_end)
        stock = ak.stock_zh_a_hist(symbol= code, start_date=date_start, end_date=date_end, adjust="")
        stock.columns = ['date', 'open', 'close', 'high', 'low', 'volume', 'amount', 'amplitude', 'quote_change',
                         'ups_downs', 'turnover']
        if stock is None:
            return None
        stock = stock.sort_index(0)  # 将数据按照日期排序下。
        print(stock)
        stock.to_pickle(cache_file, compression="gzip")
        return stock

并且根据 code 进行相关的数据缓存,减少服务器请求次数。加快运算。
即使这样,也需要些时间20 多分钟,才可以把股票的全部数据进行缓存下。
然后在进行计算。
虽然这个函数叫上证a股数据,但是实际上啥股票历史数据都可以查询。

3,总结


差不多把相关的 tuShare的代码,都替换成了 akShare 的相关代码了。
但是akShare的数据资料接口实在是太多了,也太厉害了。这边只是找了几个基础的数据做股票运算,其他数据后续再研究。
等全部都修改好了,发布一个2.0 的版本。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/81665552

博主地址是:https://blog.csdn.net/freewebsys

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐