本帖最后由 技术006 于 2021-10-25 21:31 编辑
假设在第一根k上执行时,看下面代码中标注的“探针”说明。
[PEL] 复制代码 IF holding>=1 and (C-AVGENTERPRICE)>3*d2 THEN BEGIN
平多:SELL(PD,1,THISCLOSE);
end
//探针1:假设此处条件成立,那么此处D2被初始为0
if holding=0 then begin d1:=0 ;
d2:=0;end
//探针2:有上方条件得知,当前位置必定不成立。那么D2不会被重新赋值。
if holding>=1 and kd then
begin
D1:=2*l-h;
d2:=h-l;
end
if holding>=1 and c<d1 then
begin
止损多:sell(1,1,THISCLOSE);
end
showd1:d1;
//探针3:此时输出D2的结果必定是0
showD2:D2;//输出下止损价位
//探针4: 若此处的开仓条件KD成立,那么执行buy后,HOLDING将为1.
if kd and holding=0 then
begin
开多:BUY(1,1,THISCLOSE);
d1:=2*l-h;//开仓时候记录下这个值
// 探针5: 由于探针4符合开仓条件,进入此模块内,到此处时,d2将被赋值。(由探针1位置的d2=0,变为d2=h-l)
d2:=h-l;
end//若把第20行的,showD2放在此处,那么最终输出的结果肯定是本次代码执行过程中最后一次赋值D2的值
//showD2:D2;//输出下止损价位
代码代码执行从上至下。【探针3】位置的结果反应的是开仓前的状态。并不会被探针5位置的结果影响。相对于探针3,它永远不知道本次策略执行过程中后面语句的结果。
就像:你每次回家都要拿钥匙开门,而你邻居(探针3)每次都是看到你掏出钥匙时就下楼了。至于你这把钥匙是不是这扇门的,(探针3)邻居他是不知道的。只有邻居在(探针5之后)你开门时下楼,才能知道你开门成功了。
|