设为首页收藏本站

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

计算平均振幅,数据起始的数天计算不对,该如何处理 [复制链接]

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
跳转到指定楼层
1#
发表于 2012-4-16 10:36:48 |只看该作者 |倒序浏览
本帖最后由 xiaoye51888 于 2012-4-16 11:59 编辑

例如在5min的图上,计算HighD(1)-LowD(1)到HighD(5)-LowD(5)的均值,那么需要图表上现在有前5天的数据,否则会出错。这个可以理解,TB的操作都是基于图表的。那就想跳过开头那几天,等所有要计算的数据齐了,再开始运算,再进行信号运算开平仓。

加上了过滤,直到所有要计算的数据齐了,再开始运算。
Numeric RANGE_LENGTH(5);

if(highD(RANGE_LENGTH+2)==InvalidNumeric())
{
      return;
}

sumRange = 0;
      For i=1 To RANGE_LENGTH
          {
                sumRange = sumRange+(HighD(i)-LowD(i));
               
          }
  PlotString("sumRange",Text(sumRange),upperband,Red);
PlotString("HighD1",Text(HighD(1)-LowD(1)),upperband,Red);
PlotString("HighD2",Text(HighD(2)-LowD(2)),upperband,Red);
PlotString("HighD3",Text(HighD(3)-LowD(3)),upperband,Red);
PlotString("HighD4",Text(HighD(4)-LowD(4)),upperband,Red);
PlotString("HighD5",Text(HighD(5)-LowD(5)),upperband,Red);


进行检测的时候发现,所有计算需要的HIGHD LOWD的确已有数据,而且对比日线数据HIGHD()-LOWD()都是正确的,但开始几天的sumRange计算结果不对,从数据齐全开始计算起,第一天sumRange为0,第二天sumRange只计算了前一天的振幅,第三天只计算了前2天的振幅,以此类推,直到过了5天才计算正确,可是我已经试了好几种方法,终于能够跳过前面数据不齐又可能导致计算错误的RANGE_LENGTH+2天。为何还会出错???

Rank: 1

精华
0
UID
32741
积分
22
帖子
7
主题
2
阅读权限
10
注册时间
2011-4-10
最后登录
2013-1-18
2#
发表于 2012-4-16 19:18:05 |只看该作者
我也发现了这个问题,用openD,closeD,highD,lowD计算出来的数据都是前三天的,不知道为什么不能返回当天的值,用openD[1]也是返回三天前的数据,感觉很莫名其妙,用openD[5]

使用道具 举报

Rank: 1

精华
0
UID
32741
积分
22
帖子
7
主题
2
阅读权限
10
注册时间
2011-4-10
最后登录
2013-1-18
3#
发表于 2012-4-16 19:20:45 |只看该作者
我也发现了这个问题,用openD,closeD,highD,lowD计算出来的数据都是前三天的,不知道为什么不能返回当天的值,用openD[1]也是返回三天前的数据,感觉很莫名其妙,用openD[5]返回的数据也是3天前的,

在openD的F1帮助里面是这样说的:
OpenD
说明 求N天前的开盘价
语法 Numeric OpenD(Numeric daysAgo)
参数 daysAgo 最近N天,0为当天,1为昨天,依次类推。
备注 该函数计算N天前的开盘价,返回值为浮点数。
示例 OpenD(3);计算3天前的开盘价。

我怀疑是不是软件出差错了,示例里面的openD返回值让整个值都默认返回3天前的数据。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
12330
积分
838
帖子
254
主题
15
阅读权限
60
注册时间
2010-6-16
最后登录
2017-4-25
4#
发表于 2012-4-16 19:45:14 |只看该作者
openD,closeD,highD,lowD等应该使用圆括号(),如: OpenD(3)

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
5#
发表于 2012-4-17 10:36:08 |只看该作者
help

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
93775
积分
176
帖子
111
主题
2
阅读权限
40
注册时间
2012-1-21
最后登录
2014-3-5
6#
发表于 2012-4-17 11:23:55 |只看该作者
OPEN(0)就是当天的

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
7#
发表于 2012-4-18 10:38:12 |只看该作者
困扰好多天了,为什么管理员不来指导一下?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2012-4-18 10:57:17 |只看该作者
xiaoye51888 发表于 2012-4-18 10:38
困扰好多天了,为什么管理员不来指导一下?

1.openD,closeD,highD...这类函数的用法是要在后面的( )里跟参数的,如果不加括号不写参数,那默认就是2天前的。所以如果你要取当天的就一定要表达为openD(0),highD(0).....
2. openD,closeD,highD...这类函数是序列函数,其计算与取值一定要放在条件外,这样才能取到正确的值,如果放到条件里,是有可能取不到正确值的。而我有看到你的公式里是直接放到条件里的。建议参考一下公式升级说明贴http://bbs.tradeblazer.net/thread-12695-1-1.html

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
9#
发表于 2012-4-18 11:25:53 |只看该作者
小米 发表于 2012-4-18 10:57
1.openD,closeD,highD...这类函数的用法是要在后面的( )里跟参数的,如果不加括号不写参数,那默认就是2 ...

1.我的代码里HighD()LowD()括号里我都有写参数
2.序列函数计算和取值要放在条件外面,那如何遍历?总不能是HighD(1)-LowD(1),一直写到HighD(5)-LowD(5)甚至更多吧?

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
81930
积分
151
帖子
72
主题
8
阅读权限
40
注册时间
2011-11-24
最后登录
2018-12-5
10#
发表于 2012-4-19 14:05:43 |只看该作者
。。。

使用道具 举报

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

bottom

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

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

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部