企业微信

akshare实时行情到底能拿来做什么

很多人第一次听说akshare,都是因为想用Python抓股票价格,又不想花钱买Wind或者同花顺的接口。akshare这个开源库把东方财富、新浪财经、腾讯财经这些网站的数据扒下来,整理成表格给你用。股票、期货、基金、外汇、债券,甚至宏观经济数据,它都能摸到。

核心价值就一个:免费。对于散户或者刚入门量化的人,这就是零成本起步的梯子。

akshare实时行情怎么用 股票期货数据获取的坑有哪些

股票实时行情怎么拉

akshare里跟股票实时行情相关的函数,用得最多的是stock_zh_a_spot_em。这个接口从东方财富拿数据,返回全市场A股的实时快照,包含代码、名称、最新价、涨跌幅、成交量、成交额、换手率、市盈率这些字段。

调用方式简单粗暴:


import akshare as ak

df = ak.stock_zh_a_spot_em()

print(df.head())

拿到的df就是一个Pandas DataFrame,你想怎么筛就怎么筛。比如只看涨幅超过5%的票:


df[df['涨跌幅'] > 5]

需要注意的是,这个接口返回的是快照数据,不是逐笔Tick。每次调用相当于给东财服务器发一次请求,拿回当前所有股票的最新状态。想做高频策略,这个粒度不够,但对日內手动交易或者中低频轮动策略,完全够用。

还有几个细分接口:stock_zh_a_spot是从新浪拿数据,stock_bid_ask_em可以看买卖五档盘口。盘口数据对做小单差价的交易者有用,但请求频率高了容易被封IP。

期货实时行情有什么不同

期货的实时行情接口跟股票逻辑类似,但细节差不少。akshare里常用的有futures_zh_spot和futures_zh_realtime。

futures_zh_spot主要拉国内三家商品期货交易所的实时行情,上期所、大商所、郑商所。你需要指定合约代码,比如symbol='V2309'对应PVC2309合约。返回字段包括最新价、买卖价、持仓量、成交量、今开、最高、最低。

futures_zh_realtime覆盖范围更广,还能拿到中金所的股指期货和国债期货。但这个接口有时候不稳定,因为底层数据源是新浪,新浪对期货的推送有延迟,大概几秒到十几秒不等。

商品期货和金融期货的代码格式不一样。上期所是品种代码+合约月份,比如cu2310;郑商所是大写字母,比如CF401;中金所的股指期货是IF2310这种。写代码的时候一定要做代码标准化,不然筛选合约会漏掉。

期货还有一个股票没有的字段:持仓量。持仓量变化配合价格变化,能看出资金是流入还是流出。价格上涨持仓量增加,说明多头在加仓;价格上涨持仓量减少,说明空头在平仓离场。这个逻辑在股票里没有直接对应物,是期货独有的观察维度。

实时抓数据的几个大坑

接口封禁。东财和新浪对频繁请求有反爬机制。你如果写个while True循环,每秒请求一次,几分钟后IP就被拉黑了。解决办法是控制频率,股票快照数据10秒以上请求一次比较安全。或者用time.sleep()加随机延迟。

数据缺失。akshare底层是爬虫,目标网站改版或者服务器抖动,返回的DataFrame可能缺列或者少行。写策略之前一定要加异常处理:


try:

    df = ak.stock_zh_a_spot_em()

    if df.empty:

        raise ValueError('empty data')

except Exception as e:

    print(f'获取失败: {e}')

    # 走备用数据源

时间戳问题。akshare的实时行情不带毫秒级时间戳,你拿到数据只能自己用datetime.now()打时间标记。做回测的时候,快照数据对应的时间点容易模糊,最好在交易时段内固定间隔采样。

集合竞价和盘后数据。早上9:15到9:25是集合竞价,这时候的行情快照跟连续竞价阶段逻辑不同。收盘后15:00到15:30,东财的数据可能会刷新成收盘价,也可能还停留在最后一笔。写策略要避开这些时间段,或者单独处理。

期货数据获取的额外注意事项

期货有夜盘。晚上21:00到次日凌晨2:30,不同品种收盘时间不一样。螺纹钢、橡胶这些到23:00,黄金、白银、原油到凌晨2:30。akshare的期货接口在夜盘时段能不能正常返回数据,取决于新浪的推送状态。实测下来,夜盘数据比日盘更容易断。

做期货策略,建议用主力连续合约代码,比如V0或者RB0,而不是具体月份合约。主力合约会换月,直接写死V2309,过段时间就失效了。akshare有futures_main_sina函数可以拿主力连续行情,但它是日线级别,不是实时Tick。

国内期货交易所对行情有授权限制,免费接口拿到的数据不是交易所直发,都是经过新浪或者东财转发。转发过程中会有丢包和延迟。做日内高频,这个延迟是致命的。真要玩高频,老老实实买CTP接口或者交易所Level-1行情。

普通人怎么用这些数据

不写代码的人,可以把akshare当成一个数据搬运工。每天收盘后跑一次脚本,把全市场股票行情存到Excel或者CSV里,第二天手动看。这个用法不需要实时性,只需要数据完整。

写代码的人,可以用akshare搭一个简单的监控面板。比如每30秒拉一次股票快照,把涨速榜、换手率榜、量比榜打印到终端。配合pandas做筛选,matplotlib画个分时图。别指望用它做自动交易,数据延迟足以让套利机会消失。

akshare的定位就是低成本数据源。它不完美,接口会挂,数据会缺,速度会慢。但免费的东西,能用就是赚。把预期放低,把异常处理写扎实,它就能成为你量化工具箱里趁手的螺丝刀。