以文本方式查看主题

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

--  作者:gsqh_zyp
--  发布时间:2014/1/10 15:33:43
--  止赢反手问题
请问老师,如果多头达到止赢条件,这时止赢反手开空,但是这时还是满足多头条件,这个时候怎么不执行多头条件
--  作者:jinzhe
--  发布时间:2014/1/10 15:37:18
--  

这个是要看书写顺序的

 

比如是

if  平空开多条件  then begin

    sellshort;

    buy;

end

 

if  平多开空条件  then begin

    sell........;

    buyshort.

end

那么到了判断sell的时候,buy的判断已经过去了,所以只会buyshort


--  作者:gsqh_zyp
--  发布时间:2014/1/10 16:30:53
--  


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

老师,你说的还不太明白,好比图中,当出现多头止赢后反手,但第二根K线立即又平空开多了,因为这个时候在我的策略里面还是多头的格局,但我这时就行一直开空,但下次出现平空开多的条件在触发。


--  作者:gsqh_zyp
--  发布时间:2014/1/10 16:32:34
--  

//参数设置:
INPUT:M(26,5,300,30),N(2,0.1,10,1),S(9,2,60,6),P(14,1,100,1);

RUNMODE:0;

mid :  ma(close,M);
upper := mid + N*STD(close,M);
lower := mid - N*STD(close,M);

                           
//平多开空
if close<mid then begin
 sell(holding>0,0,limitr,close);
 buyshort(holding=0,1,limitr,close);
end


//平空开多
if close>mid then begin 
 sellshort(holding<0,0,limitr,close);
 buy(holding=0,1,limitr,close);
end      

//移动止赢,出现最高赢利后,回落到赢利的70%平仓出场

en:=enterbars;//开仓以来的周期数
enlv:=llv(l,en+1);//开仓以来的最低值
enhv:=hhv(h,en+1);//开仓以来的最高值

//初始化变量,持仓状态下的最大赢利
win:=0;//最大获利
win2:=0;//最大获利幅度
win3:=0;//最大获利后的最大回调幅度

if holding>0 and enterbars>0 then begin
 win:=enhv-enterprice;
 win2:=(enhv-enterprice)/enterprice*100;
 win3:=(enhv-c)/win*100;
end

if holding<0 and enterbars>0 then begin
 win:=enterprice-enlv;
 win2:=(enterprice-enlv)/enterprice*100;
 win3:=(c-enlv)/win*100;
end

//出现最高赢利后,获利在300点以上,按回撤70%止赢
if win>300 and win3>=30 then begin
 多头止赢:sell(openprofit>0 and holding>0,0,limitr, close);
 buyshort(1,1,limitr,close);
end

if win>300 and win3>=30 then begin
    空头止赢:sellshort(openprofit>0 and holding<0,0,limitr, close);
    buy(1,1,limitr,close);
end

        
//账户信息:
资产:ASSET,PRECISION0,NOAXIS,COLORFF00FF;
可用现金:CASH(0),PRECISION0,NOAXIS,LINETHICK0;
持仓:HOLDING,LINETHICK0;
胜率:PERCENTWIN,LINETHICK0;
交易次数:TOTALTRADE,LINETHICK0;

 

 

这个是代码,麻烦老师帮忙看看,不太明白开平那个顺序的机制


--  作者:jinzhe
--  发布时间:2014/1/10 16:38:32
--  

不明白不要紧看我的说明多理解理解

公式计算是有顺序,从上到下的顺序,所以反手程序的前提下,平仓之后必然是反手的,

就如前面的简单例子,平仓和反手是写在一起的,除非你的反手代码里面中间加上开同向仓的代码比如

 

if  条件 then begin

   sell(平多条件,0,market);

   buy(开多条件,1,market);

   buyshort(开空条件,1,market);

end

 

这样的情况下,才会是在平多之后,满足开多条件后开多,

不然通常的反手写法,只会是在平仓之后反手,不会接着开同向的仓


--  作者:gsqh_zyp
--  发布时间:2014/1/10 16:56:50
--  
嗯,谢谢!
--  作者:gsqh_zyp
--  发布时间:2014/1/13 14:06:48
--  
哦,jinzhe老师,我的意思是平仓反手没有问题,但是我止赢反手后第二根K线会出现之前的信号,如三楼的图片,
我不想多头止赢反手开空,第二根K线又马上平空开多,我想止赢反手后等之前不加止赢条件时满足平空开多在平空开多。


--  作者:jinzhe
--  发布时间:2014/1/13 14:17:49
--  

希望开仓后过个一根k线再出信号?要这样改

 

INPUT:M(26,5,300,30),N(2,0.1,10,1),S(9,2,60,6),P(14,1,100,1);

RUNMODE:0;

mid :  ma(close,M);
upper := mid + N*STD(close,M);
lower := mid - N*STD(close,M);

variable:kk=0;                           
//平多开空

if close<mid and kk=0 then begin

    buyshort(holding=0,1,limitr,c);

    kk:=1;

end

 

if close>mid and kk=0 then begin

   buy(holding=0,1,limitr,close);

   kk:=1;

end


if close<mid  and kk=1 and enterbars>1 then begin
 sell(holding>0,0,limitr,close);
 buyshort(holding=0,1,limitr,close);
end


//平空开多
if close>mid and kk=1 and enterbars>1 then begin 
 sellshort(holding<0,0,limitr,close);
 buy(holding=0,1,limitr,close);
end      

//移动止赢,出现最高赢利后,回落到赢利的70%平仓出场

en:=enterbars;//开仓以来的周期数
enlv:=llv(l,en+1);//开仓以来的最低值
enhv:=hhv(h,en+1);//开仓以来的最高值

//初始化变量,持仓状态下的最大赢利
win:=0;//最大获利
win2:=0;//最大获利幅度
win3:=0;//最大获利后的最大回调幅度

if holding>0 and enterbars>0 then begin
 win:=enhv-enterprice;
 win2:=(enhv-enterprice)/enterprice*100;
 win3:=(enhv-c)/win*100;
end

if holding<0 and enterbars>0 then begin
 win:=enterprice-enlv;
 win2:=(enterprice-enlv)/enterprice*100;
 win3:=(c-enlv)/win*100;
end

//出现最高赢利后,获利在300点以上,按回撤70%止赢
if win>300 and win3>=30 then begin
 多头止赢:sell(openprofit>0 and holding>0,0,limitr, close);
 buyshort(1,1,limitr,close);
end

if win>300 and win3>=30 then begin
    空头止赢:sellshort(openprofit>0 and holding<0,0,limitr, close);
    buy(1,1,limitr,close);
end

        
//账户信息:
资产:ASSET,PRECISION0,NOAXIS,COLORFF00FF;
可用现金:CASH(0),PRECISION0,NOAXIS,LINETHICK0;
持仓:HOLDING,LINETHICK0;
胜率:PERCENTWIN,LINETHICK0;
交易次数:TOTALTRADE,LINETHICK0;


--  作者:gsqh_zyp
--  发布时间:2014/1/13 14:58:52
--  
哦,老师,我不是那个意思,我是想如图中加入止赢后反手然后按没加止赢前的策略进行开平仓
--  作者:gsqh_zyp
--  发布时间:2014/1/13 14:59:42
--  
上传不了图片?