通过上一章节的学习,我们掌握了如何实现技术指标,但是在使用过程中发现以下问题:
- 技术指标应用于图表后,每次需要调整参数时,都要重新编辑公式才能被使用。
- 技术指标代码量较大时,如果需要调整多个策略参数,很容易发生混淆、遗漏等情况,造成计算异常。
- 同一技术指标,需要使用多个不同的周期参数,只能再次创建一个新的的技术指标。
针对上述问题,金字塔的PEL语言中通过引入input参数
的概念,合理的使用参数变量可以非常友好的解决上述问题,同时也能降低代码后期维护的难度和时间成本。
# 申明input参数
INPUT:PNAME1(DFT,[MIN,MAX,STEP]),PNAME1(DFT,[MIN,MAX,STEP])......
- INPUT: 申明参数的关键字
- PNAME1:参数名称
- DFT:默认值
- MIN:最小值边界
- MAX:最大值边界
- STEP:步长,即最小变动单位
根据上述语法规则,我们尝试学习如何申明参数变量,并观察申明时的变化过程。
INPUT:N1(5,1,100,1);
INPUT:N2(10);
INPUT:N3(5,1,100,5),N4(40),N5(100,1,1000,10);
MA1:MA(C,N1);
2
3
4
5
通过测试发现,上述3种申明参数的方法都是正确的;申明的参数,被添加到公式编辑器右侧的参数列表窗口中,如上图所示。
思考
问:不使用INPUT申明参数的情况下,直接在参数列表中添加使用的变量参数效果是否一样?
答:作用和效果完全一样。只是操作方式不同而已。问:通过INPUT申明参数的情况后,直接在参数列表中修改INPUT申明参数的参数是否能够正常修改?
答:不能,因为策略编译时,会再次按照INPUT中填写的参数结果,将已经修改的值还原,即INPUT的优先级高于直接修改参数列表。
# 如何动态调整参数
我们依旧使用多均线指标为示例,将多均线的周期均调整为参数变量,以便于实现指标加载后动态调整参数值。
INPUT:N1(5,1,100,1),N2(10,1,100,1),N3(20,1,100,1),N4(60,1,100,1);
ma1:ma(c,N1);
ma2:ma(c,N2);
ma3:ma(c,N3);
ma4:ma(c,N4);
2
3
4
5
6
将上述多均线指标编译应用于主图后,我们可以看到
# 同一指标调整不同的参数
我们将同一指标,分别加载到不同的窗格图形,然后按照动态调整参数的方法,对每个窗格中的公式进行单独设置。
思考
- 问:若调整参数后的指标发生修改,从新编译会怎么样,之前设置的参数是否还能保留?
答:不能保留,重新编译后,之前调整过后的参数,将会被初始化成公式中指定的默认值。
# 如何最低限度的修改策略
当指标中使用若干个常数变量时,在后期维护指标时,如果需要调整某些变量时,只能通过逐行阅读、查找的方式进行。按照这种方式不光增加维护成本,而且在修改过程中,非常同一发生遗漏、混淆等不确定因素出现。如果我们采用变量定义的当时,将一些常量统一存储在指定的变量中,之后的策略中涉及到的常量均使用此变量代替。那么在后期位置时,只需修改定义处,即可全部修改完毕。