通过上一章节的学习,我们掌握了如何实现技术指标,但是在使用过程中发现以下问题:

  1. 技术指标应用于图表后,每次需要调整参数时,都要重新编辑公式才能被使用。
  2. 技术指标代码量较大时,如果需要调整多个策略参数,很容易发生混淆、遗漏等情况,造成计算异常。
  3. 同一技术指标,需要使用多个不同的周期参数,只能再次创建一个新的的技术指标。

针对上述问题,金字塔的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);
1
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);
1
2
3
4
5
6

将上述多均线指标编译应用于主图后,我们可以看到

# 同一指标调整不同的参数

我们将同一指标,分别加载到不同的窗格图形,然后按照动态调整参数的方法,对每个窗格中的公式进行单独设置。

思考

  • 问:若调整参数后的指标发生修改,从新编译会怎么样,之前设置的参数是否还能保留?
    答:不能保留,重新编译后,之前调整过后的参数,将会被初始化成公式中指定的默认值。

# 如何最低限度的修改策略

当指标中使用若干个常数变量时,在后期维护指标时,如果需要调整某些变量时,只能通过逐行阅读、查找的方式进行。按照这种方式不光增加维护成本,而且在修改过程中,非常同一发生遗漏、混淆等不确定因素出现。如果我们采用变量定义的当时,将一些常量统一存储在指定的变量中,之后的策略中涉及到的常量均使用此变量代替。那么在后期位置时,只需修改定义处,即可全部修改完毕。