You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:42:35