测试时间:2023年11月23日
可实现版本:matplotlib 3.6.0;backtrader 1.9.78.123;backtrader-plotting 2.0.0;numpy 1.23.5
此前看到很多网上的帖子,主要都是讲最新版本的 matplotlib 和 backtrader 不兼容的问题,但是在下载 matplotlib 3.2.2 的时候遇到了些问题,一直显示错误,下载了 matplotlib 3.6.0 版本后可以正常出图。
解决了这个问题后,发现最新版本的numpy也出现不兼容问题,因此我再试着回溯一下之前的版本,发现 numpy 1.23.5 可以兼容,能够正常出图。
具体代码如下:
import backtrader as bt
from datetime import datetime
import matplotlib
from backtrader_plotting import Bokeh
from backtrader_plotting.schemes import Blackly
'''设定运行环境'''
asset = bt.Cerebro()
'''
设定持有资产,設定持有資產
1e5 就是 1 * 10 ^ 5
'''
asset.broker.setcash(1e5)
'''设定交易手续费(经理人佣金,平台手续费)'''
asset.broker.setcommission(
# 如果有設定 margin ,則此傭金為固定數量,反之則為百分比 % 數
# 此處則為買、賣固定 2.0 歐元
commission=2.0,
# 當需要模擬保證金交易(期貨、合約交易)等操作時需要使用
# 如果這個參數是 0 ,則佣金為百分比 % 數
margin=2000.0,
# 在進行期貨等交易時可以設定的槓桿倍數
mult=10.0,
# 當需要同時開啟多筆交易時可以設定,會以名稱區隔交易績效
name="Eurostoxxx50"
)
'''设定交易杠杆倍率'''
# 固定买卖 20 股
asset.addsizer(bt.sizers.SizerFix, stake=20)
'''加入分析指标,可自行設定 _name 呼叫參數,例如設定為 'SharpeRatio' 則可透過 analyzers.SharpeRatio.get_analysis() 取得更細節的分析'''
# 交易分析 (策略勝率)
asset.addanalyzer(bt.analyzers.TradeAnalyzer, _name='TradeAnalyzer')
# 交易基本統計分析
asset.addanalyzer(bt.analyzers.PeriodStats, _name='PeriodStats')
# 回落統計
asset.addanalyzer(bt.analyzers.DrawDown, _name='DrawDown')
# 期望獲利/標準差 System Quality Number
asset.addanalyzer(bt.analyzers.SQN, _name='SQN')
# 夏普指數
asset.addanalyzer(bt.analyzers.SharpeRatio, _name='SharpeRatio')
'''引入资料'''
data = bt.feeds.YahooFinanceData(
# 股票资料位置
dataname='TSLA.csv',
# 资料起始日期
fromdate=datetime(2010, 7, 1),
# 资料结束日
todate=datetime(2023, 11, 21)
)
'''将资料引入环境'''
asset.adddata(data)
'''运行环境'''
print('投资 > 起始资产 %.2f $' % asset.broker.getvalue())
asset.run()
print('投资 > 结束资产 %.2f $' % asset.broker.getvalue())
'''绘制图表'''
asset.plot()
'''绘制互动图表'''
b = Bokeh(style='bar', plot_mode='single', scheme=Blackly())
asset.plot(b)