以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 这里有个系统你参考下
|