设为首页收藏本站

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

数据库读写函数bug 一个螺丝钉可致航天飞机失事 [复制链接]

Rank: 4

精华
0
UID
7887
积分
527
帖子
65
主题
23
阅读权限
50
注册时间
2010-3-28
最后登录
2019-11-8
跳转到指定楼层
1#
发表于 2010-6-19 11:50:26 |只看该作者 |倒序浏览
很早我就发现了,多次给tb反应,他们总说我们测试没有问题!!!!

我很无奈,也很害怕,因为系统存在缺陷和bug,时刻危及到你财产的安全。

下面建一个交易指令,SetTBProfileString明明已经写入数据库,居然总是返回失败,

这么显而易见的问题TB测试,为何发现不了?

做软件,特别是做程序化交易软件的要严谨,这个不亚于设计航天飞机,

航天飞机关系到人的生命,而交易系统关系到人的财产安全。

一个螺丝钉可以导致航天飞机失事,一个bug可以导致亏损过半甚至破产!
  1. Params

  2. Vars
  3.         Numeric num;
  4.         string vs1;
  5. Begin


  6.         if( SetTBProfileString(Symbol,"SCR",text(close) )==false );
  7.         {
  8.                 FileAppend("E://tbs.log",text(CurrentBar)+ " 写入失败" );
  9.         }
  10.         
  11.         vs1 = GetTBProfileString(Symbol,"SCR");
  12.         
  13.         if( vs1==InvalidString )
  14.         {
  15.                 FileAppend("E://tbs.log",text(CurrentBar)+ " 无法读取" );
  16.         }
  17. }
  18. end
复制代码
log中只有写入失败,没有读出失败,说明已经完全写入。

[ 本帖最后由 brucecolvin 于 2010-6-22 12:51 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 4

精华
0
UID
7887
积分
527
帖子
65
主题
23
阅读权限
50
注册时间
2010-3-28
最后登录
2019-11-8
2#
发表于 2010-6-19 12:06:56 |只看该作者
接着看另一个更为严重的问题,SetTBProfileString写入后,GetTBProfileString居然读出无效。。。。可以说它就是让航天飞机失事的故障螺丝钉,很危险!

代码如下
我的系统中有一个用户函数,代码如下:

  1. UpdateIndicators
  2. Params
  3. Vars

  4. Score  Numeric;

  5. Begin

  6. /*  1  始化代码*/
  7. /*  3  始化代码*/
  8. /*  4  始化代码*/
  9. /*  5  始化代码*/
  10.     。。。。。

  11. /* 以上代码绝无if和for等分支,也无return指令,特此说明,是想说明下面的代码是绝对能执行到的*/

  12. Score = GetTrendScore(1);
  13. Score = Average(Score,20);
  14. SetTBProfileString(Symbol,"SCR",text(Score));

  15. End
复制代码
有另一个函数,代码如下:
  1. //------------------------------------------------------------------------
  2. // 简称: mget_scorea
  3. // 名称: 趋势分数的平均值
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 数值型
  7. //------------------------------------------------------------------------

  8. Params

  9. Vars
  10. string vs1;
  11. Numeric score;

  12. Begin

  13. vs1 = GetTBProfileString(Symbol,"SCR");

  14. if( vs1==InvalidString )
  15. {
  16. score = GetTrendScore(1);

  17. FileAppend("E://tb.log",text(CurrentBar));

  18. }Else
  19. {
  20. score = Value(vs1);
  21. }

  22. return score;

  23. End
复制代码
接着在交易指令AAS中使用以上连个函数。代码如下:
  1. Params

  2. Vars

  3. Begin

  4. UpdateIndicators();

  5. /*   很多代码,趋势决策 */

  6. /*  信号处理 */

  7. /*  资金管理 */

  8. score = mget_scorea();  

  9. End
复制代码
结果。。。。。请看,我抓到的证据,有图有真相。。

从图上看,从0 bar到130 bar都是正常的, 131的bar位置写入后,读出无效。接着到214都是正常,215开始读出无效。

[ 本帖最后由 brucecolvin 于 2010-6-22 12:52 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 4

精华
0
UID
7887
积分
527
帖子
65
主题
23
阅读权限
50
注册时间
2010-3-28
最后登录
2019-11-8
3#
发表于 2010-6-19 12:22:34 |只看该作者
我并不想用数据的方式来记录变量值,但50个全局变量已经被我用过,不够用才用数据方式的变量,强烈建议tb将全局变量增加到500个。。

使用道具 举报

Rank: 4

精华
0
UID
7887
积分
527
帖子
65
主题
23
阅读权限
50
注册时间
2010-3-28
最后登录
2019-11-8
4#
发表于 2010-6-19 12:31:30 |只看该作者
通过数据库方式来交换跨周期数据时发现不了数据库读写错误的bug的,因为在tick反复触发,这次无效,下次就有效了,肉眼是看不到的。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
8500
积分
1039
帖子
128
主题
29
阅读权限
60
注册时间
2010-4-12
最后登录
2019-3-30
5#
发表于 2010-6-21 12:13:52 |只看该作者
我也遇到过类似的问题,我想原因可能是频繁读写文件导致的。

可有的时候没办法,只能用这种方式来传递数据。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5940
积分
1179
帖子
285
主题
28
阅读权限
60
注册时间
2009-11-21
最后登录
2015-1-19
6#
发表于 2010-6-21 17:51:29 |只看该作者
精神可嘉!  TB BUG团队看中你了!  特聘你为TB顾问,监事会成员,独立董事!
海豚

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4613
积分
953
帖子
162
主题
37
阅读权限
60
注册时间
2009-6-10
最后登录
2019-3-30
7#
发表于 2010-6-21 22:36:44 |只看该作者
50个全局变量都用完了?真夸张,怎么用的啊

不过TB是应该认真对待反馈的每一个BUG

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4647
积分
1403
帖子
432
主题
31
阅读权限
60
注册时间
2009-6-16
最后登录
2019-10-27
8#
发表于 2010-9-8 10:37:53 |只看该作者
这样的情况到底“是"还是"否",怎么就没了下文?希望了解真相。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2010-9-8 17:46:38 |只看该作者
楼主的代码:
if( SetTBProfileString(Symbol,"SCR",text(close) )==false );
多了一个分号。

另外SetTBProfileString永远都不会返回false的。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4647
积分
1403
帖子
432
主题
31
阅读权限
60
注册时间
2009-6-16
最后登录
2019-10-27
10#
发表于 2010-9-8 19:41:50 |只看该作者
谢谢回答!

使用道具 举报

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

bottom

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

GMT+8, 2024-4-25 16:27

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部