设为首页收藏本站

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

Xaverage()函数的隐藏BUG [复制链接]

Rank: 1

精华
0
UID
69536
积分
38
帖子
11
主题
2
阅读权限
10
注册时间
2011-10-13
最后登录
2013-8-30
跳转到指定楼层
1#
发表于 2012-5-19 17:54:32 |只看该作者 |倒序浏览
//贴一段程序,发现Xaverage()在引用的序列变量计算较为复杂时,无法输出有效值,而Average()却一切正常。而在引用的序列变量为价格或者计算较为简单时,Xaverage()函数正常,此问题隐藏较深,望TB工作人员测试一下以下代码

//------------------------------------------------------------------------
// 简称: XAVERAGEBUG
// 名称: Xaveragebug
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params

Vars
NumericSeries EMA;
NumericSeries Xaveragetest;
NumericSeries myclose;
NumericSeries averagetest;

Begin
EMA=XAverage(close,10);
Commentary("EMA="+Text(EMA)); // 跑出来正常,表明Xaverage()函数在序列变量较为简单时正常

myclose=max(Highest(close,10)-Lowest(close,10),Abs(close-close[10]))/Summation(Abs(close-close[1]),10);

Xaveragetest=XAverage(myclose,10);
Commentary("Xaveragetest="+Text(Xaveragetest)); // 跑出来无值,表明Xaverage()在序列变量算法较为复杂时出现BUG

averagetest=Average(myclose,10);
Commentary("averagetest="+Text(averagetest)); // 跑出来正常,说明即便序列变量算法复杂,但Average()函数正常

end

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2012-6-13 10:20:33 |只看该作者
你这个问题是因为第一个Bar的MyClose有问题啦,Summation(Abs(close-close[1]),10);这个值是0,然后除0就导致后面都错了

修改后代码:
  1. Vars
  2.         NumericSeries EMA;
  3.         NumericSeries Xaveragetest;
  4.         NumericSeries myclose;
  5.         NumericSeries averagetest;
  6. Begin
  7.         EMA=XAverage(close,10);
  8.         Commentary("EMA="+Text(EMA)); // 跑出来正常,表明Xaverage()函数在序列变量较为简单时正常

  9.         If(CurrentBar==0)
  10.                 MyClose = Close;
  11.         else        
  12.                 myclose=max(Highest(close,10)-Lowest(close,10),Abs(close-close[10]))/Summation(Abs(close-close[1]),10);

  13.         Commentary("myclose="+Text(myclose)); // 跑出来正常,表明Xaverage()函数在序列变量较为简单时正常

  14.         Xaveragetest=XAverage(myclose,10);
  15.         Commentary("Xaveragetest="+Text(Xaveragetest)); // 跑出来无值,表明Xaverage()在序列变量算法较为复杂时出现BUG

  16.         averagetest=Average(myclose,10);
  17.         Commentary("averagetest="+Text(averagetest)); // 跑出来正常,说明即便序列变量算法复杂,但Average()函数正常
  18. end
复制代码

使用道具 举报

Rank: 1

精华
0
UID
192408
积分
3
帖子
3
主题
0
阅读权限
10
注册时间
2014-8-16
最后登录
2015-3-15
3#
发表于 2015-3-12 20:00:00 |只看该作者
关于Xaverage函数用法Numeric XAverage(NumericSeries Price,Numeric Length),如果变量price是复杂的算法得出来的,这个函数结果输出N/A,这个问题我已经解决,是price小数位数太长,在电脑存储空间保存时,会溢处,造成计算结果是一个随机数,因此显示N/A,已有解决方案。只需限制price小数位数即可使用。仅供参考

使用道具 举报

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

bottom

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

GMT+8, 2024-5-5 12:48

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部