这个是要看书写顺序的
比如是
if 平空开多条件 then begin
sellshort;
buy;
end
if 平多开空条件 then begin
sell........;
buyshort.
end
那么到了判断sell的时候,buy的判断已经过去了,所以只会buyshort
此主题相关图片如下: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;