PyBroker算法交易实战:3步跑通第一个机器学习回测策略
【免费下载链接】pybrokerAlgorithmic Trading in Python with Machine Learning项目地址: https://gitcode.com/gh_mirrors/py/pybroker
当你熬夜写出一套交易规则,想在历史行情上验证它到底能不能赚钱时,却发现要么手工回测慢到怀疑人生,要么自己写的回测代码bug一堆、结果根本不敢信。PyBroker这个Python算法交易框架,就是为这套"写规则→拉数据→跑回测→评估结果"的流程而生的,而且它把机器学习建模也直接整合进了回测链路。
一句话说清:PyBroker 是个把"数据源→策略→模型→回测→评估"串成一条流水线的算法交易工具箱,重点支持把机器学习模型塞进策略里做买卖预测。适合想快速验证交易想法、又不想从零造回测引擎的 Python 开发者——新手和有一定经验的交易者都能直接上手。
上手三步:从安装到跑出第一张订单表
第一步:装好环境,准备好数据源
PyBroker 支持 Python 3.11+,一条命令即可安装:
pip install -U lib-pybroker想边看源码边学的话,也可以把仓库克隆到本地慢慢啃:
git clone https://gitcode.com/gh_mirrors/py/pybroker数据源方面,它内置了 Yahoo Finance、Alpaca、AKShare 等接入方式,也可以挂上你自己的数据。对新手最友好的就是YFinance,无需注册 API Key,拿来就能用。
第二步:写下第一个策略并触发回测
下面这段代码是一个经典的"创10日新高买入"规则策略:价格突破过去10天的最高价就买入,持有5根K线,同时挂一个2%的止损。
from pybroker import Strategy, YFinance, highest 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 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)注意warmup=20:指标需要至少20根K线才能算出有效值,这个参数先记在心里,后面避坑环节还会提到。
第三步:看懂回测结果,别只盯一个收益率数字
回测跑完后,result里装着几样东西:orders_df是逐笔订单明细,metrics是收益率、夏普比率、最大回撤等汇总指标,positions_df则是每天持仓的变化。
上图就是orders_df的样子。每一行是一笔真实生成的订单,你能看到开仓/平仓方向、成交标的、成交价、成交股数,甚至能追溯到这笔单是由哪个信号触发的。养成先翻订单明细、再下结论的习惯,比只看一个总收益率靠谱得多。
实战进阶:三个最值得先玩的功能
进阶一:把机器学习模型接进策略,用 Walkforward 防"马后炮"
PyBroker 最大的卖点,就是模型训练和回测是"长在一起"的。你只需要注册一个模型,在策略里读取它的预测值:
import pybroker from pybroker import Strategy def train_fn(symbol, train_data, test_data): # 用指标特征训练模型 return trained_model my_model = pybroker.model('my_model', train_fn, indicators=[...]) def exec_fn(ctx): preds = ctx.preds('my_model') if not ctx.long_pos() and preds[-1] > 0.6: ctx.buy_shares = 100 elif ctx.long_pos() and preds[-1] < 0.4: ctx.sell_all_shares() strategy.add_execution(exec_fn, ['AAPL'], models=my_model) result = strategy.walkforward(windows=5, train_size=0.5)这里walkforward是重点:它会像实盘一样,把数据切成多个窗口,始终用"过去的数据训练、未来的数据验证",避免你用整段历史训练完再去回测同一段历史,得出一个漂亮但虚假的收益。想判断策略是否真的能打,这一步绕不开。
进阶二:自定义指标,几行代码注册进策略
内置指标不够用?PyBroker 支持用纯 Python 写自己的指标函数,注册后就能在策略里通过ctx.indicator(...)取到,用法和内置指标完全一致。写指标时可以访问完整的价格序列,自由度很高,适合把你独特的交易逻辑沉淀成可复用代码。
进阶三:缓存 + 参数优化,别让等待拖垮开发节奏
下载的数据、计算过的指标、训练好的模型都可以被缓存。你会发现调参时数据不用反复下载、指标不用反复重算,开发节奏明显变快。再配合参数优化工具,把策略参数范围丢进去自动搜索最优组合,相当于给策略开发加了个"自动寻优"外挂。
避坑提醒:新手最容易踩的三个坑
- 忘设
warmup导致结果全是 NaN。指标前几根K线算不出值,如果你在ctx.indicator(...)里拿到空值还去做比较,轻则报错、重则回测结果悄悄出错。我一开始就吃过这个亏,后来养成习惯:凡是加了指标,先想清楚需要多少根K线的预热期。 - 日期格式和时区没对齐。YFinance 的
start_date用的是'1/1/2025'这种格式,写错成'2025-01-01'某些数据源也能解析,但不同数据源行为不一致,最稳妥的办法是统一按官方示例的格式写,并留意数据是否真的有覆盖到起止日期。 - 把"零成本理想回测"当成实盘收益。默认回测里手续费、滑点都是零,模型在盘中跑和盘后回测的表现也有差异。PyBroker 提供了滑点建模等工具,记得在回测里把这些成本加上,评估结果才接近真实。
下一步:从跑通一个 Notebook 开始
看完这篇文章,你已经知道了 PyBroker 解决什么问题、怎么装、怎么跑第一个回测、以及有哪些坑。剩下的就是动手:克隆仓库,从"Getting Started with Data Sources"这个 notebook 开始,把数据源跑通,再依次体验规则策略、模型策略和 Walkforward 回测。别想着一口气全部学会,先让第一个策略在屏幕上跑出订单表格,你就已经跨过算法交易入门最大的那道坎了。现在就去试试吧。🚀
【免费下载链接】pybrokerAlgorithmic Trading in Python with Machine Learning项目地址: https://gitcode.com/gh_mirrors/py/pybroker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考