下方条件1和条件2的回测结果不同,请指明原因;哪种用法才正确? 谢谢
//条件1:
PD:=CLOSE<M1 AND HOLDING>0;
pk:=CLOSE>M1 AND HOLDING<0;
KK:=CLOSE<M1 AND HOLDING=0
KD:=CLOSE>M1 AND HOLDING=0;
//条件2:
PD:=CLOSE<M1 ;
pk:=CLOSE>M1 ;
KK:=CLOSE<M1 ;
KD:=CLOSE>M1 ;
平空:sellshort(pk and holding<0 , 手数,MARKET);
平多:sell(pd and holding>0,手数,MARKET);
开多:buy( KD and holding=0, 手数,MARKET);
开空:buyshort(KK and holding=0,手数,MARKET);
没有区别。也没有对错之分。只是条件1与开平语句组合后,条件重复而已。
pk and holding<0;
等价于
CLOSE>M1 AND HOLDING<0 and holding<0;
回测不同建议比对两次回测中的设置是否有差别。如果是两台金字塔之间比较,还要留一下数据是否一致以及合约信息设置中的信息。
回测条件完全相同,都是在金字塔,但结果不同,麻烦您试一下
执行逻辑中holding的位置不同造成的。你可以使用条件2的方式处理。holding条件放在开平语句中。
条件1。以平空开多为例,当close>m1时,此时holding<0;那么KD条件是不成立的。
pk:=CLOSE>M1 AND HOLDING<0;//成立
KD:=CLOSE>M1 AND HOLDING=0;//不成立
而下面进行开平语句操作
平空:sellshort(pk and holding<0 , 手数,MARKET);
//平空操作完成时,holding=0,但是此前计算的KD为不成立,所以下面的的开多条件就是(0 and holding=0)也不成立,直到下根k时,前面的条件1中被更新掉holding的状态才成立。
开多:buy( KD and holding=0, 手数,MARKET);
谢谢讲解,您的意思是使用下方语句是更正确的方法吗?
//条件2:
PD:=CLOSE<M1 ;
pk:=CLOSE>M1 ;
KK:=CLOSE<M1 ;
KD:=CLOSE>M1 ;
平空:sellshort(pk and holding<0 , 手数,MARKET);
平多:sell(pd and holding>0,手数,MARKET);
开多:buy( KD and holding=0, 手数,MARKET);
开空:buyshort(KK and holding=0,手数,MARKET);
还是没有对错之分。根据你的整体代码。你应该是想做到一开一平原则。所以可以直接使用条件2.
或者你把条件1的语句位置调整也可以达到相同的目的。