# 初始值的重要性
策略开发过程中,建议变量在使用之前赋初始值,否者可能产生逻辑错误。请各位尝试分析下方两个示例的差别。
//在第一根k上时,将AA赋值为1;
IF BARPOS=10 then A:=1;
1
2
2
A:=0
//在第一根k上时,将AA赋值为1;
IF BARPOS=10 then A:=1;
1
2
3
4
2
3
4
通过输出变量A的结果可知:
- 前者在第10根k时被赋值为1,之后条件不再成立,但是由于PEL的变量都是序列变量,不存在空值的情况,此时就会沿用上个有效值;(等同于全局变量)。
- 后者由于在使用前,增加了赋初始值操作,那么A只在第10根k时结果为1,其余位置结果为0,尤其是作为条件判断操作时,带有初始值操作的代码,其逻辑稳定性更好。
总结:
变量的声明尽量不要发生在条件判断体内,即在判断体内使用的变量时,建议使用之前,在判断体外进行初始值操作处理。
# 场景分析
使用场景:交易多品种时,针对品种分别使用不同的开仓手数。
手数:=0;
if STKLABEL='RB00' THEN 手数:=2;
if STKLABEL='HC00' THEN 手数:=4;
if STKLABEL='IF00' THEN 手数:=6;
1
2
3
4
2
3
4
请问上述代码中,当交易品种是RB00、HC00、IF00以外的品种时,是否存在逻辑问题?
答:上述代码逻辑上并没有问题,但是由于在PEL中,下单手数为0时,代表全开全平;那么就可能造成其下单数量与预想产生差异。所以变量赋初始值时,还需要结合实际使用场景进行赋值。即初始值并非必须为0,可以为任意值。那么如果要避免全开的情况出现,上述代码应该如何调整?
手数:=1;
if STKLABEL='RB00' THEN 手数:=2;
if STKLABEL='HC00' THEN 手数:=4;
if STKLABEL='IF00' THEN 手数:=6;
1
2
3
4
2
3
4