以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  先平仓后开仓的测试问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=87011)

--  作者:agq198394
--  发布时间:2015/11/5 21:51:48
--  先平仓后开仓的测试问题
如图所示,我的系统开仓限制条件有holding=0,但是在椭圆内,本来不应该开仓的,因为平仓是在k线收盘,但是图表交易信号显示本根k线holding=0,所以又开了新仓,请问这种情况如何解决?
图片点击可在新窗口打开查看此主题相关图片如下:5.jpg
图片点击可在新窗口打开查看

--  作者:agq198394
--  发布时间:2015/11/6 0:24:55
--  
已解决
--  作者:jinzhe
--  发布时间:2015/11/6 8:51:24
--  
在代码里面,从上倒下,先满足平仓条件后平仓,之后又满足开仓条件开仓
--  作者:agq198394
--  发布时间:2015/11/6 9:52:38
--  
我的程序是先平后开,但是不管用,还是出现这种情况,后来在论坛找了这么一段代码就可以了,具体是什么原理我也不清楚。
 
variable:bj=0;

if holding=0 and 开多条件 and bj=0 then begin
    buy(1,1,LIMITR,上轨2);
    bj:=1;
end
 
if holding=0 and 开空条件 and bj=0 then begin
    buyshort(1,1,LIMITR,下轨2);
    bj:=1;
end
 
if holding=0 and 开多条件 and bj=1 and exitbars>0 then buy(1,1,LIMITR,上轨2);
if holding=0 and 开空条件 and bj=1 and exitbars>0 then buyshort(1,1,LIMITR,下轨2);

--  作者:jinzhe
--  发布时间:2015/11/6 10:08:23
--  
还是你喜欢把holding的判断条件写先了?
--  作者:agq198394
--  发布时间:2015/11/6 10:50:03
--  
我的开平顺序是这样写的,总是出现上一次平仓的那根k线就开仓了。

开多条件:=h>=上轨2  AND M5>M10 ;/
开空条件:=l<=下轨2   AND M5<M10  ;//


平多条件1:= L<=下轨1 ;

平空条件1:=h>=上轨1 ;


SELL(DTYDZS ,1,MARKET);
SELLSHORT(KTYDZS ,1,MARKET);

平多1:sell(平多条件1  ,PosNum,LIMITR,SELLPRICE1);

平空1:sellshort(平空条件1  ,PosNum,LIMITR,BUYPRICE1);

开多:buy(开多条件 and holding=0 AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,上轨2);
开空:buyshort(开空条件 and holding=0 AND BOFU<0.03   AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,下轨2);

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看





--  作者:jinzhe
--  发布时间:2015/11/6 10:53:42
--  
你这样写出这样的信号是正常的,先平后开
--  作者:agq198394
--  发布时间:2015/11/6 11:59:21
--  
上边的不行,把holding放在前边才行。

开多条件:=h>=上轨2  AND M5>M10 and holding=0 ;
开空条件:=l<=下轨2   AND M5<M10  and holding=0 ;


平多条件1:= L<=下轨1  ;

平空条件1:=h>=上轨1 ;


SELL(DTYDZS ,1,MARKET);
SELLSHORT(KTYDZS ,1,MARKET);

平多1:sell(平多条件1  ,PosNum,LIMITR,SELLPRICE1);

平空1:sellshort(平空条件1  ,PosNum,LIMITR,BUYPRICE1);

开多:buy(开多条件  AND BOFU<0.03 AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,上轨2);
开空:buyshort(开空条件  AND BOFU<0.03   AND TOTALDAYTRADE<2 and t1 and cyc>1,PosNum,LIMITR,下轨2);

--  作者:jinzhe
--  发布时间:2015/11/6 13:09:11
--  
写前面之后,后面的开仓所产生的holding不会被前面的holding判断所获取,所以不会对平仓条件的持仓判断结果产生影响