![BackTrader量化交易案例图解](https://wfqqreader-1252317822.image.myqcloud.com/cover/581/34667581/b_34667581.jpg)
3.4 策略编程模板
BackTrader策略的编写,对于初学者来说有一定的门槛,所以笔者特意开发了一个策略编程模板,方便大家套用。大家可以通过该模板,编写出风格一致的策略程序。
策略编程模板代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_42_1.jpg?sign=1738853935-VcJ67jkRF2ZabENqkf1ndRySAYBN3vLa-0-31cea97143930b94d8ea1d9ec976e9d8)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_43_1.jpg?sign=1738853935-zUB4pq2u5EQHE8kVFmUzDA5CML5ZKWAD-0-b0f4dd861a1f58386cc5e46effc09cdd)
策略编程模板当中的log输出函数主要用于信息输出和编程调试。
在策略代码模板中,最常用的两个核心函数如下。
● init:初始化函数。
● next:节点策略执行函数。
如图3-4所示是BackTrader量化软件中的ma_CrossOver均线交叉策略的模块架构图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_43_2.jpg?sign=1738853935-Kat2KLLDrfzH9wBHr7svib62eMLM99FM-0-3700c2886d2464d0f13aa985cbfb6712)
图3-4 ma_CrossOver均线交叉策略模块架构图
这里强调一下,class属于面向对象类定义函数。初学者在使用Python进行编程时,最好采用面向过程的Basic语言编程模式,因为class函数编程的代码非常烦琐。
大家可以看一看案例中的class面向对象类的策略代码,我们只是想看看每天的收盘价格,结果出现一大堆代码,而真正有用的只有next函数中的一条代码:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_1.jpg?sign=1738853935-xjjzjE0RphemEjoAZi2Prpvf2qKFEM7Z-0-86f88dc8595fbefc3401d66d2c6d2ead)
虽然OOP面向对象开发模式的争议很多,但是,对于BackTrader这种大型软件项目来说,OOP面向对象开发模式还是有一定价值的。例如,方便代码复用、自行扩展,以及在使用时可以采用简单的模板调用方式等。
下面看看案例策略的具体代码。
这里不用过多关注log函数,因为它只是用于输出信息。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_2.jpg?sign=1738853935-uJC51eGQ3o4SL2UjgjRlZUQYIrXwnmXm-0-45f2f8023f72aacefe4b6ea9722f2080)
init初始化函数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_3.jpg?sign=1738853935-At0TfCKFGmjGzRHsyvuYZ79ImJUMkJVV-0-ca072a385b00046b0a7a8233cdb13853)
案例策略中的交易价格数据,采用的是收盘价。程序代码使用dataclose,作为收盘价的别名或者短名称、变量名。
在本案例中只有一只股票,如果有多只股票,则数据代码会有所不同。
本案例中策略编程的重点是next节点策略执行函数,代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_4.jpg?sign=1738853935-CxnByc4pn8udiifEJf5SbQJ97I578w6L-0-2a2e078a65ba09c44faf6e03ec347721)
本案例的策略编程使用的是空策略,所以系统只显示每天的交易价格:收盘价数据。输出的收盘价,交易数据是按日期的正序排序的,最新的日期输出在最后面。
next节点策略执行函数,主要负责对买卖点交易时间进行筛选。实际交易时间是第二天或者后续时间,所以用next作为函数名称,表示下一个交易节点需要处理的事情。