![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=1739285233-O5bbsrQXGhDOvWYq29jn9sMi8NwlIqjh-0-e976368a5025e05ea4ba9b5f07c5abe0)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_33_1.jpg?sign=1739285233-gPWrXWMkwlHG0cVF8lEpHRNrU3jxf3bN-0-dedf76de314eeb5fa5c7df5433f0209e)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_1.jpg?sign=1739285233-g7PqcwICkhJJ0ntkKueOC3ZKoGZZXHhr-0-c9a8c7125045743275764118345eb232)
通过以上代码大家可以看到,基本上每一组代码都有中文注解,非常适合初学者学习。
下面运行程序。回测时间从2018年11月1日开始,到2018年12月31日结束,如图2-8所示。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_2.jpg?sign=1739285233-4paxzjZRQfK3x7vwtyYFE84tRycHonh3-0-bd03c38902eb1fbafc1372455c685c77)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_3.jpg?sign=1739285233-XWrbOvEsxsveBHa0cnImDx6xqAoZW8Yo-0-22f4920094d1506669b6268400c4dffe)
图2-8 数据预处理
上面的案例代码共分为四个步骤,其中新增了plot绘图步骤:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_4.jpg?sign=1739285233-H3moxihfc5u1GEdpdAWoAMFQ9UU8N5iU-0-e4dc7efbf2658b0feeda8ce0f9b36e7a)
下面将以上案例代码分组,对主体代码进行讲解。
第一组代码设置量化程序的入口:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_1.jpg?sign=1739285233-dmr6o1IYWQ9WrCdId3X2AI1CLSNvXJ4t-0-83e91113e75c8a1410c3b254bbe61b44)
cerebro在西班牙语中是“大脑”的意思,表示量化计算引擎。
第二组代码分为两个小组进行讲解。
第2-1组代码,设置起始资金、Broker代理参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_2.jpg?sign=1739285233-zJSZdGUZmXZ0UaLiZQEZLhgouH32nPKh-0-e2d98e8dcc26d8c43f4f05afc2b28834)
第2-2组代码,设置数据参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_3.jpg?sign=1739285233-sDBY8rTb0KtTrRiWrdXYCXBCHD1NWgL7-0-abdff7ee095f21feb12df2ee6f8cef96)
调用数据读取函数pools_get4fn,对数据进行预处理。然后调用adddata添加数据函数,为量化引擎cerebro设置数据源data:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_4.jpg?sign=1739285233-IjlsKzVWCKlmFlXtkaJWJTCSVJtp5tK0-0-2ca9e08d99f02e749c1a790d894e75d1)
数据源变量data在调用数据读取函数pools_get4fn后,已经转化为BackTrader内部格式。
图2-9所示,是adddata数据添加函数的示意图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_1.jpg?sign=1739285233-NkAhfqn3woJVx7pOtF7RDHni1KVhDfk3-0-bdbf68976614c049280767d1432d9897)
图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=1739285233-WPJfFyIZkZcQIVnABfVKn4y5JOwu4g35-0-32bf1b6e41679361b4b75d7272ab5c89)
第四组代码获取量化回测分析结果:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_3.jpg?sign=1739285233-j7N3dtR1ZdaFdgrCfHLpZxb1F4TYFcdP-0-3c1bd950bb679931ed50e81991a828aa)
最后,绘制量化分析图表:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_4.jpg?sign=1739285233-DOmsYvozOk2PlMOZ6m08vq4PmkOzv2bH-0-f4fa3b5c30028a82a4a301328e4e4521)
本节案例的重点,其实就是第2-2组代码中的设置数据参数。