首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何把akshare行情无缝切换tushare行情代码封装

如何把akshare行情无缝切换tushare行情代码封装

作者头像
子晓聊技术
发布2026-04-23 16:35:12
发布2026-04-23 16:35:12
1220
举报
文章被收录于专栏:子晓AI量化子晓AI量化

最近有同学问我,之前实现的量化分析基本用akshare的ak.stock_zh_a_hist方法,最近抓取东方财富经常出现问题,sleep了还是被拒绝,这种情况一般是ip被封了。 能否在改动少量的代码情况下,实现行情无缝切换到tushare。

其实这个需求很简单, 我之前封装过。 要不我把之前封装的代码分享一下,以便有需求的同学。 其实 改用 miniqmt等也可以用类似的思路。 我们可以通过开关选择对应的数据源, 或者用备用冗杂处理数据源。

这里庖丁解牛分析下实现的步骤,大概有4个步骤

1、数据源初始化和认证

比如你用tushare, 先到官网去注册账号

import tushare as ts

# 替换 'YOUR_API_TOKEN' 为你在Tushare官网获取的实际token

ts.set_token('YOUR_API_TOKEN') pro = ts.pro_api()

2、转换股票代码

Tushare 要求代码包含交易所后缀。你需要一个简单的转换函数。

3、获取历史行情数据

从akshare获取的行情数据改为tushare获取行情数据

4、列名映射与数据清洗

直接获取tushare返回得到的数据框列名,和akshare肯定是不同的,需要映射到你所熟悉的AKShare列名。

这样一看,你想把akshare换成miniqmt 封装是不是类似的思路。

这里贴一下完整代码,参考下思路, 具体根据自己的实际情况改造。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。 希望我的分享对大家有所帮助

代码语言:javascript
复制
import akshare as ak
import tushare as ts
import pandas as pd

def convert_to_tushare_code(ak_share_code):
    """
    将 AKShare 的股票代码(如'600519')转换为 Tushare 格式(如'600519.SH')
    简单的判断规则:6开头为上证(SH),0或3开头为深证(SZ)
    """
    if ak_share_code.startswith('6'):
        return ak_share_code + '.SH'
    elif ak_share_code.startswith('0') or ak_share_code.startswith('3'):
        return ak_share_code + '.SZ'
    elif ak_share_code.startswith('8') or ak_share_code.startswith('9'):
        return ak_share_code + '.BJ'
    else:
        raise ValueError(f"无法识别的股票代码: {ak_share_code}")
def stock_zh_a_hist_tushare(stock_code, start_date, end_date, adjust):
    ts.set_token('XXXXX')
    pro = ts.pro_api()
    df = pro.daily(ts_code= convert_to_tushare_code(stock_code),  start_date=start_date, end_date=end_date, adjust=adjust)
    df = df.sort_values('trade_date').reset_index(drop=True)
    # 列名映射字典
    column_mapping = {
        'trade_date': '日期',
        'open': '开盘',
        'high': '最高',
        'low': '最低',
        'close': '收盘',
        'vol': '成交量',
        'amount': '成交额',
        'pct_chg': '涨跌幅'
    }
    # 选择你需要的列并重命名
    df.rename(columns=column_mapping, inplace=True)
    # 转换日期格式为 datetime 类型
    df['日期'] = pd.to_datetime(df['日期'])
    return df
if __name__ == "__main__":
    stock_code = '600519'
    start_date = '20250101'
    end_date = '20250926'
    # df1 = ak.stock_zh_a_hist(symbol=stock_code, start_date=start_date, end_date=end_date, adjust="qfq")
    # print(df1.head(10))
    df2 = stock_zh_a_hist_tushare(stock_code=stock_code,  start_date=start_date, end_date=end_date, adjust='qfq')
    print(df2.head(10))

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档