这个是要看书写顺序的
比如是
if 平空开多条件 then begin
sellshort;
buy;
end
if 平多开空条件 then begin
sell........;
buyshort.
end
那么到了判断sell的时候,buy的判断已经过去了,所以只会buyshort
 此主题相关图片如下:qq图片20140110162707.jpg
此主题相关图片如下:qq图片20140110162707.jpg
老师,你说的还不太明白,好比图中,当出现多头止赢后反手,但第二根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);
                            
//平多开空 
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;
这个是代码,麻烦老师帮忙看看,不太明白开平那个顺序的机制
不明白不要紧看我的说明多理解理解
公式计算是有顺序,从上到下的顺序,所以反手程序的前提下,平仓之后必然是反手的,
就如前面的简单例子,平仓和反手是写在一起的,除非你的反手代码里面中间加上开同向仓的代码比如
if 条件 then begin
sell(平多条件,0,market);
buy(开多条件,1,market);
buyshort(开空条件,1,market);
end
这样的情况下,才会是在平多之后,满足开多条件后开多,
不然通常的反手写法,只会是在平仓之后反手,不会接着开同向的仓
希望开仓后过个一根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;