Backtrader 开源量化回测框架 - 支持多数据源、多策略、多周期回测与实盘交易,纯Python实现。
Backtrader 是一个强大的开源Python量化回测框架,支持多数据源、多策略、多周期回测与实盘交易。纯Python实现,无外部依赖,架构清晰且易于扩展。
文档:https://www.backtrader.com/docu/
bash
pip install backtrader
Backtrader 使用面向对象的事件驱动架构:
python
import backtrader as bt
class MyStrategy(bt.Strategy):
简单均线策略
params = ((period, 20),) # 策略参数:均线周期
def init(self):
# 初始化指标(在init中定义,自动计算)
self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.period)
def next(self):
# 每根K线触发一次,在此编写交易逻辑
if self.data.close[0] > self.sma[0]:
if not self.position: # 无持仓则买入
self.buy()
elif self.data.close[0] < self.sma[0]:
if self.position: # 有持仓则卖出
self.sell()
python
import backtrader as bt
import pandas as pd
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
python
python
def next(self):
for i, d in enumerate(self.datas):
print(f{d._name}: close={d.close[0]:.2f})
python
python
class MyStrategy(bt.Strategy):
# 定义可调参数(元组格式)
params = (
(fast_period, 5), # 快速均线周期
(slow_period, 20), # 慢速均线周期
(stake, 100), # 每次交易手数
)
def init(self):
self.fastma = bt.indicators.SMA(period=self.p.fastperiod)
self.slowma = bt.indicators.SMA(period=self.p.slowperiod)
# self.p 是 self.params 的简写
def next(self):
if self.fastma[0] > self.slowma[0]:
self.buy(size=self.p.stake)
python
class MyStrategy(bt.Strategy):
def next(self):
# 按数量买入
self.buy(size=100) # 买入100股
self.sell(size=100) # 卖出100股
# 调整到目标仓位
self.ordertargetsize(target=500) # 调整持仓为500股
self.ordertargetvalue(target=50000) # 调整持仓为5万元市值
self.ordertargetpercent(target=0.5) # 调整持仓为总资产的50%
# 限价单
self.buy(size=100, price=10.5, exectype=bt.Order.Limit)
# 止损单
self.sell(size=100, price=9.0, exectype=bt.Order.Stop)
# 止损限价单
self.buy(size=100, price=10.5, pricelimit=10.8, exectype=bt.Order.StopLimit)
# 撤单
order = self.buy(size=100)
self.cancel(order)
# 对其他股票下单
self.buy(data=self.datas[1], size=200) # 买入第二只股票
python
class MyStrategy(bt.Strategy):
def notify_order(self, order):
订单状态变化时触发
if order.status in [order.Submitted, order.Accepted]:
return # 订单已提交/已接受,等待执行
if order.status in [order.Completed]:
if order.isbuy():
print(f买入执行: 价格={order.executed.price:.2f},
f数量={order.executed.size}, 手续费={order.executed.comm:.2f})
else:
print(f卖出执行: 价格={order.executed.price:.2f},
f数量={order.executed.size}, 手续费={order.executed.comm:.2f})
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
print(f订单失败: 状态={order.getstatusname()})
def notify_trade(self, trade):
交易完成时触发(一买一卖构成完整交易)
if trade.isclosed:
print(f交易完成: 毛利润={trade.pnl:.2f}, 净利润={trade.pnlcomm:.2f})
python
class MyStrategy(bt.Strategy):
def next(self):
# 当前K线数据
current_close = self.data.close[0] # 当前收盘价
prev_close = self.data.close[-1] # 前一根K线收盘价
current_volume = self.data.volume[0] # 当前成交量
current_date = self.data.datetime.date(0) #
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 backtrader-1776114153 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 backtrader-1776114153 技能
skillhub install backtrader-1776114153
文件大小: 11.88 KB | 发布时间: 2026-4-15 11:49