以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  混合模式问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=63029)

--  作者:qinhanbo
--  发布时间:2014/3/24 8:54:47
--  混合模式问题

老师好!我想在已经开发完成的突破模型中加入震荡交易,思路是:突破模型完成平仓后(不论平多还是平空),即转入震荡模式;转入震荡模式后,只允许做3次交易(不论多空);震荡模式结束标准:震荡模式交易达到3次或者突破模式出现开仓信号。以上思路尝试了好几天都无法实现,麻烦老师帮忙指引。

 


//交易系统

手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;
震荡手数1:=(CASH(0)/(CLOSE*300*0.15))*0.2;
震荡手数2:=ENTERVOL*2;

突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);

突破单开多:BUY(突破单开多条件,手数,MARKET);
突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);

震荡市开多:BUY( 震荡市开多条件,震荡手数1,MARKET);
震荡多单平仓:SELL( 震荡多单平仓条件 AND HOLDING>0,HOLDING,MARKET);

震荡市开空:BUYSHORT( 震荡市开空条件 ,震荡手数1,MARKET);
震荡空单平仓:SELLSHORT(震荡空单平仓条件 AND HOLDING<0,HOLDING,MARKET);

 
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;


--  作者:jinzhe
--  发布时间:2014/3/24 9:18:00
--  
你尝试的写法是怎么写的?
--  作者:qinhanbo
--  发布时间:2014/3/24 9:34:11
--  

//交易系统

手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;
震荡手数1:=(CASH(0)/(CLOSE*300*0.15))*0.2;
震荡手数2:=ENTERVOL*2;
IF (突破单平多条件 OR 突破单平空条件) THEN BEGIN

    震荡市开多:BUY( 震荡市开多条件,震荡手数1,MARKET);
    震荡多单平仓:SELL( 震荡多单平仓条件 AND HOLDING>0,HOLDING,MARKET);
    震荡市开空:BUYSHORT( 震荡市开空条件 ,震荡手数1,MARKET);
    震荡空单平仓:SELLSHORT(震荡空单平仓条件 AND HOLDING<0,HOLDING,MARKET);

 END
IF  (突破单开多条件 OR 突破单开空条件) THEN BEGIN

    突破单开多:BUY(突破单开多条件,手数,MARKET);
    突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);
    突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
    突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);

END


--  作者:qinhanbo
--  发布时间:2014/3/24 9:38:32
--  
我不知道控制语句用的对不对,另外如何用全局变量来分别记录两种模式的交易信号,我学习时间不长,实盘资金等着这个模型呢。急
--  作者:jinzhe
--  发布时间:2014/3/24 10:20:06
--  

思路是:突破模型完成平仓后(不论平多还是平空),即转入震荡模式;转入震荡模式后,只允许做3次交易(不论多空);震荡模式结束标准:震荡模式交易达到3次或者突破模式出现开仓信号。

variable:n=0;

variable:m=0;

 

if 突破单平多条件 and n=0 and holding>0 then begin

   平多语句;

   n:=1;

end

 

if 突破单平空条件 and n=0 and holding<0 then begin

   平空语句;

   n:=1;

end

 

if 突破单开多条件 and holding=0 then begin

   开多语句;

   n:=0;

end

 

if 突破单开空条件 and holding=0 then begin

   开空语句;

   n:=0;

end

 

if n=1 and holding=0   and m<3 and 震荡单开多条件 then begin

   开多语句;

   m:=m+1;

end

 

if n=1 and holding=0   and m<3 and 震荡单开空条件 then begin

   开空语句;

   m:=m+1;

end

 

if m=3 then begin

   n:=0;

   M:=0;

end

  


--  作者:qinhanbo
--  发布时间:2014/3/24 11:34:51
--  
谢谢!我试试看
--  作者:qinhanbo
--  发布时间:2014/3/24 14:20:36
--  

发现两个问题

1、要去掉第一、第二段的n=0,信号才会正常出现,否则历史图表中只显示一次开仓信号,别的信号都没有。

2、震荡市的开仓信号是用突破单的平仓条件进行平仓的,不是震荡单的平仓条件,是漏掉了吗?


--  作者:jinzhe
--  发布时间:2014/3/24 14:27:33
--  

1随你的需求改

2没有必要的,没涉及到全局变量的就不写了


--  作者:qinhanbo
--  发布时间:2014/3/26 13:49:48
--  

老师,我用你给的语法改写了自己的模型,发现震荡模式没有平仓信号,后续符合开仓条件的信号也就出不来了。我的思路可能表达不完整,应该是震荡模式3次交易结束后等待突破模式信号,如此反复循环。下面是我写的语句,麻烦帮看一下怎么改。

//交易系统

手数:=(CASH(0)/(CLOSE*300*0.15))*0.5;

variable:n=0;//突破--震荡标志,0突破,1震荡
variable:tpd=0;//突破多单统计
variable:tpk=0;//突破空单统计
variable:m=0;//震荡单统计
 
if n=0 and 突破单平多条件 and holding>0  then begin
   突破单平多:SELL(突破单平多条件,HOLDING,MARKET);
   n:=1;
end

if n=0 and  突破单平空条件 and holding<0  then begin
   突破单平空:SELLSHORT(突破单平空条件,HOLDING,MARKET);
   n:=1;
end


if 突破单开多条件 and holding=0 and tpd<2 then begin
   突破单开多:BUY(突破单开多条件,手数,MARKET);
   n:=0;
   tpd:=tpd+1; 
end
 
if 突破单开空条件 and holding=0 and tpk<2 then begin
   突破单开空:BUYSHORT(突破单开空条件,手数,MARKET);
   n:=0;
   tpk:=tpk+1;
end

if n=1 and holding=0   and m<3 and 震荡单开多条件 then begin
   震荡市开多:BUY( 震荡单开多条件,手数,MARKET);
   tpd:=0;
   tpk:=0;
    m:=m+1;    
end

if n=1 and holding=0   and m<3 and 震荡单开空条件 then begin
   震荡市开空:BUYSHORT( 震荡单开空条件 ,手数,MARKET);
   tpd:=0;
   tpk:=0;
    m:=m+1;
 
end

if  holding>0  then begin
  震荡单平多:BUY(震荡多单平仓条件,holding,MARKET);
end

if  holding<0  then begin
  震荡单平空:BUY(震荡空单平仓条件,holding,MARKET); 
end

if m=3 then begin

   n:=0;

   M:=0;

end


 

 
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;


--  作者:jinzhe
--  发布时间:2014/3/26 13:57:36
--  

这个我只能帮你到这里了,剩下的就看你自己对全局变量的理解了

 

m是震荡的开仓次数

n是突破的标记,=1表示已经突破平仓过,=0表示还没有