开发者

两行代码,拿到 DataFrame

官方 SDK 把 HTTP 端点包成一行方法调用 —— 不用自己拼 URL、不用处理重试、不用解析返回结构。

安装SHELL
pip install ashareapi
npm install ashareapi
30 秒上手
from ashareapi import AShareAPI

cli = AShareAPI()                      # free endpoints need no key
df  = cli.kline("sh600519", "day", 30)
print(df.tail())
30 秒上手
import { AShareAPI } from 'ashareapi'

const cli  = new AShareAPI()           // free endpoints need no key
const rows = await cli.kline('sh600519', 'day', 30)
console.log(rows.slice(-5))

付费端点(财务 / 资金 / 龙虎榜 / 因子选股 / 量化回测等)填上 Key 即可,其余写法完全一样。

为什么用 SDK 而不是手拼请求

返回直接是 DataFrame

多数端点返回表,SDK 自动转 pandas DataFrame;未装 pandas 也能用(退回字典列表)。

代码格式不用管

sh600667 / 600667.SH / 600667 都认,SDK 自动归一化。

错误分类清楚

鉴权 / 限频 / 上游失败 / 无数据分四类 —— 无数据 ≠ 失败,每类都告诉你该做什么。

零依赖 · 类型完整

Node 版只用原生 fetch(无第三方依赖);自带 TypeScript 类型,编辑器里直接补全。

口径固定

K 线复权口径由服务端固定,不会二次复权。

不用你维护

多源切换 / 缓存 / 巡检都在服务端;取数失败会自动换源。

能接进什么

SDK 只做一件事:把数据变成你能直接用的结构。剩下的由你决定 —— 下面是最常见的几种用法。

Jupyter / 本地研究

`pip install ashareapi` 之后,一个变量就是一张表,直接画图、算因子、写报告。

自建看板 / 内部工具

服务端调用,把 DataFrame 或 JSON 喂给你的前端 / BI。

策略脚本 / 回测

取数封装在 SDK 里,策略代码只关心逻辑。

批量扫描

一次拿一批标的的资金流 / K 线,适合扫池子。

接到 QMT / Ptrade

这两个终端的内置 Python 版本较旧(QMT 3.6 · Ptrade 3.5,部分券商 3.11),且有券商库白名单与沙箱限制,第三方包默认装不进去。可行做法是「外部取数、终端读文件」—— 策略代码只读本地文件,不联网。

① 外部脚本取数(普通 Python 环境)

用 SDK 拉数据,落成本地 CSV —— 这一步在终端之外跑。

② 策略内只读文件

QMT / Ptrade 内置 pandas,直接读 CSV,不装任何第三方包、不发起网络请求。

③ 换标的只改一个列表

数据层与策略层分离,策略代码不随数据源改动。

外部取数
# fetch.py —— 在终端【之外】用普通 Python 跑(3.9+)
from ashareapi import AShareAPI

cli = AShareAPI("ct-你的KEY")
codes = ["sh600519", "sz000001"]

for code in codes:
    df = cli.kline(code, "day", 250)      # 已返回 DataFrame
    df.to_csv("%s.csv" % code, index=False)
策略内读取
# strategy.py —— 放进 QMT / Ptrade 的策略文件里(只读本地文件)
# ⚠️ 列名以 SDK 实际返回为准:date / open / last / high / low / volume / amount
import pandas as pd

def initialize(context):
    # 终端内置 pandas ⇒ 直接读 CSV,不装第三方包、不联网
    context.data = pd.read_csv("sh600519.csv")
    context.data["ma20"] = context.data["last"].rolling(20).mean()

def handle_data(context, bar):
    row = context.data[context.data.date == bar.time]
    if len(row) == 0:
        return
    ma20 = row.iloc[0]["ma20"]
    if bar.close > ma20:
        order_target_percent("600519.SS", 1.0)

为什么不让 SDK 直接跑在终端里:内置版本低于本包要求的 3.9,且有白名单 / 沙箱拦截。走文件交换可绕开这些限制,同时保持策略侧零依赖。

常用方法

完整清单与参数见文档;下面是上手最常用的几个。

方法说明
quote(code)实时行情快照
kline(code, period, count)K 线(日 / 周 / 月 / 季 / 年 + 分钟线)
klineFull(code)全历史日线一次拿全
minute(code, days)分时(当日 / 近 5 日)
fund(code)资金流 + 龙虎榜 + 大宗 + 两融
lhb(type)龙虎榜分榜(机构 / 游资 / 活跃席位)
finance(code)三大报表
technical(code)MA / MACD / KDJ / RSI / BOLL
screen(expr, preset)因子选股
backtest(opts)量化回测

相关入口