以下是引用王锋在2016-8-11 21:11:06的发言:
你没贴出完整代码,我们无法评估FLAG这个变量到底什么性质的,如果你是想像其他语言那样,你要将变量声明为全局变量才可以。
参考 VARIABLE
好的。其实就是金肯特纳加上止盈止损,大概说一下就是多的一个就是在止盈之后如果价格突破这个止盈的点位,继续做同方向的操作。
/////Bug:
//1、平多开空可能在同一天
//2、flag只能用在一根K线上,值不能延续
//中间变量
INPUT:N(40,1,100,10),SS(1,1,10000,1);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
手数:=SS;
FLAG:=2;
MA1:REF(MA(((H+L+C)/3,N)),1);//三价平均线
浮动区间:=REF(MA(TR,N),1);//真实振幅的移动平均线
上轨:MA1+浮动区间;
下轨:MA1-浮动区间;
//交易条件
开多条件:=MA1>REF(MA1,1) AND C>上轨;
开空条件:=MA1<REF(MA1,1) AND C<下轨;
平多条件:=C<MA1;
平空条件:=C>MA1;
//止损
IF HOLDING<0 AND (H-ENTERPRICE>ENTERPRICE*0.05) THEN
BEGIN
平空2:SELLSHORT(1,手数,LIMITR,ENTERPRICE*(1+0.05)); ///5%止损
FLAG:=0;
END
IF HOLDING>0 AND (L-ENTERPRICE<-ENTERPRICE*0.05) THEN
BEGIN
平多2:SELL(1,手数,LIMITR,ENTERPRICE*(1-0.05));
FLAG:=0;
END
//止盈
//1、最大获利点数
KDYL:=HHV(H,ENTERBARS)-ENTERPRICE;
KKYL:=ENTERPRICE-LLV(L,ENTERBARS);
IF HOLDING<>0 AND ABS(C-ENTERPRICE)>=ENTERPRICE*0.3 THEN P:=20; //如果盈利20%以上回撤10%止盈
IF HOLDING<>0 AND ABS(C-ENTERPRICE)<ENTERPRICE*0.3 AND ABS(C-ENTERPRICE)>ENTERPRICE*0.05 THEN P:=20; //如果盈利小于20%,回撤5%止盈
//2、计算跟踪止盈价位,向价格不利方向取p%
KDZY:=FLOOR(KDYL*(1-P/100));
KKZY:=CEILING(KKYL*(1-P/100));
IF HOLDING<0 AND ENTERBARS>0 AND KKYL>0 AND KKYL>ENTERPRICE*0.05 AND C>ENTERPRICE-KKZY THEN //开空移动止损
BEGIN
//SELLSHORT(1,手数,LIMITR,ENTERPRICE-KKZY);
平空1:SELLSHORT(1,手数,MARKET);
FLAG := 1;
END
ELSE
BEGIN
平空0:SELLSHORT(平空条件 AND HOLDING<0,手数,LIMITR,MA1);//SELLSHORT(平空条件 AND HOLDING<0,手数,MARKET);
FLAG:=0;
END
IF HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY THEN //开多移动止损
BEGIN
//SELL(1,手数,LIMITR,KDZY+ENTERPRICE);
平多1:SELL(1,手数,MARKET);
FLAG:=1;
END
ELSE
BEGIN
平多0:SELL(平多条件 AND HOLDING>0,手数,MARKET);
FLAG:=0;
END
IF CROSS(EXITPRICE,C) AND FLAG=1 THEN 开空1:BUYSHORT(1,手数,MARKET);
ELSE 开空0:BUYSHORT(开空条件 AND HOLDING>=0 AND FLAG=0,手数,MARKET);
IF CROSS(C,EXITPRICE) AND FLAG=1 THEN 开多1:BUY(1,手数,MARKET);
ELSE 开多0:BUY(开多条件 AND HOLDING<=0 AND FLAG=0,手数,MARKET);
{BUYSHORT(开空条件 AND HOLDING>=0,手数,MARKET);
BUY(开多条件 AND HOLDING<=0,手数,MARKET);}
tiajian :HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY,COLORGRAY,LINETHICK0;
信号:FLAG,COLORGRAY,LINETHICK0;
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值