如何从回测结果图表中单独提取并绘制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
相关产品推荐
相关产品推荐

