您现在的位置:程序化交易>> 股票公式>> 通达信>> 通达信知识>>正文内容

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  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容