以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于条件语句的使用  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=95136)

--  作者:c100010231
--  发布时间:2016/3/25 14:32:12
--  关于条件语句的使用
策略代码如下:
ZDZS:=L;
IF KD THEN BEGIN
SELLSHORT(HOLDING<0,HOLDING,MARKET),ORDERQUEUE;
BUY(HOLDING=0,5,MARKET),ORDERQUEUE;
DZS:=ZDZS;
END
以上代码执行过程中,只要遇到符合KD的情况,且持仓为零,就会把DZS的值设为开仓时K线的最低价。
但是出现了问题:如果已经开了多仓,且止损(DZS)已设置完毕。那么在下一次符合KD时(此时,上一次所开多仓还没平掉),虽然没有开多仓(因为,此时不符合HOLDING=0这个条件),但是,却把DZS给改变了。请问如何处理?


我是这样做的,请问可行么?(还没实盘测试,不放心,先上来问问各位老师)
IF KD and holding<=0 THEN BEGIN
SELLSHORT(HOLDING<0,HOLDING,MARKET),ORDERQUEUE;
BUY(HOLDING=0,5,MARKET),ORDERQUEUE;
DZS:=ZDZS;
END
上面的代码是把HOLDING<=0这个条件和KD 与了一下,这样,只有在HOLDING<=0也满足的时候才会给DZS赋值。
不知我这样做对不对?

--  作者:jinzhe
--  发布时间:2016/3/25 14:37:25
--  

对,因为前面的理解错了。前面只有KD这一个条件,并没有holding=0这个条件,所以只要KD满足,DZS就会被重新赋值,而不需要holding=0.

所以正确写法是:

 

IF KD THEN BEGIN
     SELLSHORT(HOLDING<0,HOLDING,MARKET),ORDERQUEUE;
     if holding=0 then begin
           BUY(HOLDING=0,5,MARKET),ORDERQUEUE;
           DZS:=ZDZS;
     end
END

--  作者:c100010231
--  发布时间:2016/3/25 14:44:16
--  
必须像您这样写么?
IF KD and holding<=0 THEN BEGIN
SELLSHORT(HOLDING<0,HOLDING,MARKET),ORDERQUEUE;
BUY(HOLDING=0,5,MARKET),ORDERQUEUE;
DZS:=ZDZS;
END
写成这样可不可以?

--  作者:jinzhe
--  发布时间:2016/3/25 14:58:34
--  
也可以,我这样写是比较符合我的习惯