推荐一个适合小白上手的Python量化框架!
一上来就写策略,结果连数据列都喂不对,这种量化入门我见过太多次。
回测框架不是越“金融味”越好,小白第一步也别急着谈因子、Alpha、夏普、回撤那一套。先把三件事跑通:数据怎么进来,策略怎么触发,回测结果怎么看。
这地方我比较推荐 AKQuant。
它不是那种纯 Python 慢慢循环 K 线的老框架。AKQuant 官方定位是 Rust + Python 的高性能量化研究框架,底层把事件循环、计算、撮合这类重活交给 Rust,上层仍然用 Python 写策略。这个取舍对小白挺友好:你不用一上来学 Rust,但也不用太早被 Python 回测速度劝退。官方快速开始里也给了 pip install akquant 和 run_backtest 这种入口,门槛不算高。
先别急着接实盘。
我一般建议小白就拿它干一件事:把一个很土的策略,从数据清洗到回测结果完整跑一遍。能跑通这个,再谈优化。不然上来就搞机器学习选股,最后十有八九卡在字段名、日期格式、复权数据这些破事上。
安装可以这样来:
python -m pip install akquant akshare pandas
AKQuant 项目当前声明支持 Python 3.10 及以上,依赖里也能看到 pandas、numpy、pyarrow、polars 这些数据处理组件,所以别拿太老的 Python 环境折腾,环境问题最烦。
下面这段代码,我故意不写复杂。策略就一个:短均线上穿长均线买入,跌破就清仓。它不高级,也别指望靠这个赚钱,但很适合拿来摸清 AKQuant 的使用手感。
import pandas as pd
import akshare as ak
from akquant import Strategy, run_backtestdefload_daily_bar(symbol: str, start: str, end: str) -> pd.DataFrame:
raw = ak.stock_zh_a_daily(
symbol=symbol,
start_date=start,
end_date=end,
adjust="qfq"
)
df = raw.rename(columns={
"date": "date",
"open": "open",
"high": "high",
"low": "low",
"close": "close",
"volume": "volume",
}).copy()
df["date"] = pd.to_datetime(df["date"])
df["symbol"] = symbol
df = df.sort_values("date")
for col in ["open", "high", "low", "close", "volume"]:
df[col] = pd.to_numeric(df[col], errors="coerce")
df = df.dropna(subset=["open", "high", "low", "close"])
return df[["date", "symbol", "open", "high", "low", "close", "volume"]]
classLazyMaStrategy(Strategy):
def__init__(self):
self.close_cache = {}
defon_bar(self, bar):
prices = self.close_cache.setdefault(bar.symbol, [])
prices.append(float(bar.close))
if len(prices) < 20:
return
ma5 = sum(prices[-5:]) / 5
ma20 = sum(prices[-20:]) / 20
pos = self.get_position(bar.symbol)
if pos == 0and ma5 > ma20:
self.buy(bar.symbol, 100)
if pos > 0and ma5 < ma20:
self.close_position(bar.symbol)
if __name__ == "__main__":
bars = load_daily_bar("sh600000", "20240101", "20241231")
if bars.empty:
raise RuntimeError("没有拿到行情数据,先检查股票代码、日期范围或者数据源。")
result = run_backtest(
data=bars,
strategy=LazyMaStrategy,
symbols="sh600000",
initial_cash=100000.0,
commission_rate=0.0003
)
print(result)
这段代码里有几个地方别跳过。
第一,数据列名要老老实实整理成 date、symbol、open、high、low、close、volume。很多小白跑不起来,不是策略错了,是数据进框架前就脏了。日期是字符串、成交量里混了空值、数据没排序,这些问题回测框架不会替你背锅。
第二,策略里别一上来写一堆指标。我这里直接在 on_bar 里维护一个 close_cache,土是土了点,但好查。你真遇到信号不对,直接打印最近 20 根收盘价就能看出来,不用在一坨向量化代码里猜。
第三,buy 和 close_position 先用最简单的。新手阶段最怕的是订单类型搞太复杂,策略还没验证,止盈止损、滑点、仓位管理全塞进来,最后亏在哪都不知道。
AKQuant 适合小白的点,不是它能把量化变简单。量化本身不简单。
它真正舒服的地方是:Python 这边写起来像正常策略代码,底层又不是完全靠 Python 硬跑。官方文档里也提到它支持快速回测、报告输出、合约元数据访问、复杂订单等能力,后面想继续深入,不至于刚入门就换框架。
但我也得泼点冷水。
小白别把 AKQuant 当“赚钱框架”。它只是帮你更快验证想法。历史回测跑得再好,也不代表实盘能活。手续费、滑点、停牌、涨跌停、成交量不足,这些东西才是真正磨人的地方。
我自己的建议是,刚开始就按这个顺序来:
先跑通单股票日线回测。
再加手续费。
再看最大回撤。
再换几只股票测。
最后再考虑多标的、多因子、机器学习。
顺序别反。
框架选 AKQuant 没问题,尤其是已经会一点 Python、想拿 AKShare 这类数据源练手的人。别贪多,先写一个能跑、能查、能复盘的小策略,比收藏十个量化框架靠谱多了。