兄弟姐妹们,咱已经搞定了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 可视化图表的画师

说白了,这六大核心模块就是你的量化策略的“六脉神剑”。谁用得溜,谁就能走得远。

下一节我们就开始撸代码写第一个策略了,别眨眼,买卖信号就来了!

Logo

更多推荐