本系列是使用Backtrader在量化领域的学习与实践,着重介绍Backtrader的使用。Backtrader 中几个核心组件:
- Cerebro:BackTrader的基石,所有的操作都是基于Cerebro的。
- Feed:将运行策略所需的基础数据加载到Cerebro中,一般为K线数据。
- Indicator:BackTader自带的指标,并集成了talib中的指标。我们也可以选择继承一个Indicator实现自己的指标。
- Strategy:交易策略。这里是整个过程中最复杂的部分,需要我们计算买入/卖出信号。
- Analyzer:分析器,以图形和风险收益等指标对交易策略的回测结果进行分析评价。
- Order:订单,记录了与当前订单相关的所有数据。
- Trader:交易,记录了与当前交易相关的所有数据。
- Position:持仓,记录了与当前持仓相关的所有数据。
- Broker:可以理解成经纪人,整个策略的初始资金、交易费率、滑点等参数需要通过Broker进行设置。
- Observer:观察者,对数据进行监控观察,比如资金曲线等等。
- Plotting:可视化组件
本次介绍Backtrader中Indicators模块,Indicators模块是Backtrader核心模块之一,其提供众多技术指标,并支持talib指标的调用。
在使用Backtrader时,结合量化策略编写过程通常会考虑:
- 在Backtrader都有哪些指标?
- 怎么使用内置指标?是否可以自定义指标?
- 对于不同周期情况下如何处理?
…
Backtrader 大致有 2 种获取指标的方式:
- 1、直接通过 DataFeeds 模块导入 已经计算好 的指标,比如 导入新增指标 PE、PB;
- 2、在编写策略时调用 Indicators 指标模块 临时计算 指标,比如 5 日均线、布林带等 。
import backtrader as bt
import pandas as pd
import numpy as np
import datetime
daily_price = pd.read_csv("./data/daily_price.csv", parse_dates=['datetime'])
# 筛选 600466.SH 和 603228.SH 2只股票的数据集
data1 = daily_price.query(f"sec_code=='600466.SH'").set_index('datetime').drop(columns=['sec_code'])
data2 = daily_price.query(f"sec_code=='603228.SH'").set_index('datetime').drop(columns=['sec_code'])
Backtrader都有哪些指标
Indicators 指标模块提供了 140 多个技术分析指标计算函数,大部分指标与 TA-Lib 库里的指标是一致的。
参考官方网站对每个技术指标说明,包含:
-
Alias 函数别名,一般技术技术指标含有全英文名称和简称,在bt中可以使用的访问该指标名称的方式。例如:ExponentialMovingAverage,它的别名有:EMA, MovingAverageExponential,那么它的访问方式有:
- btind.EMA();
- btind.MovingAverageExponential();
- btind.ExponentialMovingAverage();
-
Formula:技术指标算法说明,以EMA为例:
- movav = prev * (1.0 - smoothfactor) + newdata * smoothfactor
-
Lines:函数返回的指标对象中包含哪些 lines,例如 ExponentialMovingAverage 返回ema。通过xxx.lines.ema 或 xxx.ema
-
Params:技术指标可以设置的参数。例如:ExponentialMovingAverage 中 period (30) 默认值为30天均值。
-
PlotInfo:绘制指标时
- plot = True,是否显示这个指标值,True的显示,False不显示 ;
- subplot = True,是否把指标显示到另一个窗口,True显示到另一个窗口,False显示在主图;
- plotname = “”, 显示 line 的名称,默认是 class.name;
- plotabove = False, 指标绘制的位置,False 指标画在主图下方,True 指标画在主图上方;
- plotlinelabels = False,False 显示的是指标函数的名称,True 显示指标线的名称;
- plotymargin=0.0,画图的时候距离顶部和底部的距离;
- plotyticks=[ ], y 轴刻度范围,取值为空列表时会自动计算;
- plothlines=[ ],用于绘制水平线;
- plotyhlines=[ ],用同一个参数,控制 plotyticks 和 plothlines 的取值;
- plotforce=False,如果该绘制的指标没有被绘制,就将 plotforce 设置为 True 进行 强制绘图。,支持设置的图形参数。
-
PlotLines:绘制的曲线样式
如何在策略中使用指标
指标使用原则
在编制策略时,遵循“init() 负责指标计算,next() 负责指标调用”原则,即在__init__()中计算好指标,在next()中调用已经算好的指标。如此可以减少计算消耗,提升策略效率。
# 遵循“__init__() 负责指标计算,next() 负责指标调用”原则

5095

被折叠的 条评论
为什么被折叠?



