以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  加了全局变量,止损后还是会重新开仓如何解决  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=55010)

--  作者:michael000
--  发布时间:2013/8/12 15:35:48
--  加了全局变量,止损后还是会重新开仓如何解决
止损已经用了全局变量来限定

k线走完模式

 

variable:n=0;

 

if  平仓条件 then begin

sell(1,手数,limitr,min(o,zs));

N:=1;

end

 

if  开仓条件 and n:=0 then

开多:BUY(1,手数,MARKET);

end


但回测时还是发现如果止损的那条k线如果条件成立,下一条k线还是会重新开仓,请教各位老师如何解决这个问题,谢谢~~


[
此主题相关图片如下:qq图片20130812153450.jpg
按此在新窗口浏览图片


[此贴子已经被作者于2013/8/12 15:37:02编辑过]

--  作者:jinzhe
--  发布时间:2013/8/12 15:36:45
--  
帖代码
--  作者:michael000
--  发布时间:2013/8/12 15:40:57
--  

variable:zs=c,hl=c,b=0,s=0;

ROC:=(CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100;
ROCMA:=MA(ROC,M);

手数:=ss;

//交易条件

开多条件 :=C<REF(C,1) AND ROC>ROCMA  and b=0;
开空条件 :=C>REF(C,1) AND ROC<ROCMA  and s=0;

 


//交易系统

//止损止盈
if holding>0 and l<zs then begin
sell(1,手数,limitr,min(o,zs));
b:=1;
end;//止损
if holding<0 and h>zs then begin
 sellshort(1,手数,limitr,max(o,zs));
s:=1;
end;
//止损

if 开空条件  and HOLDING>0 then sell(1,手数,MARKET),ORDERQUEUE;
if 开多条件  and HOLDING<0 then sellshort(1,手数,MARKET),ORDERQUEUE;

if 开多条件  and HOLDING=0 then begin
开多:BUY(1,手数,MARKET),ORDERQUEUE;
hl:=h;//记录开仓后的最高点
zs:=enterprice*(1-stop0*0.01);//初始止损
s:=0;
end

 

if 开空条件   and HOLDING=0 then begin
开空:BUYSHORT(1,手数,MARKET),ORDERQUEUE;
hl:=l;//记录开仓后的最高点
zs:=enterprice*(1+stop0*0.01);//初始止损
b:=0;
end;

 


//止盈止损
if holding>0 and h>hl then begin//上移最高点
 hl:=h;
 if hl>enterprice*(1+start1*0.01) then zs:=hl*(1-stop1*0.01);//满80个点,回落20点为止损位
 else if hl>enterprice*(1+start2*0.01) then zs:=hl*(1-stop2*0.01);//满50个点,回落30点为止损位
end

if holding<0 and l<hl then begin//上移最高点
 hl:=l;
 if hl<enterprice*(1-start1*0.01) then zs:=hl*(1+stop1*0.01);//满80个点,回落20点为止损位
 else if hl<enterprice*(1-start2*0.01) then zs:=hl*(1+stop2*0.01);//满50个点,回落30点为止损位
end;


--  作者:michael000
--  发布时间:2013/8/12 15:47:20
--  

具体情况是如果止损的那条k线符合开仓条件的话,那下一条k线又会重新开仓,但如果止损那条k线不符合开仓条件,那么就正常了,在同方向都不会再开仓了


--  作者:jinzhe
--  发布时间:2013/8/12 16:03:11
--  
你这有两个开仓语句啊,全局变量只限定了一个,没有限定另外一个
--  作者:michael000
--  发布时间:2013/8/12 16:11:33
--  

有两个?只有一个啊

 

 

if 开多条件  and HOLDING=0 then begin
开多:BUY(1,手数,MARKET),ORDERQUEUE;
hl:=h;//记录开仓后的最高点
zs:=enterprice*(1-stop0*0.01);//初始止损
s:=0;
end

 

if 开空条件   and HOLDING=0 then begin
开空:BUYSHORT(1,手数,MARKET),ORDERQUEUE;
hl:=l;//记录开仓后的最高点
zs:=enterprice*(1+stop0*0.01);//初始止损
b:=0;
end;


--  作者:jinzhe
--  发布时间:2013/8/12 16:25:32
--  

S要限定平空开多,B要限定平多开空,

同向限定不行


--  作者:michael000
--  发布时间:2013/8/12 16:41:06
--  

但是我止损平仓已经有控制平空仓不能再开空仓的

 

if holding<0 and h>zs then begin
 sellshort(1,手数,limitr,max(o,zs));
s:=1;
end;

开空条件也限定了s=0才能开空仓:

开空条件 :=C>REF(C,1) AND ROC<ROCMA  and s=0;

 

就是不明白为什么还是会出现平仓后又重新开仓的情况,我个人认为是不是因为是历史回测,在同一条k线里面的话,这个赋值体现不出来的缘故呢,因为出现错误的地方都是因为那条k线既符合止损平仓条件又符合开仓条件的


--  作者:michael000
--  发布时间:2013/8/12 17:26:39
--  

--  作者:michael000
--  发布时间:2013/8/13 11:15:35
--  
请管理员回答一下好吗?