尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

30分钟搭好量化回测系统:股票策略验证完整指南

30分钟搭好量化回测系统:股票策略验证完整指南 30分钟搭好量化回测系统股票策略验证完整指南【免费下载链接】backtesting.py Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py你可能经历过这样的场景策略回测曲线一路向上年化收益 40% 以上可一上实盘回撤接踵而至三个月后账户回到原点。问题往往不在策略逻辑而在于验证环节本身失真了。这篇文章用 Python 量化回测框架 backtesting.py带你从零完成一套完整的股票策略验证流程搭环境、写策略、跑通第一份回测报告最后做上线前自检。先想清楚回测能替你回答什么先回答一个问题你的策略经得起检验吗回测不是预言机但它能替你回答三类问题。风险前置实盘投钱之前先用历史数据暴露策略的致命缺陷最大回撤、最长水下期一目了然加速迭代几年行情压缩到几秒钟跑完策略迭代速度提升几个数量级去情绪化用数字替代我觉得让买入卖出都有可追溯的依据但回测回答不了的事要记清楚它无法预测未来的市场结构变化也无法保证回测里假设的成交价能真实成交。所以回测结果的定位是淘汰不合格的策略而不是证明策略一定赚钱。选型对比本地库、云端平台、专业软件选型方向本地 Python 库如 backtesting.py云端回测平台商业交易终端策略定制自由度完全自由想怎么写就怎么写受限于平台语法与模块半定制数据与费用自带数据无平台订阅费数据内置按年付费授权费用高回测速度中等依赖本地机器快分布式计算中等上手门槛需要 Python 基础低浏览器操作中等 对想深度打磨入场/出场信号的策略本地 Python 库的性价比最高数据自主、代码可复现、不产生额外费用。四步跑通第一份回测报告第一步环境准备一条命令装好回测框架先建一个独立的虚拟环境避免依赖污染其他项目然后安装核心依赖。akshare 用于后续获取 A 股数据。pip install backtesting pandas akshare第二步策略模板双均线加可优化参数策略类要继承Strategy重写两个方法init()里预计算指标next()里写每根 K 线的买卖判断。窗口参数写成类变量后续可直接交给优化器扫描。先用仓库自带的示例数据跑通生产时替换成 A 股数据即可。from backtesting import Strategy from backtesting.lib import crossover from backtesting.test import SMA class SmaCross(Strategy): fast, slow 10, 30 # 类变量参数可直接优化 def init(self): self.ma1 self.I(SMA, self.data.Close, self.fast) # self.I 包裹后自动绘图 self.ma2 self.I(SMA, self.data.Close, self.slow) def next(self): if crossover(self.ma1, self.ma2): # 金叉买一半仓位 self.buy(size0.5) elif crossover(self.ma2, self.ma1): # 死叉平掉多单 self.sell()第三步执行回测按 A 股规则设置资金与费用初始化Backtest时把费用设成贴近真实交易的成本。A 股佣金普遍在万 2.5万 3卖出另加 0.1% 印花税综合折进佣金参数即可。exclusive_ordersTrue表示不同时持有多空。from backtesting import Backtest from backtesting.test import GOOG # 仓库示例数据生产换成 A 股 OHLC bt Backtest(GOOG, SmaCross, cash100_000, # 初始资金 commission0.0008, # 约千分之 0.8含佣金与印花税折抵 exclusive_ordersTrue) stats bt.run() print(stats[[Return [%], Max. Drawdown [%], Sharpe Ratio]]) bt.plot(filenamereport.html) # 生成交互式回测报告第四步读懂报告先看这 3 个数字拿到报告别急着兴奋按顺序看三处收益与回撤Return [%]和Max. Drawdown [%]放在一起看100% 的收益配 60% 的回撤风险收益比是差的夏普比率Sharpe Ratio衡量每承担一单位风险的回报长期低于 1 的策略要谨慎逐笔交易stats[_trades]里看胜率、盈亏比与平均持仓天数确认策略行为符合你的设计官方入门教程见 doc/examples/包含多周期、参数热力图等进阶用法。回测报告与实盘的差异3 个主要来源再看报告漂亮之前先排除这三个坑差异来源怎么产生怎么规避前视偏差指标用到了未来数据如用全年数据做归一化指标只用当前及之前数据backtesting.py 的next()机制天然屏蔽未来数据策略过拟合参数调到历史曲线完美实际只是记住了历史样本外验证 参数敏感性检查见下文费用与成交失真回测默认理想成交没算滑点commission设成真实费率用更细粒度数据模拟日内交易⚠️ 过拟合是最常见的静默杀手回测越漂亮越要怀疑自己。方法一样本外验证把数据切两半前 80% 用于调参后 20% 封存只在调完参数后跑一次验证结果是否在未见过的数据上仍然成立。cut int(len(GOOG) * 0.8) train, test GOOG.iloc[:cut], GOOG.iloc[cut:] # 样本内调参 stats_in Backtest(train, SmaCross, commission0.0008).optimize( fastrange(5, 20, 5), slowrange(20, 50, 5)) best stats_in._strategy # 样本外验证只跑一次 stats_out Backtest(test, SmaCross, fastbest.fast, slowbest.slow, commission0.0008).run()样本外的收益与回撤若与样本内同量级策略才初步可信若样本外断崖式下跌基本可以判定是过拟合。方法二参数敏感性检查把最优参数往旁边挪 ±20%重跑一遍。稳健策略的参数邻域应该是高原——附近参数表现都差不多如果只有单个参数点突出、周围一片塌方那更像是历史噪声里的尖峰。 优化时把maximize指标从最终资金换成夏普比率或回撤调整后收益能显著降低挑出尖峰参数的概率。上线前自检清单把下面的清单逐条过完再考虑用真钱验证样本外区间的收益与回撤和样本内处于同一量级最优参数 ±20% 邻域内结果没有崩塌是高原不是尖峰佣金按真实交易成本设置包含 A 股卖出印花税总交易笔数不少于 100 笔胜率与盈亏比符合设计预期回测区间覆盖至少一段明确的下跌行情⚠️ 最后一关永远是实盘前的模拟盘纸面通过全部检查也要用小资金跑几周确认成交、滑点与回测假设一致。趋势上多因子与另类数据融合、滑点与流动性建模、参数自适应调整是量化回测的三个演进方向。回测系统的质量决定策略验证的上限——把这套验证流程固化下来你的每一个策略才能经得起市场的检验。【免费下载链接】backtesting.py Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表