唐奇安通道模型在模拟使用中遇到开多条件成立时当期K线以T20HI开多不能成交的问题,想改成当开多条件成立后,依次检测接着的3根K线是否满足最低价小于开多条件成立时的T20HI,如满足,则以开多条件成立时的T20HI开多,否则,以第3根K线的收盘价开多;同理,开空条件成立后,依次检测接着的3根K线是否满足最高价大于开空条件成立时的T20LO,如满足,则以开空条件成立时的T20LO开空,否则,以第3根K线的收盘价开空;
平多及平空条件不变。
麻烦老师帮改写,多谢。
原代码如下:
INPUT : T20(20,15,60,1);
INPUT : SS(15,1,20,1);
T20HI : REF(HHV(H,T20),1);
T20LO : REF(LLV(L,T20),1);
开多平空条件:= H > T20HI;
开空平多条件:= L < T20LO;
平空:sellshort(开多平空条件 and holding<0,SS,limitr,T20HI);
平多: sell(开空平多条件 and holding>0,SS,limitr,T20LO);
开空: buyshort(开空平多条件 and holding=0,SS,limitr,T20LO);
开多: buy(开多平空条件 and holding=0,SS,limitr,T20HI);
开多平空条件:= barslast(H > T20HI)=4 and all(l<ref(t20hi,barslast(H > T20HI)),3);
开空平多条件:= barslast(L < T20LO)=4 and all(h>ref(t20lo,barslast(L < T20LO)),3);
原文:使用中遇到开多条件成立时当期K线以T20HI开多不能成交的问题,想改成当开多条件成立后,依次检测接着的3根K线是否满足最低价小于开多条件成立时的T20HI,如满足,则以开多条件成立时的T20HI开多,否则,以第3根K线的收盘价开多;
我意图是:当开多条件成立时,此时设定TT=T20HI,检测下一根K最低价如小于TT,则以TT开多;否则,检测再下一根K最低价如小于TT,则以TT开多;否则,检测再下一根K最低价如小于TT,则以TT开多;(最多检测开多条件成立后3根K)否则,以开多条件成立后第3根K的收盘价开多。
开空单同样道理。
平空平多单还是按原代码执行,即H > T20HI 平空,L< T20LO 平多。
开多平空条件:= barslast(H > T20HI)<4 and barslast(H > T20HI)>0 and barslast(l<valuewhen(H > T20HI,t20hi))<4 and barslast(l<valuewhen(H > T20HI,t20hi))>0;
开空平多条件:= barslast(L <T20LO)<4 and barslast(L < T20LO)>0 and barslast(h>valuewhen(L < T20LO,t20li))<4 and barslast(h>valuewhen(L < T20LO,t20li))>0;
老师,在原代码执行结果上有两个信

此主题相关图片如下:原代码执行结果.jpg


此主题相关图片如下:老师第一次改进后执行结果.png

号,按段K线来说,我要的结果是:平仓按原信号位置及价格执行,开仓按原信号价格执行,开仓位置后移一根K.
像这种形况,平仓信号不变,需要的开仓信号是在原信号后第3根K的收盘价。
[此贴子已经被作者于2015/10/15 10:42:59编辑过]
怎么上传图?

此主题相关图片如下:原代码执行后的一种情况.jpg
INPUT : T20(20,15,60,1);
INPUT : SS(15,1,20,1);
T20HI : REF(HHV(H,T20),1);
T20LO : REF(LLV(L,T20),1);
开多平空条件:= H > T20HI;
开空平多条件:= L < T20LO;
kd:= barslast(H > T20HI)<4 and barslast(H > T20HI)>0 and barslast(l<valuewhen(H > T20HI,t20hi))<4 and barslast(l<valuewhen(H > T20HI,t20hi))>0;
kk:= barslast(L <T20LO)<4 and barslast(L < T20LO)>0 and barslast(h>valuewhen(L < T20LO,t20li))<4 and barslast(h>valuewhen(L < T20LO,t20li))>0;
平空:sellshort(开多平空条件 and holding<0,SS,limitr,T20HI);
开多:buy(kd and holding=0,SS,limitr,valuewhen(h>t20hi,T20HI));
平多:sell(开空平多条件 and holding>0,SS,limitr,T20LO);
开空: buyshort(kk and holding=0,SS,limitr,valuewhen(l<t20lo,T20LO));