你应先把“代码放入海龟交易法的代码中”的确切含义想清楚,你是想通过多空头均线过滤还是其它意思,要考虑有无抵触、重复
版主也是为你好,谆谆教诲要牢记于心啊。
不才,花点时间改写了一下,不对之处请指教。另外,你的思路有个漏洞,要注意识别。。。
input:trn(20,5,30),man1(5,2,10),man2(10,5,20),man3(20,10,60);
VARIABLE:dayCount=1,PositionCount=1,SellSign=0,dK=0;//加多空标志,1:多,-1:空 0:空仓
VARIABLE:EntAndExitSign=1,EntPoint=0,ExitPoint=0;
VARIABLE:N=0;
N:=MA(TR,trn);
ma1:=ma(close,man1);
ma2:=ma(close,man2);
ma3:=ma(close,man3);
BUYHHV:=ref(c,barslast(ma1>ma2 and ma2>ma3));
SELLLLV:=ref(c,barslast(ma1<ma2));
sellshortllv:=ref(c,barslast(ma1<ma2<ma3));
buyshorthhv:=ref(c,barslast(ma1>ma2));
//记得这种算法有个漏洞!
IF BARPOS>=man3 THEN
BEGIN
IF BARPOS=man3 THEN
IF DayCount=man3/2 OR BARPOS=man3 THEN
BEGIN{man3/2天调整N值}
N:=((man3-1)*N+TR)/man3;{计算N值}
DayCount:=2;
END
DayCount:=DayCount+1;
EntPoint:=ENTERBARS+1;
IF EntPoint=EntAndExitSign THEN
BEGIN{说明STOP指令买进头寸成功}
PositionCount:=PositionCount+1;{头寸计数}
SellSign:=True;{可以平仓信号,如果达到指定的价格}
END
IF PositionCount=1 THEN BEGIN{第一头寸}
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模}
if high=buyhhv then
BEGIN
dk:=1;
多开1:BUY(1,HOW,STOP,BUYHHV);{在20日新高STOP指令买进}
END;
if low=sellshortllv then
begin
dk:=-1;
空开1:buyshort(1,HOW,STOP,sellshortllv);{在20日新低STOP指令空开}
end;
END
IF PositionCount=2 THEN BEGIN{如到第二头寸}
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模}
if dk=1 then 多开2:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);{在上头寸(即第一头寸)+0.5个N以STOP指令买进}
if dk=-1 then 空开2:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N);
END
IF PositionCount=3 THEN BEGIN{如到第三头寸}
HOW:=CASH(0)*0.01/N;
if dk=1 then 多开3:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);{在上头寸(即第二头寸)+0.5个N以STOP指令买进}
if dk=-1 then 空开3:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N);
END
IF PositionCount=4 THEN BEGIN
HOW:=CASH(0)*0.01/N;
if dk=1 then 多开4:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);
if dk=-1 then 空开4:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N);
END
IF SellSign=True THEN
BEGIN
ExitPoint:=EXITBARS+1;
if dk=1 then
begin
IF ExitPoint=EntAndExitSign THEN
BEGIN {说明卖出成功}
PositionCount:=1;{头寸计算复原}
SellSign:=False;
dk:=0;
END
IF ENTERPRICE-2*N then
SELL(1,100%,STOP,SELLLLV);{退出离盈利头寸}
ELSE
SELL(1,100%,STOP,ENTERPRICE-2*N);{退出亏损头寸}
end;
if dk=-1 then
begin
IF ExitPoint=EntAndExitSign THEN
BEGIN
PositionCount:=1;
SellSign:=False;
dk:=0;
END
IF ENTERPRICE+2*N then
sellSHORT(1,100%,STOP,BUYSHORTHHV);
ELSE
sellSHORT(1,100%,STOP,ENTERPRICE+2*N);
END;
END
END;
感谢楼上的公式,但是这种算法对于初学者来说跟天书一样