REFX函数的疑惑,请通达信工程师帮助解答 [通达信]
-
咨询内容:
想写一个指标,显示当前bar到最后一个bar的成交金额累积值,代码如下:
CB:=CURRBARSCOUNT;
SUMAMO:REFX(SUM(AMO,CB),CB-1),NODRAW;
结果不正确,显示的是最后一个Bar的金额,经过反复测试发现问题在于SUM(AMO,CB)中的CB变量被当成常量1,无论用干什么方法都是如此,如果直接写成常量5、6之类的,结果是正常的。
因此总结下来就是在REFX函数中,对CURRBARSCOUNT变量的引用似乎有问题,请通达信工程师解答,以帮助我完成这个指标。
万分感谢!
-
通达信技术部:
CB:=CURRBARSCOUNT;
SUM(AMO,CB);{直接这样儿写就好了啊 你的refx(参数1,CB-1) 将目标K线 一直指向的当前交易日的K线 所以取的是 当前交易日的SUM(AMO,CB)也就是SUM(AMO,1)也就是最后交易日的AMO}
“SUM(AMO,CB)中的CB变量被当成常量1”不在于CB一直是1 而是refx的运行原理是 在于先固定k先 然后取指定的k线的SUM(AMO,CB) 这个整体
REFX(SUM(AMO,CB),CB-1) 这个函数的运行 机制是这样儿的
直接上面的写法 不要refx函数吧
-
通达信客服:
首先谢谢版主的回答。关于具体问题,我的需求是计算向后(未来)若干天的成交金额,所以sum(AMO,CB)不满足我的需求。
不过版主的解释已经证实了我的猜想,REF和REFX等函数中CURRBARSCOUNT都和一般概念上立的不一致,即使我在前面赋值给变量,进行简单运算,甚至在其它指标中输出,都不能在REFX函数中使用到,真正的当前K线的CURRBARSCOUNT。
个人建议通达信研发部门,能在公式系统中提供一种方法,满足用户的这种需求——即预先记录好当前K线的CURRBARSCOUNT,然后在REF系列函数中使用。
-
网友交流:
续上:进一步的猜测,通达信公式系统中目前CURRBARSCOUNT之类的变量赋值都是传引用,所以导致这种现象。如果提供一种特定赋值方式,实现的时候为传值的模式,大概可以解决这个问题。
-
网友交流:
呼吁通达信增加循环语句吧,否则许多类似的问题无解。
不过你这个具体问题倒可以变通:
X:=amo/10000;
S:=sum(X,0);
SumAmo:const(s)-ref(s,1);注意,amo值有时太大,有效数字位数可能保证不了。
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容