> Source: https://ashareapi.com/developers/  ·  Markdown version for LLMs / AI agents

开发者

# 两行代码，拿到 DataFrame
 官方 SDK 把 HTTP 端点包成一行方法调用 —— 不用自己拼 URL、不用处理重试、不用解析返回结构。
 [看文档](/docs)[看定价](/pricing)

 安装 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)` | 量化回测

 [看完整端点清单](/endpoints)

## 相关入口
 [文档 / 快速开始

 鉴权、错误码、返回结构](/docs)[端点清单

 每个端点的参数与字段](/endpoints)[MCP 接入

 让 AI Agent 直接调用](/mcp)
