以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  HOLDING条件影响测试结果  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=174486)

--  作者:server808
--  发布时间:2020/2/22 16:38:12
--  HOLDING条件影响测试结果

下方条件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);

--  作者:wenarm
--  发布时间:2020/2/22 16:57:30
--  

没有区别。也没有对错之分。只是条件1与开平语句组合后,条件重复而已。

pk and holding<0;

等价于

CLOSE>M1 AND HOLDING<0 and  holding<0;

 

 

回测不同建议比对两次回测中的设置是否有差别。如果是两台金字塔之间比较,还要留一下数据是否一致以及合约信息设置中的信息。

 

 


--  作者:server808
--  发布时间:2020/2/22 16:59:44
--  
回测条件完全相同,都是在金字塔,但结果不同,麻烦您试一下
--  作者:wenarm
--  发布时间:2020/2/22 17:34:55
--  

执行逻辑中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);

--  作者:server808
--  发布时间:2020/2/22 18:00:24
--  

谢谢讲解,您的意思是使用下方语句是更正确的方法吗?

//条件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);

--  作者:wenarm
--  发布时间:2020/2/22 18:03:19
--  

还是没有对错之分。根据你的整体代码。你应该是想做到一开一平原则。所以可以直接使用条件2.

或者你把条件1的语句位置调整也可以达到相同的目的。


--  作者:server808
--  发布时间:2020/2/22 18:07:47
--  
明白了这个含义,谢谢!