设为首页收藏本站

 找回密码
 注册
查看: 5988|回复: 6
打印 上一主题 下一主题

to nopain : TB海龟中的一个bug [复制链接]

Rank: 3Rank: 3

精华
0
UID
1829
积分
240
帖子
31
主题
3
阅读权限
40
注册时间
2008-7-3
最后登录
2020-6-23
跳转到指定楼层
1#
发表于 2008-8-7 20:52:05 |只看该作者 |倒序浏览
现象:
1) 加仓价格不是严格的1/2N递增递减,有时反而出现逆向加仓。
2) 赢利头寸出市条件不是反向10日新高/低,会在某个位置莫名其妙以止损出场,而不是严格的右侧交易。

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

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



  1.    while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
  2.     {
  3.         myEntryPrice = preEntryPrice + 0.5 * N;
  4.         preEntryPrice = myEntryPrice;
  5.         If(Buy(TurtleUnits,myEntryPrice))
  6.         {
  7.             IsAddThisBar = True;
  8.             SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
  9.         }
  10.     }
  11. }

  12. // 止损指令
  13. If(IsAddThisBar)
复制代码


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

  14. // 止损指令
  15. If(IsAddThisBar)
复制代码


或者

  1.     while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
  2.     {
  3.         myEntryPrice = preEntryPrice + 0.5 * N;
  4.         preEntryPrice = myEntryPrice;
  5.         If(Buy(TurtleUnits,myEntryPrice))
  6.         {
  7.             IsAddThisBar = True;
  8.             SetGlobalVar(0,preEntryPrice);// 保存最后一次开仓的价格
  9.         }
  10.     }
  11. }

  12. // 止损指令
  13. preEntryPrice = GetGlobalVar(0); // 重新取出上一次开仓的价格
  14. If(IsAddThisBar)
复制代码

Rank: 3Rank: 3

精华
0
UID
1829
积分
240
帖子
31
主题
3
阅读权限
40
注册时间
2008-7-3
最后登录
2020-6-23
2#
发表于 2008-8-7 21:07:14 |只看该作者
只要在每次开仓平仓指令后面加入Commentary就可以发现。
Commentary("preEntryPrice:"+Text(preEntryPrice));

使用道具 举报

Rank: 4

精华
0
UID
1868
积分
510
帖子
55
主题
9
阅读权限
50
注册时间
2008-7-12
最后登录
2019-3-30
3#
发表于 2008-8-8 08:56:55 |只看该作者
学习ing

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2008-8-8 10:05:44 |只看该作者

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
1829
积分
240
帖子
31
主题
3
阅读权限
40
注册时间
2008-7-3
最后登录
2020-6-23
5#
发表于 2008-8-11 19:37:11 |只看该作者
还需要改一个地方:
  1.     // 当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作
  2.     If ((Not LastProfitableTradeFilter) Or (NOT LastBreakoutWin)
复制代码


改为:
  1.     // 当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作
  2.     If(((Not LastProfitableTradeFilter) Or (NOT LastBreakoutWin)) And MarketPosition == 0)
复制代码


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

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
2212
积分
1262
帖子
49
主题
11
阅读权限
60
注册时间
2008-8-27
最后登录
2015-12-17
6#
发表于 2008-9-27 21:50:50 |只看该作者
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)


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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2008-9-27 22:17:48 |只看该作者
原帖由 cyycjt 于 2008-9-27 21:50 发表
while(Low  


不需要的

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-8 21:26

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部