等级: 免费版 
- 注册: 
 - 2022-5-31
 
- 曾用名: 
 
 
 
 | 
 
策略回测开平仓价格不是收盘价!请老师帮改成收盘价成交!回测也是要真实的收盘价!谢谢 
 
 
 
input:n(2,1,30); 
input:ss(1,1,10000,1); 
input:NMIN(10,1,100,1); 
input:b(0.005,0.001,2,0.001);//用于控制止损价 
input:d(1,0.001,2,0.001);//用于调整买卖限制价格 
收 盘 价:=close; 
手    数:=ss; 
期 望 数:=b; 
倍    数:=d; 
开仓历时:=ENTERBARS+1; 
开仓时间:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;//OPENTIME(1)表示9:15 
平仓时间:=TIME>=CLOSETIME(0)-NMIN*100;//{NMIN 为参数,CLOSETIME(0)-NMIN*100 表示收盘时间提前 N 分钟,N 由 NMIN 控制} 
当前资产:ASSET,NOAXIS,COLORGRAY; 
当前持仓:HOLDING,COLORGRAY,LINETHICK0; 
variable:入场价=0,波动多止损价=0,波动空止损价=0,开多次数=0,开空次数=0,趋买市=0,趋卖市=0; 
variable: returnall[100000]=0; //累计回报率 
variable: return[100000]=0; //当日回报率 
k:=BARPOS;//K线顺序位置 
 
//参考指标  
if k=1 then BEGIN //初始化数值 
return[k]:=0; 
returnall[k]:=1; 
END 
else BEGIN 
return[k]:=(当前资产-当前资产[k-1])/当前资产[k-1]; //计算当期的回报率 
returnall[k]:=returnall[k-1]*(return[k]+1); //累计回报率 
累计回报率:returnall[k],COLORRED,NOAXIS; 
END 
 
//多头止损价:=b*入场价+入场价+4.9 
//空头止损价:=入场价-b*入场价-4.9 
//均值:=ma(c,4); 
 
//信号指标 
n 周期高点:=REF(HHV(H,n),1);//前两期中最高价,n=2 
n 周期低点:=REF(LLV(L,n),1); 
m:(n 周期高点+n 周期低点)/2; 
开多平空:=cross(c,m-1)=1 and holding<=0; 
平多开空:=cross(m,c)=1 and holding>=0; 
 
//交易系统 
if 开多平空 and holding=0 then BEGIN 
开多:BUY(1,手数,LIMITR,m-1)IGNORECHECKPRICE;//开多信号,手术为ss即一百手 
end 
if 开多平空 and holding<0 then BEGIN 
平空:SELLSHORT(1,HOLDING(),LIMITR,m)IGNORECHECKPRICE; 
开多 2:BUY(1,手数,LIMITR,m-2)IGNORECHECKPRICE;//先平再开,在同一个时点进行 
end 
if 平多开空 and holding=0 then BEGIN 
 开空:BUYSHORT(1,手数,LIMITR,m+2)IGNORECHECKPRICE; //开空信号 
end 
if 平多开空 and holding>0 then BEGIN 
 平多:SELL(1,HOLDING,LIMITR,m+2)IGNORECHECKPRICE; 
 开空 2:BUYSHORT(1,手数,LIMITR,m+2)IGNORECHECKPRICE; 
end 
收盘平多:sell(平仓时间 and holding>0, 0, thisclose); 
收盘平空:sellshort(平仓时间 and holding<0,0,thisclose); 
{多头突破失败情况:突破入场后,行情反转。止损的同时我们反手开空,但前提是时间在中午11:30 之后,且多头进场在至少 4 根 K 之前。瞬间止损我们不允许反转,因为这往往是市场 
的膝跳反射} 
 
//止损条件 
10 单位平均波幅:=ref(MA(high-LOW,10),1);//前十日最值价差均值在10-20之间 
前期收盘价:=REF(c,1); 
波动多止损价:=MIN(前期收盘价-10 单位平均波幅,前期收盘价-12);//看多反跌 
波动空止损价:=Max(前期收盘价+10 单位平均波幅,前期收盘价+12);//看空反而上涨 
IF HOLDING>0 AND TIME<150000 AND C<=波动多止损价 THEN BEGIN 
 多头止损:SELL(1,HOLDING,MARKET); 
 
 END 
IF  HOLDING<0 AND TIME<150000 AND C>=波动空止损价 THEN BEGIN 
 空头止损:BUYSHORT(1,HOLDING,MARKET); 
 
 //波动空止损价:=MIN(ENTERPRICE+0.15*10 单位平均波幅,ENTERPRICE+3);//多翻空止损价为开仓价加 15%的 10 单位平均波幅和 3 个大点的较小值。 
 //开空次数:=1; 
 END 
 
//加仓条件 
 
 |   
 
 
 
 |