← 返回学习中心

🐍 AKShare 期货数据入门教程

从安装到拉出豆粕、玉米的趋势行情 · 2026-06-30
免费 · 开源 · 不需要账号,一行命令就能取数

1AKShare 是什么

AKShare 是一个开源的 Python 财经数据库。它的角色很纯粹:把行情数据从交易所/新浪/东方财富抓下来,整理成 pandas 表格。免费、开源、不需要开户或 API key。

它不做的事:不帮你回测、不帮你下单、不替你判断买卖。它只是"原料入口"。研究和回测交给 Backtrader/vectorbt,执行交给文华/同花顺,决策交给你自己。(对应你笔记里"Python 做研究、软件做执行、人做决策"的分工)

2安装

你本机是 Python 3.9(官方要求 3.9+,64 位,Apple M 系列芯片可直接装)。打开终端:

# 标准安装 / 升级 pip3 install akshare --upgrade # 如果下载慢(国内网络),走清华镜像 pip3 install akshare --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple # 超时报错时加长超时时间 pip3 --default-timeout=100 install -U akshare
两个小坑:① 官方建议每次用之前都升级一下(数据源接口会变,旧版本容易抓不到);② 你自己的文件/文件夹不要起名叫 akshare.py,否则 import 会冲突。

验证装好了:

python3 -c "import akshare as ak; print(ak.__version__)"

3第一段代码:取出豆粕行情

商品期货里,玉米代码是 C,豆粕是 M(都在大连商品交易所 DCE)。学趋势,你要的是"主力连续"日线,写法是代码后面加 0,即 M0 / C0

import akshare as ak # 豆粕主力连续,日线(新浪数据源) df = ak.futures_main_sina(symbol="M0", start_date="20230101", end_date="20260630") print(df.tail())

跑完你会看到一张表,最后几行长这样(数值为示意):

日期开盘价最高价最低价收盘价成交量持仓量动态结算价
2026-06-26294529682940296161234518320002958
2026-06-29296029752951297058821018415002966
第一次能把这张表打印出来,就算入门了。剩下的全是"在这张表上加列、画图、找信号"。

4豆粕 / 玉米 接口速查

记住这 4 个函数,覆盖你入门阶段 90% 的需求:

你想要函数关键参数
主力连续日线(入门首选)futures_main_sinasymbol="M0"/"C0", start_date, end_date
某个具体合约日线futures_zh_daily_sinasymbol="M2509"
分钟线futures_zh_minute_sinasymbol="M0", period="5"
实时盘口futures_zh_spotsymbol="M0", market="CF"

period 可取 "1" "5" "15" "30" "60"(分钟)。market="CF" 表示商品期货(金融期货是 "FF")。

具体合约 vs 主力连续,区别一定要懂

具体合约 M2509

2025 年 9 月交割的豆粕。到期后就没新数据了——像一张有"保质期"的合约。

主力连续 M0

数据源把每个时期成交最活跃的那张合约拼成一条长序列,方便看几年的大趋势。学趋势用它。

主力连续的代价:换月拼接点附近,价格会有一个"跳变"(旧合约和新合约价格不完全一样)。看长期趋势没问题,但精细回测时这个跳空要单独处理。先知道有这回事就行。

5看懂返回的字段

比股票多出来的两列,恰恰是期货做趋势最有用的信息:

字段含义趋势交易里怎么用
开/高/低/收盘价当天的 K 线四个价画 K 线、算均线的原料
成交量当天买卖了多少手突破时放量 = 行情更可信
持仓量市场上还没平掉的合约数趋势中持仓量持续增加 = 有新资金进场认同方向
动态结算价当天加权结算价盈亏结算、保证金计算的基准
价格字段经常是字符串,算均线前先转成数字:df["收盘价"] = df["收盘价"].astype(float)

6结合趋势交易,怎么高效学

不要一上来就追求"完整量化系统"。按下面这条路一周一步,每一步都能在豆粕/玉米的真实数据上看到结果,这才是高效的学法:

1
取数 + 画图:用 futures_main_sina 把 M0、C0 三年日线拉下来,用 matplotlib 画出收盘价曲线。目标:手能拿到数据、眼能看到走势。
2
叠加均线:算 MA5 / MA20,画在 K 线上。把你笔记《K线均线趋势交易教程》里的概念,第一次和真实豆粕走势对上号。
3
标记金叉/死叉:用代码自动找出 5 日上穿/下穿 20 日的那些天,打印日期。目标:让"信号"从概念变成具体的某一天。
4
肉眼复盘:对照图,看每个金叉之后豆粕到底涨没涨、死叉之后跌没跌。哪些信号有效、哪些是假信号——这是趋势交易最值钱的直觉。
5
再上回测框架:感觉建立之后,才把规则丢给 Backtrader 算胜率、最大回撤。此时数字你才看得懂。

第 1~3 步的完整代码(可直接跑)

把均线和金叉死叉一次性算出来:
import akshare as ak df = ak.futures_main_sina(symbol="M0", start_date="20240101", end_date="20260630") df["收盘价"] = df["收盘价"].astype(float) df["MA5"] = df["收盘价"].rolling(5).mean() df["MA20"] = df["收盘价"].rolling(20).mean() # 信号 = 1:金叉(5日刚上穿20日,转多);= -1:死叉(转空) df["信号"] = (df["MA5"] > df["MA20"]).astype(int).diff() print(df[df["信号"] != 0][["日期", "收盘价", "信号"]].tail(10))
关键认知:这段代码只生成信号,不是叫你照着下单。趋势交易学习期的第一目标不是赚钱,而是搞懂:信号为什么发、什么时候失效、一次看错最多亏多少。豆粕、玉米波动相对温和、保证金低,正是适合练手的入门品种。

7常见坑 + 参考