2008-8-7 20:52 shawn_liu
to nopain : TB海龟中的一个bug

现象:
1) 加仓价格不是严格的1/2N递增递减,有时反而出现逆向加仓。
2) 赢利头寸出市条件不是反向10日新高/低,会在某个位置莫名其妙以止损出场,而不是严格的右侧交易。

图片可以参考这个帖子:
[url=http://www.tradeblazer.net/forum/viewthread.php?tid=1917]http://www.tradeblazer.net/forum/viewthread.php?tid=1917[/url]

原因:
系统在加仓失败时没有正确处理preEntryPrice变量。
如下代码,加仓失败后,preEntryPrice还是被多次修改,修改后的preEntryPrice值在后面止损指令中被引用。


[code]
   while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
    {
        myEntryPrice = preEntryPrice + 0.5 * N;
        preEntryPrice = myEntryPrice;
        If(Buy(TurtleUnits,myEntryPrice))
        {
            IsAddThisBar = True;
            SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
        }
    }
}

// 止损指令
If(IsAddThisBar)[/code]

修改:
或者加仓才改变preEntryPrice值,或者后面止损指令前重新提取preEntryPrice值。[code]    while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
    {
        myEntryPrice = preEntryPrice + 0.5 * N;
        
        If(Buy(TurtleUnits,myEntryPrice))
        {
            IsAddThisBar = True;
            SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
            preEntryPrice = myEntryPrice;
        }else
                break;        // 开仓失败,跳出循环
    }
}

// 止损指令
If(IsAddThisBar)[/code]

或者

[code]    while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
    {
        myEntryPrice = preEntryPrice + 0.5 * N;
        preEntryPrice = myEntryPrice;
        If(Buy(TurtleUnits,myEntryPrice))
        {
            IsAddThisBar = True;
            SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
        }
    }
}

// 止损指令
preEntryPrice = GetGlobalVar(0); // 重新取出上一次开仓的价格
If(IsAddThisBar)[/code]

2008-8-7 21:07 shawn_liu
只要在每次开仓平仓指令后面加入Commentary就可以发现。
Commentary("preEntryPrice:"+Text(preEntryPrice));

2008-8-8 08:56 kill1919
学习ing:lol :lol :lol

2008-8-8 10:05 nopain
:victory:

2008-8-11 19:37 shawn_liu
还需要改一个地方:
[code]    // 当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作
    If ((Not LastProfitableTradeFilter) Or (NOT LastBreakoutWin)[/code]

改为:
[code]    // 当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作
    If(((Not LastProfitableTradeFilter) Or (NOT LastBreakoutWin)) And MarketPosition == 0)[/code]

这下子是标准的海龟交易系统了  :lol

2008-9-27 21:50 cyycjt
while(Low <= preEntryPrice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
                {
                    myEntryPrice = preEntryPrice - 0.5 * N;
                    preEntryPrice = myEntryPrice;
                    If(SellShort(TurtleUnits,myEntryPrice))
                    {
                        IsAddThisBar = True;
                        SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
                    }
                }
            }

            // 止损指令
            preEntryPrice = GetGlobalVar(0);     
            If(IsAddThisBar)


请教:原码尾部一段是否也要同样如上处理?

2008-9-27 22:17 nopain
[quote]原帖由 [i]cyycjt[/i] 于 2008-9-27 21:50 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=18761&ptid=2723][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
while(Low  [/quote]

不需要的

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.