python股票交易数据接口哪个好

企业微信

主流python股票数据接口对比

获取股票历史行情、实时行情、基本面数据是量化交易的第一步。python生态中,tushare、akshare、baostock、yfinance、pandas-datareader等接口各有侧重。tushare老牌稳定但积分门槛逐年提高,akshare完全免费且覆盖期货、期权、基金,baostock无需注册但仅限A股。选择接口需考虑数据频率、字段完整性、更新延迟和调用限制。

tushare pro

tushare pro需要注册并获取token,积分制下部分接口(如分钟线、实时tick)要求较高积分。基础日线数据对积分要求低,适合个人投资者。


import tushare as ts

ts.set_token('your_token')

pro = ts.pro_api()

df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20241231')

print(df.head())

tushare的复权数据通过adj_factor接口计算,分红送股数据齐全。缺点是积分获取需要邀请或付费,高频调用易被封禁。

python股票交易数据接口哪个好

akshare

akshare无需token,直接调用函数即可返回pandas DataFrame。股票、期货、外汇、宏观数据均包含。股票日线接口为stock_zh_a_hist,期货主力连续合约为futures_main_sina。


import akshare as ak

# 股票日线

df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20241231", adjust="qfq")

# 期货主力连续

df_fut = ak.futures_main_sina(symbol="RB0", start_date="20240101", end_date="20241231")

akshare数据源来自新浪、东财、同花顺等公开页面,偶发反爬导致请求失败,需增加重试机制。

baostock

baostock提供免费A股历史K线,包含复权因子、财务数据。登录后查询,无需积分。


import baostock as bs

lg = bs.login()

rs = bs.query_history_k_data_plus("sh.600000", "date,code,open,high,low,close,volume,amount,adjustflag", start_date='2024-01-01', end_date='2024-12-31', frequency="d", adjustflag="2")

data_list = []

while (rs.error_code == '0') & rs.next():

    data_list.append(rs.get_row_data())

df = pd.DataFrame(data_list, columns=rs.fields)

bs.logout()

baostock不提供实时行情,适合回测历史数据。

期货数据接口选择

期货数据分为历史行情和实时tick。历史数据可用akshare的futures_zh_daily_sina或tushare的fut_daily。实时tick需要CTP接口或vnpy、pyctp等封装。

CTP接口

上期技术CTP是期货公司主流交易接口,通过python的ctpwrapper或vnpy连接。需要期货账户和经纪商授权。


from vnpy_ctp import CtpGateway

from vnpy.event import EventEngine

from vnpy.trader.engine import MainEngine

event_engine = EventEngine()

main_engine = MainEngine(event_engine)

main_engine.add_gateway(CtpGateway)

main_engine.connect({'用户名':'your_id','密码':'your_pwd','经纪商代码':'9999','交易服务器':'tcp://...','行情服务器':'tcp://...','产品名称':'','授权编码':''}, 'CTP')

CTP接口延迟低,适合实盘交易。回测可用akshare或tushare的历史数据。

数据频率与清洗

日线数据可直接使用,分钟线需注意时间戳对齐。akshare的分钟线接口stock_zh_a_minute返回近期数据,历史分钟线需付费或自行合成。期货tick数据用ctp的onTick回调保存。

量化回测数据准备

回测需要复权价格、交易日历、涨跌停价格。tushare的pro_bar接口支持前复权、后复权。akshare的stock_zh_a_hist通过adjust参数控制。


# tushare复权

from tushare.pro import client

df = ts.pro_bar(ts_code='000001.SZ', adj='qfq', start_date='20240101', end_date='20241231')

# akshare复权

df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20241231", adjust="hfq")

交易日历可用tushare的trade_cal或akshare的tool_trade_date_hist_sina。涨跌停价格需根据前收盘价计算,ST股票幅度不同。

实时行情推送

实时行情可用新浪财经接口或券商API。akshare的stock_zh_a_spot_em返回东财实时快照,延迟约数秒。期货实时行情用CTP的行情前置。


# akshare实时快照

df = ak.stock_zh_a_spot_em()

print(df[df['代码']=='000001'])

高频策略需要tick级数据,建议使用CTP或券商Level-2接口。python中可用pyzmq接收CTP行情并写入数据库。

数据存储方案

小规模数据存CSV或SQLite,大规模用MySQL、PostgreSQL、ClickHouse。tick数据推荐Parquet格式列式存储。


import pandas as pd

df.to_parquet('tick_data.parquet', engine='pyarrow')

ClickHouse适合存储千万级tick,查询速度快。InfluxDB适合时序数据但python生态稍弱。

接口稳定性与反爬

akshare依赖网页解析,频繁请求可能被封IP。建议设置请求间隔、使用代理、缓存数据。tushare有频率限制,每分钟不超过500次。baostock稳定但数据更新慢。


import time

import akshare as ak

for code in ['000001','000002']:

    try:

        df = ak.stock_zh_a_hist(symbol=code, period="daily", start_date="20240101", end_date="20241231")

    except Exception as e:

        print(f"{code} failed: {e}")

    time.sleep(1.5)

备用方案:同时使用两个接口,一个失败时切换另一个。

个人量化回测:akshare + baostock组合,免费且数据全。

实盘期货交易:CTP + vnpy,低延迟。

基本面选股:tushare pro,财务字段完整。

分钟级回测:tushare积分或购买专业数据。

实时股票监控:akshare的东财快照或券商API。

选择接口时测试数据准确性,对比不同来源的收盘价和成交量。复权计算需一致,避免回测偏差。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/python-gupiao-shuju-jiekou-554.html