- BackTrader量化交易案例图解
- 何海群
- 616字
- 2020-11-24 13:23:52
2.6 案例:数据预处理
大家都知道,Python的原生运算速度相对比较慢。BackTrader量化软件,以及常用的金融软件,交易数据的预处理主要都是通过Pandas模块库当中的矢量化运算完成的,它可以大幅度提高数据运算速度。
下面通过具体案例来介绍数据预处理。
案例文件名是btr_e002dat.py。本案例在量化版“Hello”案例的基础上增加了一组简单的测试数据和部分简单参数。
案例主要代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_32_3.jpg?sign=1739675393-l3x67KRNhcKneV5rWQrjxSxiMy61m3J8-0-9951dc6ba9fdcca7bec60e2da7d59732)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_33_1.jpg?sign=1739675393-6wJ3cLSgZEcRVzHU2cP1G6R34B5e27ll-0-f948788b11bf2f678e66bbc0e25358dd)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_1.jpg?sign=1739675393-wPEOMGQvQlge4yciPgjwaZL73IhhHcXn-0-fa683443926e2416d9e538de4b4d2e67)
通过以上代码大家可以看到,基本上每一组代码都有中文注解,非常适合初学者学习。
下面运行程序。回测时间从2018年11月1日开始,到2018年12月31日结束,如图2-8所示。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_2.jpg?sign=1739675393-sXE5cvNHCbCDJFfcwDVjBlHBpI5DS0lb-0-e279f6a95e83a3f21f8d9a8f2ffcae14)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_3.jpg?sign=1739675393-SRgzz98Jk7FxxDgeR23lXoB0GEWW95kW-0-2b7e26de03376fac100eae77df57f9ce)
图2-8 数据预处理
上面的案例代码共分为四个步骤,其中新增了plot绘图步骤:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_4.jpg?sign=1739675393-5YybpaESte0YG1a6BqrvC1jD2usYIc6o-0-bcbacd09d398ab2dce66d5e67a9612e6)
下面将以上案例代码分组,对主体代码进行讲解。
第一组代码设置量化程序的入口:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_1.jpg?sign=1739675393-EDfJXp5Pj0v8BFCTBuqAwry4qtoPkkGd-0-10494c4166b4fc29812aa1463869e4bb)
cerebro在西班牙语中是“大脑”的意思,表示量化计算引擎。
第二组代码分为两个小组进行讲解。
第2-1组代码,设置起始资金、Broker代理参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_2.jpg?sign=1739675393-xRMr8AuL3kvq4oeCGuFkVDmx9xMJUkAY-0-1161248c6deda0d0af53c5d987c178c8)
第2-2组代码,设置数据参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_3.jpg?sign=1739675393-F9q3bIPzIGzJzAwH3OjU6MNl5h4ajdDj-0-b9caf267a8907f323751ab5da91aa160)
调用数据读取函数pools_get4fn,对数据进行预处理。然后调用adddata添加数据函数,为量化引擎cerebro设置数据源data:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_4.jpg?sign=1739675393-DmdINdx6B44wO8k9Hvvtw3WydOe6RaSK-0-d6a2297e033760ca6ac8d7941970b363)
数据源变量data在调用数据读取函数pools_get4fn后,已经转化为BackTrader内部格式。
图2-9所示,是adddata数据添加函数的示意图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_1.jpg?sign=1739675393-brE96OeyPC0SGeBfNtPOOJcdKNnt29TT-0-6d70daf9db0ace16bbb723779b24dad0)
图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=1739675393-AsRrfq9qqIo0f1GuIUnv34NX8j0z9YFa-0-e59734186b4719836c47aa4eb6343816)
第四组代码获取量化回测分析结果:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_3.jpg?sign=1739675393-0s0lYqQuv9Ko5l7HwgNEkrJNim36wAO2-0-231fb7a7ba9fbbb0be1cec905c05681e)
最后,绘制量化分析图表:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_4.jpg?sign=1739675393-x9RH25p6OWMRMvRdtsRustXl7FdwwSlQ-0-50dc350bc3ecff49e3ab0bba2c9c57a7)
本节案例的重点,其实就是第2-2组代码中的设置数据参数。