如何在TB中正确编写及使用文华中的SUM函数的功能

老师,好!

请教下,文华中的SUM函数在TB中如何正常编写及使用。

如:SUM(X,0)

看过论坛中很多有关的帖子,老师建议参考summation 内在函数,但使用些函数后好像与文华中的SUM还是不一样。

请老师指教!!感谢

如何在程序中限定使用者及使用者的时间?
文华中的三角移动平均函数
非函数库中的函数如何使用及识别
如何在正确的在用户函数中传入数组
文华中valuewhen函数在TBQ中如何实现?
关于文华SUM(X,N)改写TB
咨询编写是否正确
函数如何正确声明
SUM(V*C,0)/SUM(V,0)如何改写成开拓者软件语言函数
编写中偷价的问题

具体说明怎么不一样

一个求和函数,简单到不能再简单了

      VAR1=(C+L+H)/3;

      VAR2=Summation(((VAR1-L[1])-(H-VAR1))*V/100000/(H-L),0);

      VAR3=XAverage(VAR2,1);

      JCS=VAR3;

      JCM=Average(VAR3,12);

      JCL=Average(VAR3,26);

      Commentary("JCS="+Text(JCS));

      Commentary("JCM="+Text(JCM));

      Commentary("JCL="+Text(JCL));

按这个计算出来,JCS,JCM,JCL 数值都是0.

但在文华中使用SUM函数是有数值的。

summation这个函数的第二个参数不支持0,也就是所谓的从图表第一根bar开始累积

如果要从图表第一个bar开始累积

series<numeric> var2;

var2 = var2 + ((VAR1-L[1])-(H-VAR1))*V/100000/(H-L);

这样写就行了

按您指导的这样写,测试发现使用日线有数据,可以正常实现功能。

但使用1小时,或是30分钟,15分钟等级别的没有数据。不知是哪的问题,请指教。

没有?

老师,我找到原因了!

在行情报价的K线图上加载公式,显示数据正常。

我之前是加载到策略单元中,从策略交易中打开K线图表,显示不正常。

请教老师什么问题!感谢!

???不正常???

老师,我也是晕了,实在搞不懂问题出哪了!

发现不同的商品,在策略交易中起始日期不同,测试的结果也不同。也没发现有什么规律。

举例说明:

1、IF888,起始日期从2022年1月1日起至今,测试各个周期都有数据。但起始日期修改为2020年1月1日起,测试时15分钟周期无数据。如下图:

2、ic888,起始日期不管从什么时间开始,测试只有周线、日线有数据,30分钟、15分钟、5分钟都无数据。

3、al888,起始日期从2022年1月1日起,5分钟没数据,15分钟,30分钟,日线,周线都有数据。起始日期从2020年1月1日起,5分钟,15分钟 都没数据,30分钟、日线、周线有数据。

4、RB888,起始日期从2019年9月15日起,只有日线,周线有数据,30分钟,15分钟,5分钟都没问题。但将起始日期修改为2025年1月1日,所有周期就都有数据了。

请老师指教!


大概知道原因了,因为你没有对H-L做异常处理。

如果样本中包含哪一根bar是停板价格,H和L相同,那么除数为0就会造成结果变成无穷大。

然后你又是要累积值,那么其中一个元素无穷大以后,累计值就变成无穷大,显示成无效值了。

你必须自己定义以下HL相同的时候这个算法要怎么计算才行。

Vars
    numeric macddiff;
    numeric avgmacd;
    series<numeric> var1;
    numeric var3;
    numeric jcs;
    numeric jcm;
    numeric jcl;
    series<numeric> var2;
    
Events
    
    OnBarOpen(ArrayRef<Integer> indexs)
    {
    
        VAR1 = (C + L + H) / 3;
        if(H<>L)//如果H和L不等,按照这个计算
        {
            VAR2 = var2[1] + ((VAR1 - L[1]) - (H - VAR1)) * V / 100000 / (H - L);
        }Else//下面写如果H和L相等时怎么计算
        {
            var2 = var2[1] + var1[1];//举个例子直接用上一根bar的var1值代替
        }
        VAR3 = XAverage(VAR2, 1);
    
        JCS = VAR3;
    
        JCM = Average(VAR3, 12);
    
        JCL = Average(VAR3, 26);
    
        Commentary("JCS=" + Text(JCS));
    
        Commentary("JCM=" + Text(JCM));
    
        Commentary("JCL=" + Text(JCL));
    }


还真是这个问题,已解决,感谢!