以文本方式查看主题

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

--  作者:joy_in
--  发布时间:2014/2/26 11:03:40
--  求助版主关于模型编写的问题!
想使用HANS123和横盘突破(两个金字塔自带的范例模型),但是我不会编写,现向版主求助:

如何在这两个模型里加入这两个条件:
(1)20个点止损;
(2)浮盈达到20个点后,如果再次回到开仓位置则自动平仓;

只要在原有模型中加入以上两个条件就好了,我不知道在原模型中的哪里加,请版主帮忙,不胜感激!下面是我金字塔里面横盘突破的范例模型:

//策略:横盘突破
//简介:
//类型:日内交易
//周期:1分钟
//使用市场:
//详情介绍网址:
//修订时间:2012.11.1
//DESIGNED BY ROGARZ

//准备需要的中间变量
INPUT:SS(1,1,10000,1),N1(0.005,0.001,1,0.001);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
H30:REF(HHV(H,30),1);
L30:REF(LLV(L,30),1);
MID:(H30+L30)/2;//中轴
T1:=TIME>090000 AND TIME <145500;
T2:=TIME>=145500;
手数:=SS;
//进场的条件
开多条件:= H>H30 AND (H30-MID)/MID<N1 AND CYC>=30 AND T1;
开空条件:= L<L30 AND (MID-L30)/MID<N1 AND CYC>=30 AND T1;
//系统
收盘平多:SELL(T2 AND HOLDING>0,0,MARKET) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKET) ;
开空:BUYSHORT(开空条件 AND HOLDING=0,手数,MARKET);
开多:BUY(开多条件 AND HOLDING=0, 手数,MARKET);
//其他
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值

--  作者:jinzhe
--  发布时间:2014/2/26 11:15:29
--  
(1)20个点止损;
(2)浮盈达到20个点后,如果再次回到开仓位置则自动平仓;

 

 

1.

if h-enterprice>20*mindiff then sellshort(1,0,market);

if enterprice-l>20*Mindiff then sell(1,0,market);

2.

if hhv(h,enterbars+1)>enterprice+20*mindiff and enterbars>0 and h<=enterprice then sell(1,0,market);

if llv(l,enterbars+1)<enterprice-20*MIndiff and enterbars>0 and l>=enterprice then sellshort(1,0,market);


--  作者:joy_in
--  发布时间:2014/2/26 11:27:29
--  多谢,但不知道在哪里加这两个条件?
多谢,但不知道在哪里加这两个条件?
刚才家进入之后,发现开平仓信号多了起来,而这两个模型是日内只开一次仓的呀
[此贴子已经被作者于2014/2/26 11:28:51编辑过]

--  作者:jinzhe
--  发布时间:2014/2/26 11:28:39
--  

写在 //其他 前面


--  作者:joy_in
--  发布时间:2014/2/26 11:39:56
--  
谢谢,加进去了。但是又出现一个问题,即20个点止损后接下来又会出现开仓的信号,而我的想法是无论是止损20个点还是盈利20个点回撤到开仓位这两种情况,之后均不再开仓了,即日内只做一次开仓,怎样处理?
--  作者:joy_in
--  发布时间:2014/2/26 13:05:51
--  
求教版主:日内开第一次仓之后不再开仓了,这样的指令怎样编写?
--  作者:jinzhe
--  发布时间:2014/2/26 13:10:23
--  

input 后面加上这样一句

variable:n=0;

 

后面的代码要修改一下

1.

if h-enterprice>20*mindiff  and n=0  and holding<0 then begin

   sellshort(1,0,market);

   n:=1;

end

if enterprice-l>20*Mindiff and n=0 and holding>0  then begin

   sell(1,0,market);

   n:=1;

end

2.

if hhv(h,enterbars+1)>enterprice+20*mindiff and enterbars>0 and h<=enterprice  and holding>0 and n=0 then begin

    sell(1,0,market);

    n:=1;

end

 

if llv(l,enterbars+1)<enterprice-20*MIndiff and enterbars>0 and l>=enterprice and holding<0 and n=0  then begin

    sellshort(1,0,market);

    n:=1;

end

 

代码最后再添加一句

if time=closetime(0) then n:=0;


--  作者:joy_in
--  发布时间:2014/2/26 13:32:43
--  
以下是我按照您给出的回复对金字塔里自带的“横盘突破”策略做的修改,可是在日内图形上还是会有二次甚至三次开仓,怎么回事?您看以下的编码哪里出问题了呢?(另注:我说的20点止损实际上是100跳,我把您给我的编码里的数值更改了一下)
下面的红色字体是您提供给我的编码,为了与原代码区别,做了颜色处理。


//准备需要的中间变量
INPUT:SS(1,1,10000,1),N1(0.005,0.001,1,0.001);
variable:n=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
H30:REF(HHV(H,30),1);
L30:REF(LLV(L,30),1);
MID:(H30+L30)/2;//中轴
T1:=TIME>090000 AND TIME <145500;
T2:=TIME>=145500;
手数:=SS;
//进场的条件
开多条件:= H>H30 AND (H30-MID)/MID<N1 AND CYC>=30 AND T1;
开空条件:= L<L30 AND (MID-L30)/MID<N1 AND CYC>=30 AND T1;
//系统
收盘平多:SELL(T2 AND HOLDING>0,0,MARKET) ;
收盘平空:SELLSHORT(T2 AND HOLDING<0,0,MARKET) ;
开空:BUYSHORT(开空条件 AND HOLDING=0,手数,MARKET);
开多:BUY(开多条件 AND HOLDING=0, 手数,MARKET);
if h-enterprice>100*mindiff  and n=0  and holding<0 then begin
   sellshort(1,0,market);
   n:=1;
end
if enterprice-l>100*Mindiff and n=0 and holding>0  then begin
   sell(1,0,market);
   n:=1;
end
if hhv(h,enterbars+1)>enterprice+100*mindiff and enterbars>0 and h<=enterprice  and holding>0 and n=0 then begin
    sell(1,0,market);
    n:=1;
end
 
if llv(l,enterbars+1)<enterprice-100*MIndiff and enterbars>0 and l>=enterprice and holding<0 and n=0  then begin
    sellshort(1,0,market);
    n:=1;
end
if time=closetime(0) then n:=0;
//其他
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值

--  作者:jinzhe
--  发布时间:2014/2/26 13:41:57
--  
也就是不管怎么平仓的,就只开仓一次?
 
那么就不用这么复杂了
variable:n=0;
 
if 开空条件 AND HOLDING=0 and n=0 then begin
开空:BUYSHORT(开空条件 AND HOLDING=0,手数,MARKET);
n:=1;
end
 
if 开多条件 AND HOLDING=0 and n=0 then begin
开多:BUY(开多条件 AND HOLDING=0, 手数,MARKET);
n:=1;
end
 
if time=closetime(0) then n:=0;
 
上面的那些修改都删掉,还原为我最开始写的
然后对开仓语句做如上修改
 

--  作者:joy_in
--  发布时间:2014/2/26 16:10:30
--  
多谢了!