Backtrader来啦:常见案例汇总
2022-05-28 10:31:19
群众号为全网读者带来Backtrader系列自推出第一期此后,受到了浩瀚读者的亲爱与点赞,QIML也会接连把这个系列做好。
群众号将为行家众维度、众战术、众场景来讲述Backtrader正在量化投资周围的实验使用。同时,咱们对每段代码都做理解读评释,愿你正在Quant的道道上学有所获!
咱们会把相干推文的数据、代码一并举办同步。同时,咱们会正在以来的日子里,正在全网颁布一系列好用、适用、你绝对爱不释手的量化开源东西包!
群众号盼望给邦内量化投资圈孝敬一份本身的力气。盼望影响更众人理解量化、进修量化、找到属于一条属于本身的道!
本期案例紧要涉及了“选股”、“择时”、“套利”3 个方面,此中“选股”罗列的是众因子选股战术;“择时”罗列了均线战术和海龟买卖准绳;“套利”罗列了配对买卖战术;共计 6 个案例。
对待逻辑丰富的众因子选股战术,提倡将选股历程和回测历程分摆脱来,正在 Backtrader 回测框架外,举办选股,选股结果存成调仓外,然后再将调仓外传给 Backtrader ,让 Backtrader 读取调仓外上的讯息,举办战术回测。调仓外上存的选股结果,实在便是每个调仓日该当持有哪些股票以及对应的持仓权重。
# 读取调仓日期,即每月的结尾一个买卖日,回测时,会正在这一世界单,然后鄙人一个买卖日,以开盘价买入
直接目标选股便是正在将选股逻辑写正在 Strategy 战术里,然后一边选股一边买卖,搜罗选股目标的策动也可以是正在 __init__ 或 next 中完结的。众因子选股的惯例逻辑是基于众个因子对股票举办排序,然后选出展现好的股票和展现差的股票,并且分为依次筛选和同时筛选2 种方法:
依次筛选: 正在依次筛选中,投资组合司理会根据选股程序的优先级依次一步步做出筛选。起初依照最紧张的选股程序剔除股票池中不适应条款的股票,然后依照第二最紧张的条款对第一次选出的股票再次举办股票筛选,依此类推,直到将投资鸿沟缩小为满意整个选股条款的股票清单为止。
同时筛选: 正在同时筛选中,投资组合司理将整个选股程序(选股因子)同时使用于股票筛选,并策动待筛选股票正在全体选股程序集上的归纳得分,再基于归纳得分的排名筛选股票。
本案例对应的是同时筛选这种方法,正在横截面上,策动每只股票正在整个因子上的rank,然后将整个 rank 举办乞降,获得归纳 rank,再基于归纳 rank 举办选股和调仓。
reserve=0.05# 5% 为了避免显露资金亏欠的环境,每次调仓都预留 5% 的资金不消于买卖
# PyFolio 阐述器返回的收益也是月度收益,然而绘制的各式收益阐述图形会有题目,有些图绘制不出来
简易的选用了摇动率、动量、EP、ROE 4个因子,此中摇动率、动量是正在__init__ 中权且策动的,EP、ROE 是与行情数据一块直接导入的;
正在 next 中,借助 sort(合用于 list 的排序)和 sorted(可对整个可迭代的对象举办排序操作,案例顶用于对 dict 举办排序)对每一只股票的 self.data 举办排序,然后再以 self.data 为 key,给每个 key 赋一个 rank 值;轮回每个因子都举办排序,然后累加上之前因子的排序值;结尾再基于总的 rank 累加值,筛选出 rank 排名最靠前的 N 只股票行为持仓股;
战术参考原因:Rebalancing - Conservative Formula - Backtrader () ;
正在上面战术的 next 中, “# step2: 对下一期接连持有的股票,举办仓位调动”这一步是可能省略的 ,后面的“# step3: 买入目前持仓中没有的股票”中的 order_target_percent 下单函数就能一步到位的告终 step2 和 step3 的仓位调动操作。
均线战术中最常睹的一种手段是依照永远均线和短期均线的交叉环境来确定买卖信号,即:当短期均线从下往上穿越永远均线时,变成金叉,做众;反之,当永远均线从上往下穿越短期均线时,变成死叉,做空或平仓。下面是常睹的双均线战术如下:
三均线战术与双均线战术相同,只不外买卖信号是由短期均线、中期均线 条均线协同确定的。假使只琢磨做众的环境,普通是短期均线中期均线永远均线,呈众头陈列时,买入开仓;显露短期均线下穿中期均线时,卖出平仓。下面是案例实在的战术逻辑:
# 求上面 self.signal1 的环比增量,可能判别获得第一次同时满意上述条款的年光,第一次满意条款为1,其余条款为0
正在双均线战术的根基上,参预了中期均线 条均线的众头陈列是通过 bt.And 来判别的,但还须要捕获第一次显露众头陈列的年光点,借助了环比增量的策动逻辑,使得第一次显露的谁人年光点取值为 1,其它盈利的年光点都不是发生众头信号的年光点(取值等于0或-1);
由于买入信号和卖出信号是各算各的,于是结尾还须要对两个信号举办整合;因为两个信号变成条款不存正在冲突,于是直接乞降即可,-1 对应卖出信号、1对应买入信号、0 对应不做调仓操作;
假使念借助众个身手目标天生一个归纳信号,也可能模仿上面的众信号合成逻辑,将信号合成题目转换成数学目标的策动题目。
配对买卖战术属于统计套利规模。本案例要先容的配对买卖战术是基于代价序列之间的协整干系而修建的,投资标的是股票,紧要思念是:寻找具有协整干系(说明两边存正在永远平衡干系,代价走势宛如)的一对股票,然后欺骗两边价差举办套利。正在操纵 Backtrader 告终配对买卖战术前,须要先寻寻找存正在协整干系的一对股票,再买卖这对股票,全体配对买卖战术的流程可能分为如下几步:
对待商品期货的配对买卖,因为商品间的宛如干系是对比昭着的,有时两边的价差序列并不会通过 OLS 等方法举办拟合,而是直接求两边的代价差(spear=Y_close-X_close 或者 spear=Y_close/X_close),并对代价差举办程序化管理获得 zscore,然后举办价差套利: