第3节:Backtrader核心结构大拆解——框架到底怎么一层套一层的?
模块作用说明Cerebro总控指挥中心Strategy策略逻辑剧本Data Feed行情数据来源Broker模拟券商,经纪人Analyzer分析回测结果的裁判Observer可视化图表的画师说白了,这六大核心模块就是你的量化策略的“六脉神剑”。谁用得溜,谁就能走得远。下一节我们就开始撸代码写第一个策略了,别眨眼,买卖信号就来了!
兄弟姐妹们,咱已经搞定了Backtrader是个啥,也顺利把开发环境搭好了(如果你没搞定,回去看前一节别硬刚),那接下来咱就要上手拆“发动机”了:Backtrader的核心结构。
想象一下Backtrader就像是一台老式缝纫机,不是按下按钮就能缝,是得自己踩脚踏板、装线、换针、穿布的。它虽然看起来复杂点,但一旦你搞明白了各个部件是干啥的,就能“车”得飞起。
本节我们重点拆解以下几个关键模块:
-
Cerebro:大脑总控台,策略发动机
-
Strategy:策略核心,写逻辑的地方
-
Data Feed:行情数据,喂给策略吃的“粮食”
-
Broker:经纪人,负责买买买和卖卖卖
-
Analyzer:分析器,帮你评估“策略干得咋样”
-
Observer:观察员,画图的好帮手
一切从Cerebro开始讲起,它可是整个Backtrader的“司令部”。
一、Cerebro:策略发动机,量化大脑
你可以把Cerebro理解为“指挥中心”,所有命令、数据、策略、交易、分析,都是它统一安排。
import backtrader as bt
cerebro = bt.Cerebro()
就这几行,咱就开了一辆量化小摩托。
它到底能干嘛?
-
加载数据:cerebro.adddata()
-
添加策略:cerebro.addstrategy()
-
添加分析器:cerebro.addanalyzer()
-
设置资金、手续费:cerebro.broker.setcash()、setcommission()
-
启动运行:cerebro.run()
-
出图:cerebro.plot()
打个比方:Cerebro 就像一个导演,演员是你的策略、数据是剧本、broker是摄像机、分析器是剪辑师,最后一条“Action”打下去(cerebro.run()),电影就开拍了!
二、Strategy:你的策略剧本
重点来了,咱平时写逻辑、搞策略、定义买点卖点,全都在这个Strategy
类里。
写法如下:
class MyStrategy(bt.Strategy):
def __init__(self):
# 初始化策略指标
self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)
def next(self):
# 每根K线都要调用一次
if self.data.close[0] > self.sma[0]:
self.buy()
elif self.data.close[0] < self.sma[0]:
self.sell()
这段代码就像是在说:
“嘿,看见今天的收盘价比20日均线上了吗?买!低了?卖!”
简单直接,跟拍脑袋交易一样朴实无华。
Strategy里都能干啥?
-
__init__()
:策略初始化,指标定义等 -
next()
:每根K线运行一次,写交易逻辑 -
log()
:打日志 -
notify_order()
/notify_trade()
:订单、成交通知
总之,Strategy是你这个“操盘手”发号施令的地方。
三、Data Feed:行情数据喂进去,策略才能“动”
Backtrader是个“被动”的框架,没数据,它啥也不干。
行情数据怎么来?几种方式:
-
用Backtrader自带的CSV数据加载器:
bt.feeds.GenericCSVData
-
用Pandas DataFrame:
bt.feeds.PandasData
-
自定义数据源,比如Tushare拉的行情、文华导出的期货数据等等
示例:
data = bt.feeds.GenericCSVData(
dataname='000001.csv',
dtformat='%Y-%m-%d',
datetime=0,
open=1,
high=2,
low=3,
close=4,
volume=5,
openinterest=-1
)
cerebro.adddata(data)
注意:期货数据要处理主力连续合约、换月逻辑,后面会专门讲。
四、Broker:买买买、卖卖卖的“经纪人”
Broker模块是干啥的?管钱的!
你账户有多少钱、每次交易收多少手续费、滑点怎么模拟,全都归它管。
cerebro.broker.setcash(1000000)
cerebro.broker.setcommission(commission=0.001)
cerebro.broker.set_slippage_perc(0.0005)
你可以把它想象成一个“模拟券商”,你下单它就执行,执行后还会告诉你盈亏。
五、Analyzer:分析器,评价“你到底炒得怎么样?”
回测完光看账户余额没啥意思,是骡子是马得拉出来遛遛,Analyzer就是干这个的。
内置常用的Analyzer有:
-
SharpeRatio
夏普比率,回报/波动比 -
DrawDown
最大回撤,看看亏最多的时候多少 -
TradeAnalyzer
交易分析器,胜率、盈亏比等等
使用示例:
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
result = cerebro.run()
print('Sharpe Ratio:', result[0].analyzers.sharpe.get_analysis())
是不是有点像考试完“出成绩”?这个“成绩单”会告诉你策略到底是学霸还是学渣。
六、Observer:策略图形可视化的工具人
Observer的作用就是给你画图、展示账户变化情况,比如:
-
PortfolioValue:账户市值
-
BuySell:买卖点
-
Trades:交易持仓
cerebro.addobserver(bt.observers.Value)
cerebro.addobserver(bt.observers.BuySell)
最后一句:
cerebro.plot(style='candlestick')
配合Observer,一张酷炫图就出来了!买点卖点一目了然,不用手动看K线对照买卖记录,省时省力。
七、小节总结:Backtrader的六脉神剑
模块 | 作用说明 |
---|---|
Cerebro | 总控指挥中心 |
Strategy | 策略逻辑剧本 |
Data Feed | 行情数据来源 |
Broker | 模拟券商,经纪人 |
Analyzer | 分析回测结果的裁判 |
Observer | 可视化图表的画师 |
说白了,这六大核心模块就是你的量化策略的“六脉神剑”。谁用得溜,谁就能走得远。
下一节我们就开始撸代码写第一个策略了,别眨眼,买卖信号就来了!
更多推荐
所有评论(0)