30分钟跑通第一个量化回测:PyBroker 算法交易框架新手实战
【免费下载链接】pybrokerAlgorithmic Trading in Python with Machine Learning项目地址: https://gitcode.com/gh_mirrors/py/pybroker
PyBroker 是一个用 Python 写成的算法交易框架,核心卖点是把机器学习模型顺畅地接进回测流程。它自带高速回测引擎、多个行情数据源和一套完整的策略评估工具,新手完全可以在半小时内跑通自己的第一条策略。这篇文章不打算平铺直叙地罗列功能,而是带你按真实的上手顺序走一遍:装环境、取数据、写规则、加模型、看结果,每一步都告诉你为什么这么做。
开工前五分钟:装好库、选对行情源
安装没什么悬念,Python 3.11 以上的环境里一行命令即可完成:
pip install -U lib-pybroker装好之后,第一个要面对的问题就是:行情数据从哪来?PyBroker 给你留了好几条路:
- 想省事用免费数据,
YFinance直接帮你对接雅虎财经; - 想要更规整的历史 K 线,可以用
Alpaca,只需申请一对 API 密钥; - 对 A 股感兴趣,
AKShare数据源放在 ext 扩展模块里,拿来即用; - 数据本来就在你自己手里?那更简单,
Strategy可以直接吃下一个 DataFrame,或者实现一个DataSource子类喂进去。
把数据源想象成水龙头,PyBroker 只关心出水口规不规整——只要你的 DataFrame 带 date、open、high、low、close 这些基本列,它就能开工。想了解自定义数据源的具体写法,docs/source/notebooks/ 目录下的第 7 个 notebook 讲得很细。
十分钟写出一条带止损的买入规则
现在到了最有成就感的环节。写策略的核心,是定义一个"每个 bar 都会被调用"的函数,PyBroker 管它叫执行函数。在这个函数里,你可以通过ctx拿到当前的价格、指标数值和持仓状态,然后决定买还是卖。
举一个最经典的例子:股价创出 10 日新高就买入,持仓 5 天,同时挂一个 2% 的止损。
def exec_fn(ctx): high_10d = ctx.indicator('high_10d') if not ctx.long_pos() and high_10d[-1] > high_10d[-2]: ctx.buy_shares = 100 ctx.hold_bars = 5 ctx.stop_loss_pct = 2然后把执行函数挂到策略上,指定要交易的标的和指标,调用backtest就完事了:
strategy = Strategy(YFinance(), start_date='1/1/2025', end_date='8/1/2026') strategy.add_execution( exec_fn, ['AAPL', 'MSFT'], indicators=highest('high_10d', 'close', period=10)) result = strategy.backtest(warmup=20)看到这里你应该能感觉到:规则函数只负责"做决定",至于撮合成交、计算手续费、触发止损这些脏活累活,全被引擎承包了。这套回测引擎底层用 NumPy 加 Numba 编译加速,哪怕一次跑几十个标的的历史数据,也不会慢到让你有功夫去冲杯咖啡。
三步把预测模型接入你的交易决策
纯规则策略写起来很爽,但天花板也明显——规则终究是人拍脑袋定的。PyBroker 的另一半魅力,在于可以把机器学习模型直接变成交易信号的来源,相当于给策略装上一个"预测大脑"。
整个过程拆开只有三步:
- 用
pybroker.model('my_model', train_fn, indicators=[...])注册模型,告诉框架"这个模型靠哪些指标做预测"; - 在
train_fn(symbol, train_data, test_data)里完成训练并返回模型; - 在执行函数里用
ctx.preds('my_model')取最新预测值,超过买入阈值就进场,跌破卖出阈值就清仓。
模型训练和回测采用的是一种叫"滚动窗口(Walkforward)"的机制:把历史数据切成一段段连续的训练/测试窗口,模型永远只用自己训练期之前的数据来预测之后的表现。这样得到的回测结果,更接近真实交易里"用昨天的经验赚今天的钱",而不是一场开卷考试:
result = strategy.walkforward(timeframe='1m', windows=5, train_size=0.5)这个机制对新手尤其友好,因为它从设计上就挡住了回测圈最常见的作弊手段——前视偏差。在 PyBroker 里,执行函数拿到的数组永远只到当前这根 bar 为止,指标计算也经过了严格检查,想偷看"未来价格"基本没有门路。
回测结果别急着信:先看懂这三个关键指标
回测跑完,result里躺着一堆 DataFrame:订单明细(orders_df)、成交记录(trades_df)、持仓变化(positions_df)和汇总指标(metrics_df)。其中订单表很有看头,它记录了每一笔下单的类型、方向、数量和成交价,还会标注这笔订单是由哪个信号触发的,复盘策略逻辑时非常顺手。
看汇总指标时,建议你多留意三样东西:
- 置信区间:PyBroker 用随机自助抽样(bootstrap)给夏普比率、盈亏因子、最大回撤等指标算出区间,而不是丢给你一个孤零零的数字。区间越窄,说明策略表现越稳定,不是靠几笔运气交易撑起来的;
- 回撤分布:能赚钱的策略很多,扛得住回撤的很少。评估结果对最大回撤同样给出区间估计,别只盯着收益率看;
- 可复现性:同样的输入跑两遍,结果应该完全一致。框架内部对随机种子、求和顺序都做了确定性处理,这样你调参时才能确信"变好是真的变好"。
想批量分析或者对接其他工具,还可以用result.to_json()把回测结果导出成结构化数据。
三招提速回测:缓存、并行与自动调参
跑通之后,你大概率会进入"改来改去"的循环:调参数、加指标、换模型。这时候有三件事值得马上做:
- 开缓存:下载过的行情、算过的指标、训练好的模型都能落盘缓存。下次跑相同逻辑直接命中缓存,重复计算的时间全省了,一行
enable_caches()即可全部开启; - 开并行:多标的、多模型的训练和指标计算都支持并行,
set_parallel(n_jobs=...)一条语句搞定; - 交给搜索算法:手动试参数太累,PyBroker 接入了 Optuna,用
hyperparam声明参数范围,再调用optimize,框架会自动帮你搜出表现最好的参数组合。
另外值得一提,PyBroker 内置了一批重新实现的技术指标(ATR、MACD、随机指标、各类动量指标等),并且做了波动率归一化处理,让不同标的上算出的指标值可以直接互相比较——这在多标的策略里非常实用。
下一步怎么走:给三类用户的下手建议
到这里,"半小时跑通"的小目标已经达成。接下来往哪个方向深入,取决于你是谁:
- 纯新手:建议把 docs/source/notebooks/ 里的前几个 notebook 挨个过一遍,从数据接入、写规则到看评估结果,形成完整闭环;
- 有一定经验的交易者:可以钻进自定义数据源、滑点模型和仓位管理,相关逻辑分别在 src/pybroker/slippage.py、src/pybroker/portfolio.py 等模块里,改起来不费劲;
- 爱折腾 AI 的玩家:PyBroker v2 提供了一组 Agent Skills(放在 skills/ 目录下),能让 AI 编程助手直接帮你写策略、造指标、训模型,相当于请了一位会写回测代码的实习生。
最后提醒一句:回测跑得再漂亮,也只是对历史的一种合理猜测。把它当成策略开发的地基,而不是下注的依据。剩下的路,交给时间和实盘去验证。
【免费下载链接】pybrokerAlgorithmic Trading in Python with Machine Learning项目地址: https://gitcode.com/gh_mirrors/py/pybroker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考