
等级: 新手上路
- 注册:
- 2023-9-18
- 曾用名:
|
//中间变量
INPUT:M(20,10,100,10),N(2,0.5,4,0.5),SS(1,1,100,1);
VARIABLE:X:=50;
MID :=MA(CLOSE,M); //布林中轨
UPPER:=MID + N*STD(CLOSE,M); //布林上轨
LOWER:=MID - N*STD(CLOSE,M); //布林下轨
CYC:=TENTERBARS+1,NOAXIS; //开仓至今的周期数
ROC:=CLOSE - REF(CLOSE,40); //过滤1
ROC2:=ABS((CLOSE - REF(CLOSE,3))/REF(CLOSE,3)*100); //过滤2 防止短期涨幅过大
ROC3:=ABS((CLOSE - REF(CLOSE,7))/REF(CLOSE,7)*100); //过滤3 防止中期涨幅过大
手数:=SS;
EXITMA:=MA(CLOSE,IF(THOLDING<>0,IF(CYC>=40,10,51-CYC),50));
//交易条件
//开多平空条件:=REF(ROC,1)>0 AND REF(ROC2,1)<4 AND REF(ROC3,1)<8 AND H>REF(UPPER,1);//最高价上穿上轨且通过过滤条件
//开空平多条件:=REF(ROC,1)<0 AND REF(ROC2,1)<4 AND REF(ROC3,1)<8 AND L<REF(LOWER,1);//最低价下穿下轨且通过过滤条件
//多头出场条件:=Low<=EXITMA AND EXITMA<UPPER;
//空头出场条件:=HIGH>=EXITMA AND EXITMA>LOWER;
开多平空条件:=REF(ROC,1)>0 AND REF(ROC2,1)<4 AND REF(ROC3,1)<8 AND cross(H,REF(UPPER,1));//最高价上穿上轨且通过过滤条件
开空平多条件:=REF(ROC,1)<0 AND REF(ROC2,1)<4 AND REF(ROC3,1)<8 AND cross(REF(LOWER,1),l);//最低价下穿下轨且通过过滤条件
多头出场条件:=cross(EXITMA,LOW) AND EXITMA<UPPER;
空头出场条件:=cross(HIGH,EXITMA) AND EXITMA>LOWER;
//交易系统
//多头出场:TSELL(多头出场条件 AND THOLDING>0,手数,LMT,MIN(open,EXITMA));
//空头出场:TSELLSHORT(空头出场条件 AND THOLDING<0,手数,LMT,MAX(OPEN,EXITMA));
多头出场:TSELL(多头出场条件 AND THOLDING>0,手数,LMT,c);
空头出场:TSELLSHORT(空头出场条件 AND THOLDING<0,手数,LMT,c);
平空:TSELLSHORT(开多平空条件 AND THOLDING<0,手数,LMT,C);
平多:TSELL(开空平多条件 AND THOLDING>0,手数,LMT,C);
开空:TBUYSHORT(开空平多条件 AND THOLDING=0,手数,LMT,C);
开多:TBUY(开多平空条件 AND THOLDING=0,手数,LMT,C);
//注意先平后开原则
我上面的这段代码是直接根据图表程序化加T改成后台代码的。图表上运行正常,但是后台程序化运行只能开单,不能平仓。
|
|