-- 作者:qinjuns
-- 发布时间:2013/4/8 13:25:11
--
我是菜鸟,让鸟兄和诸位见笑了。由于是对海龟交易系统的改进,所以在测试时用的是STOP止损指令,这可能就是资金曲线平滑的原因。海龟交易系统大家都比较熟悉,如何用于日内交易是我改进这个模型的出发点,希望大家对这个模型能给出具体的建议或改进。为了便于交流,我把源码贴出来,各位塔友可以自己测一下(用五分钟、十分钟都可以),有好的意见请贴出来,好让我学习提高。另外,这个模型是不成熟的,主要问题是图表上显示都是正常的,但是用模拟盘测试时有时会出现不平仓的现象。所以千万不要直接用于实盘。
//改进版股指期货超短线海龟交易策略
//版本:20130406
//特点:固定手数与自动仓位切换,有隔夜仓或不隔夜自动切换开关。
VARIABLE:dayCount=1,PositionCount=1,SellSign=0;
VARIABLE:EntAndExitSign=1,EntPoint=0,ExitPoint=0;
VARIABLE:N=0,Ratio=2,Nmin=5;
INPUT:自动仓位(0,0,1,1),仓位比例(5,1,10,1),固定手数(1,1,3000,1),收市平仓(1,0,1,1),平仓比例(100,10, 100, 10);
//参数
ShortCycle:=Ratio;{平仓周期设置}
Longperiod:=2*Ratio;{开仓周期设置}
Interval:=30*0.01;{加仓价位间隔设置}
Cwratio:=仓位比例*0.0001;{仓位比例设置,最大仓位与资金量的百分比例}
Closeoff:=收市平仓*5000;{1:收市平仓,0:收市不平仓}
Closeratio:=平仓比例;{收市平仓时,平仓的比例,100%:全平,50%:平一半}
Off:=自动仓位;{1:按设定的仓位比例自动开仓,0:按设定的手数固定开仓}
Ss:=固定手数;{固定手数设置}
//提前分钟数自动设置
If Datatype=1 then Nmin:=3;
Otime:=Opentime(1);
Ctime:=Closetime(0)-Nmin*100;
Entertime:=Time>=Otime and Time<=Ctime;
Exittime:=Time>=Ctime+Nmin*100-100 and Time<=Ctime+Nmin*100-500+Closeoff ;
M:=ma(TR,12);
Buyhhv:=ref(hhv(H,Longperiod),1);
Sellllv:=ref(llv(L,ShortCycle),1);
Sellshorthhv:=ref(hhv(H,ShortCycle),1);
Buyshortllv:=ref(llv(L,Longperiod),1);
If Barpos>=21 then begin
If Barpos=21 then
N:=M;
If DayCount=6 or Barpos=21 then begin{5天调整N值}
N:=(19*N+TR)/20;{计算N值}
DayCount:=2;
end
DayCount:=DayCount+1;
EntPoint:=EnterBars+1;
If EntPoint=EntAndExitSign then begin{说明STOP指令买进头寸成功}
PositionCount:=PositionCount+1;{头寸计数}
SellSign:=True;{如果达到指定的价格,开始以STOP卖出}
end
How:=Cash(0)*Cwratio/N;
Cw:=if(Off=0,Ss,How);
If PositionCount=1 and Entertime then begin{第一头寸}
开多1:Buy(1 and Holding=0,Cw,Stop,Buyhhv);
开空1:Buyshort(1 and Holding=0,Cw,Stop,Buyshortllv);
end
If PositionCount=2 and Entertime then begin{如到第二头寸}
开多1:Buy(1 and Holding>0,Cw,Stop,Enterprice+Interval*N);{在上一头寸(即第一头寸)+0.3个N以STOP指令买进}
开空2:Buyshort(1 and Holding<0,Cw,Stop,Enterprice-Interval*N);
end
If PositionCount=3 and Entertime then begin{如到第三头寸}
开多3:Buy(1 and Holding>0,Cw,Stop,Enterprice+Interval*N);
开空3:Buyshort(1 and Holding<0,Cw,Stop,Enterprice-Interval*N);
end
If PositionCount=4 and Entertime then begin{如到第四头寸}
开多4:Buy(1 and Holding>0,Cw,Stop,Enterprice+Interval*N);
开空4:Buyshort(1 and Holding<0,Cw,Stop,Enterprice-Interval*N);
End
End
//这部分语句可能有问题,望高手给改一下(问题是不平空仓)
If SellSign=True then begin
ExitPoint:=Exitbars+1;
If ExitPoint=EntAndExitSign then begin {说明卖出成功}
PositionCount:=1;{头寸计算复原}
SellSign:=False;
end
If Enterprice+2*N then begin
平多Y:SELL(1,100%,Stop,Sellllv);{了结盈利头寸}
end
Else begin
平多S:SELL(1,100%,Stop,Enterprice-2*N);{了结亏损头寸}
end
If Enterprice-2*N then begin
平空Y:Sellshort(1,100%,Stop,Sellshorthhv);
end
Else begin
平空S:Sellshort(1,100%,Stop,Enterprice+2*N);
end
end
If Exittime then begin
If Holding>0 then begin
SELL(1,Closeratio%,Market);
end
If Holding<0 then begin
Sellshort(1,Closeratio%,Market);
end
end;
持仓:holding,linethick0;
资产:asset,noaxis,colorgray;
可用现金:cash(0),linethick0;
交易次数:totaltrade,linethick0;
正确率:percentwin,linethick0;
|