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

如何从回测结果图表中单独提取并绘制Equity曲线?

提取并单独绘制权益曲线的方法

先把你的策略代码里的缩进问题改了——类里面的init和next方法得缩进,不然不属于这个类,运行会报错,修正后的完整代码大概是这样:

from backtesting import Backtest, Strategy
from backtesting.lib import crossover
import talib
import yfinance as yf

# 先获取GOOG的行情数据,你也可以用其他数据源
GOOG = yf.download('GOOG', start='2020-01-01', end='2023-01-01')

class MySMAStrategy(Strategy):
    day1 = 10
    day2 = 50

    def init(self):
        self.ma1 = self.I(talib.SMA, self.data.Close, self.day1)
        self.ma2 = self.I(talib.SMA, self.data.Close, self.day2)
        
    def next(self):
        price = (self.data.Close[-1])*1.02
        
        if crossover(price, self.ma1):
            self.buy()
        elif crossover(self.ma2, self.ma1):
            self.position.close()

bt = Backtest(GOOG, MySMAStrategy, cash=10000)
results = bt.run()

接下来有两种方法可以单独绘制权益曲线:

方法1:用backtesting内置功能快速生成

backtesting的plot()方法支持指定只画某部分图表,直接给plot_only参数传['Equity']就行,一行代码搞定:

bt.plot(plot_only=['Equity'])

方法2:手动提取数据自定义绘图

如果想要自己调整图表样式(比如改颜色、加网格、标注关键节点),可以先把权益数据提出来,用matplotlib自己画:

import matplotlib.pyplot as plt

# 提取权益曲线数据,bt.equity是带时间索引的序列
equity_curve = bt.equity

# 开始绘图
plt.figure(figsize=(12,6))
plt.plot(equity_curve.index, equity_curve, label='策略权益曲线', color='#0066cc')
plt.title('策略权益变化')
plt.xlabel('日期')
plt.ylabel('权益金额(美元)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

第一种方法适合快速出图,第二种方法自由度更高,你可以根据需求选。

内容的提问来源于stack exchange,提问作者Özkan Kahraman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:22:52