以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  海龟系统总是无法成交  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=30732)

--  作者:zymg
--  发布时间:2012/11/19 11:21:05
--  海龟系统总是无法成交
初学者写了个海龟交易的公式,但是总是没有信号,查看运行时变量,发现POSITIONCOUNT总是为1而DK总是为0,和我预想的完全不一样,不知道问题出在哪里,把代码贴出了,请高手指教,谢谢

VARIABLE:DayCount=1,positionCount=0,dk=0;       //DayCount是计算第几个周期,positionCount是计算头寸数量,dk为-1开空1开多
VARIABLE:EntPoint=0,ExitPoint=0,sellSign=0;      //sellSign为0不可平仓,为1则可以;EntPoint用于判定本周期有没有开仓;sellSign为1时表示可以平仓

M:=MA(TR,20);             //计算20天内的TR值的简单平均
BUYHHV:=HHV(H,20);        //20天最高价的最高价     
BUYLLV:=LLV(L,20);       //20天最低价的最低价

SELLHHV:=HHV(H,10);      //10日最高价
SELLLLV:=LLV(L,10);      //10日最低价

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=1 THEN BEGIN   //本周期有开仓操作(上周期的信号)
sellSign:=1;         //可以平仓了
positionCount:=positionCount+1;      //头寸加1
END

IF positionCount=0 THEN BEGIN   //第一头寸
HOW:=CASH(0)*0.01/N;   //头寸规模
IF HIGH>=BUYHHV THEN BEGIN
开多1:BUY(1,HOW,MARKET);
dk:=1;
END
IF LOW<=BUYLLV THEN BEGIN
开空1:BUYSHORT(1,HOW,MARKET);
dk:=-1;
END
END
IF positionCount=1 THEN BEGIN   //第二头寸
HOW:=CASH(0)*0.01/N;   //头寸规模
IF dk=1 THEN
开多2:BUY(HIGH>=ENTERPRICE+0.5*N,HOW,MARKET);
IF dk=-1 THEN
开空2:BUYSHORT(LOW<=ENTERPRICE-0.5*N,HOW,MARKET);
END
IF positionCount=2 THEN BEGIN   //第三头寸
HOW:=CASH(0)*0.01/N;   //头寸规模
IF dk=1 THEN
开多3:BUY(HIGH>=ENTERPRICE+0.5*N,HOW,MARKET);
IF dk=-1 THEN
开空3:BUYSHORT(LOW<=ENTERPRICE-0.5*N,HOW,MARKET);
END
ExitPoint:=EXITBARS+1;
IF ExitPoint=1 THEN BEGIN    //本周期有平仓(上周期的信号)
positionCount:=0;     //头寸复原
sellSign:=0;
dk:=0;
END
IF sellSign=1 THEN BEGIN
IF dk=1 THEN
IF ENTERPRICE-2*N then SELL(LOW<=SELLLLV,100%,MARKET);//退出离盈利头寸
    ELSE SELL(L<=ENTERPRICE-2*N,0,MARKET); //退出亏损头寸
IF dk=-1 THEN
IF ENTERPRICE+2*N then SELLSHORT(LOW<=SELLHHV,100%,MARKET);//退出离盈利头寸
    ELSE SELLSHORT(H>=ENTERPRICE+2*N,0,MARKET); //退出亏损头寸
END
END

--  作者:jinzhe
--  发布时间:2012/11/19 13:04:47
--  
用shift+q单步跟踪下
--  作者:董小球
--  发布时间:2012/11/19 13:05:11
--  
楼主,你的问题比较复杂,我们查看后再给你回复!请耐心等待!
--  作者:zymg
--  发布时间:2012/11/19 13:08:28
--  
试过的,跟踪时好像变量的值又都是正常的。。
--  作者:zymg
--  发布时间:2012/11/19 13:18:13
--  
谢谢~
--  作者:zymg
--  发布时间:2012/11/19 13:56:36
--  
我好像明白哪里出错了
ExitPoint:=EXITBARS+1;
IF ExitPoint=1 THEN BEGIN    //本周期有平仓(上周期的信号)
positionCount:=0;     //头寸复原
sellSign:=0;
dk:=0;
END
这一段应该放在检测开仓的代码之前,对吧

--  作者:董小球
--  发布时间:2012/11/19 15:35:50
--  
对 如果他是用来判断开仓的,那么应该放在开仓语句前
--  作者:zymg
--  发布时间:2012/11/20 14:37:58
--  
今天继续测试这个公式发现,它无法在已经开多或者开空的情况下增加头寸,完全没有开空2或者开多2的信号。。继续请教各路高手。。
--  作者:netfox
--  发布时间:2012/11/21 22:30:45
--  
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=246

这里有个系统你参考下