Backtest.py做空策略无法实现100%胜率排查求助
Backtest.py做空策略无法达成100%预期胜率(做多策略正常)
我正在开发用于AI训练的数据模型,训练前用backtest.py做回测以验证模型正确性,目标是基于已有历史数据实现100%胜率。目前做多策略经调试后已正常运行,但做空策略始终达不到预期效果。我制作了最小复现示例,排查问题是否出在pandas、backtest库或自身代码逻辑中,相关信息如下:
环境依赖
backtest.py==0.3.3 pandas==2.1.4 numpy==1.24.3
测试数据
测试数据为严格下跌趋势的K线数据(CSV格式):
datetime,open,high,low,close,volume 2023-01-01 09:30:00,100,105,98,102,10000 2023-01-02 09:30:00,102,104,99,100,9500 2023-01-03 09:30:00,100,101,97,98,8000 2023-01-04 09:30:00,98,99,95,96,7500 2023-01-05 09:30:00,96,97,93,94,6000
复现代码
import pandas as pd from backtest import Backtest, Strategy # 正常运行的做多策略 class LongStrategy(Strategy): def init(self): pass def next(self): if self.data.close[-1] < self.data.close[-2]: self.buy() elif self.data.close[-1] > self.data.close[-2]: self.sell() # 不达预期的做空策略 class ShortStrategy(Strategy): def init(self): pass def next(self): if self.data.close[-1] > self.data.close[-2]: self.sell() elif self.data.close[-1] < self.data.close[-2]: self.buy() # 加载测试数据 data = pd.read_csv('test_data.csv', parse_dates=['datetime'], index_col='datetime') # 回测做多策略 bt_long = Backtest(data, LongStrategy, cash=10000, commission=.002) results_long = bt_long.run() print("做多策略回测结果:") print(results_long) # 回测做空策略 bt_short = Backtest(data, ShortStrategy, cash=10000, commission=.002) results_short = bt_short.run() print("\n做空策略回测结果:") print(results_short)
问题现象
- 做多策略运行后胜率为100%,符合预期;
- 做空策略胜率远低于预期,而测试数据是连续下跌趋势,理论上空单应全部盈利。
已排除测试数据本身的问题,希望确认是否是backtest库做空逻辑的使用方式有误,或是代码逻辑存在疏漏。
内容的提问来源于stack exchange,提问作者peterpeterson
相关产品推荐
相关产品推荐

