【量化交易框架】--- Backtrader 最佳实践文档
2024-12-17 本文已影响0人
不可能打工
概述
Backtrader 是一个用 Python 编写的流行的策略回测框架,它提供了一个灵活的环境来测试和评估交易策略。以下是使用 Backtrader 进行策略回测的最佳实践。
安装
首先,确保安装了 Backtrader。可以通过 pip 安装:
pip install backtrader
快速入门
以下是一个简单的策略回测示例,它展示了如何使用 Backtrader 创建一个策略并运行回测。
import backtrader as bt
# 创建策略
class TestStrategy(bt.Strategy):
def log(self, txt, dt=None):
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
self.dataclose = self.datas[0].close
self.order = None
def notify_order(self, order):
if order.status in [order.Completed]:
if order.isbuy():
self.log('BUY EXECUTED, %.2f' % order.executed.price)
elif order.issell():
self.log('SELL EXECUTED, %.2f' % order.executed.price)
self.order = None
def next(self):
if self.order:
return
if not self.position:
if self.dataclose[0] < self.dataclose[-1]:
self.log('BUY CREATE, %.2f' % self.dataclose[0])
self.order = self.buy()
else:
if len(self) >= (self.bar_executed + 5):
self.log('SELL CREATE, %.2f' % self.dataclose[0])
self.order = self.sell()
if __name__ == '__main__':
cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy)
data = bt.feeds.YahooFinanceCSVData(
dataname='your-data.csv',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
reverse=False)
cerebro.adddata(data)
cerebro.broker.setcash(100000.0)
cerebro.addsizer(bt.sizers.FixedSize, stake=10)
cerebro.broker.setcommission(commission=0.001)
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
策略开发
参数化策略
在策略中定义参数,以便在回测时可以灵活调整。
class SmaCross(bt.Strategy):
params = dict(
pfast=10,
pslow=30
)
# ... 策略实现 ...
使用指标
Backtrader 提供了多种内置指标,也可以自定义指标。
sma = bt.indicators.SMA(period=30)
订单管理
在 notify_order
方法中处理订单状态,如成交、取消等。
def notify_order(self, order):
if order.status in [order.Completed]:
if order.isbuy():
self.log('BUY EXECUTED, Price: %.2f' % order.executed.price)
# ... 其他订单状态处理 ...
交易逻辑
在 next
方法中实现买卖逻辑。
def next(self):
if self.dataclose[0] > self.sma[0]:
self.buy()
elif self.dataclose[0] < self.sma[0]:
self.sell()
数据管理
数据源
Backtrader 支持多种数据源,包括 CSV、Yahoo Finance 等。
data = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31))
数据处理
可以对数据进行预处理,如调整数据频率、过滤等。
性能评估
佣金和滑点
设置佣金和滑点,以更真实地模拟交易成本。
cerebro.broker.setcommission(commission=0.001)
cerebro.broker.set_slippage(0.0005)
性能指标
评估策略性能,如夏普比率、最大回撤等。
可视化
使用 cerebro.plot()
方法可视化策略回测结果。
cerebro.plot()
结论
Backtrader 是一个功能强大的策略回测框架,通过遵循上述最佳实践,可以有效地开发和评估交易策略。