![BackTrader量化交易案例图解](https://wfqqreader-1252317822.image.myqcloud.com/cover/581/34667581/b_34667581.jpg)
2.6 案例:数据预处理
大家都知道,Python的原生运算速度相对比较慢。BackTrader量化软件,以及常用的金融软件,交易数据的预处理主要都是通过Pandas模块库当中的矢量化运算完成的,它可以大幅度提高数据运算速度。
下面通过具体案例来介绍数据预处理。
案例文件名是btr_e002dat.py。本案例在量化版“Hello”案例的基础上增加了一组简单的测试数据和部分简单参数。
案例主要代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_32_3.jpg?sign=1738908082-qGI8d21DHnQB9MtwNBFhvE6ELcPeeGUG-0-46ab8b56aac81f952b96f63620a2b5c0)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_33_1.jpg?sign=1738908082-P8lNXpj5OVBKyLiUCtUERMWVv9bkQEzY-0-f0864915131d9d11722bd66357df1e93)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_1.jpg?sign=1738908082-SGU0BJ4mSG3zou2MtS9FEtVPSBYWOcEe-0-0259c2ddbc671f8bcb622badd5a6d06d)
通过以上代码大家可以看到,基本上每一组代码都有中文注解,非常适合初学者学习。
下面运行程序。回测时间从2018年11月1日开始,到2018年12月31日结束,如图2-8所示。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_2.jpg?sign=1738908082-HVyqamgrv1PRWqFL5DuVtBaJKOgLelZd-0-5d368ae4162941761ed6ebaebf627ef1)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_3.jpg?sign=1738908082-dyg8OWCNKCLTnDHdK88wNSr3mSevOYyl-0-559e9d08c1ea5ad25b2b7937628c5d97)
图2-8 数据预处理
上面的案例代码共分为四个步骤,其中新增了plot绘图步骤:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_4.jpg?sign=1738908082-iwDNH2GpS4wC2PRCpscfGzzAWoaacKr6-0-16806a85ce52e0a97b5ff827a8a69349)
下面将以上案例代码分组,对主体代码进行讲解。
第一组代码设置量化程序的入口:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_1.jpg?sign=1738908082-rJKrbGzCfQVD4DICok4dYwJJmNS4S1tT-0-c519ce24229a83811d48ea380704ee86)
cerebro在西班牙语中是“大脑”的意思,表示量化计算引擎。
第二组代码分为两个小组进行讲解。
第2-1组代码,设置起始资金、Broker代理参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_2.jpg?sign=1738908082-Twvx01k5uDkk44vjmow5VPSpb6nOFmNS-0-7e6c18ac8f21d3be1667b8d2cdf8ca54)
第2-2组代码,设置数据参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_3.jpg?sign=1738908082-o7jvV0ygqGZMx6zTShmzSOTvhFu32A6p-0-2b3d92b87b8f49a8bcc6559e47f68444)
调用数据读取函数pools_get4fn,对数据进行预处理。然后调用adddata添加数据函数,为量化引擎cerebro设置数据源data:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_4.jpg?sign=1738908082-uIeZnsusrAbrvWGIVb1AIxIPCqu2fndh-0-49d250419d64a2aaf15754894946233f)
数据源变量data在调用数据读取函数pools_get4fn后,已经转化为BackTrader内部格式。
图2-9所示,是adddata数据添加函数的示意图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_1.jpg?sign=1738908082-9wGiknO1cobnjDUQiadF0ApDwWoZ1O46-0-836b46d4f3df212320bcc7f67540a53f)
图2-9 adddata数据添加函数示意图
由图2-9可以看出,adddada函数位于cerebro类,其中以下画线“_”开头的函数是类内部函数,可以无须考虑,其他主要关联函数和属性有:feeds、resampledata、replaydata、datasbynam、chaindatae、rolloverdata。
第三组代码运行量化回测:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_2.jpg?sign=1738908082-N8PhfDbsW8ajB4ckWwxIIQIBm5a3ghEX-0-036d89bdb2a9b9317aec99ca8c782bf3)
第四组代码获取量化回测分析结果:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_3.jpg?sign=1738908082-IvQ86ojnp1p7oqcIGHxVKBHvuvVzBA88-0-fca8549e4c1616e6ae8ccf809734b586)
最后,绘制量化分析图表:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_4.jpg?sign=1738908082-ZZxpYOosMumTWac17sGG8zO9YEpRCRUf-0-0ee2ca6362171408137e6a847aa093f3)
本节案例的重点,其实就是第2-2组代码中的设置数据参数。