← 返回学习中心
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-26 | 2945 | 2968 | 2940 | 2961 | 612345 | 1832000 | 2958 |
| 2026-06-29 | 2960 | 2975 | 2951 | 2970 | 588210 | 1841500 | 2966 |
第一次能把这张表打印出来,就算入门了。剩下的全是"在这张表上加列、画图、找信号"。
4豆粕 / 玉米 接口速查
记住这 4 个函数,覆盖你入门阶段 90% 的需求:
| 你想要 | 函数 | 关键参数 |
| 主力连续日线(入门首选) | futures_main_sina | symbol="M0"/"C0", start_date, end_date |
| 某个具体合约日线 | futures_zh_daily_sina | symbol="M2509" |
| 分钟线 | futures_zh_minute_sina | symbol="M0", period="5" |
| 实时盘口 | futures_zh_spot | symbol="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常见坑 + 参考
- 列名是中文,且价格常为字符串 → 算数前 .astype(float)。
- 新浪接口偶尔限频/抽风 → 多试一次,或循环取数时加 time.sleep(1)。
- 装完抓不到数 → 先 pip3 install akshare --upgrade 升到最新版再试。
- 想要更干净的换月处理(前复权连续合约)→ 以后了解 TqSdk(你笔记里已提到),它对期货回测更专业。