系统自带自定义函数'计算序列模式下指定周期长度的收盘价均价
Function CU_MA1(Formula,CLOSE,CYC)
CU_MA1=0
'防止公式逐周期模式时调用
If Formula.WorkMode = 0 Then
Exit Function
End If
'CLOSE数组数据长度一定会与Formula.DataSize-1相等
DataCount = UBound(CLOSE)
If DataCount <> Formula.DataSize-1 Then
Exit Function
End If
'定义一个计算返回的数组
Dim ResultMa
Redim ResultMa(DataCount)
For i = Cyc-1 To Formula.DataSize-1
Count = 0
For k = i-(Cyc-1) To i
Count = Count + CLOSE(k)
Next
ResultMa(i) = Count / Cyc
Next
'返回一个计算完毕的均线数组
CU_MA1 = ResultMa
End Function
公式调用
ma1:CU_MA1(c,5);
发现刷新K线过程中,ma1偶然输出为0的横线,理论上CLOSE数组数据长度一定会与Formula.DataSize-1相等,但实际可能不想等,具体原因在哪里偶也不清楚;目前我的解决办法是不使用Formula.DataSize
你是通过输出为0就判断是因为CLOSE数组数据长度一定会与Formula.DataSize-1这个问题的吗?
那你的判断有点武断了,建议你采取日志记录等一些方案进一步明确一下问题。
我是写其他自定义函数发现这个问题的,通过日志记录排查了,为什么会发生这样的问题,是我个人电脑的环境的问题还是系统的问题就不得而知了。这里举CU_MA1原版函数这个例子只是故障重现而已。
静态的一般没问题,开盘时间刷新几十根K线故障就会偶然性重现
'CLOSE数组数据长度一定会与Formula.DataSize-1相等
DataCount = UBound(CLOSE)
If DataCount <> Formula.DataSize-1 Then
Application.msgout DataCount &"--++--"&Formula.DataSize-1
Exit Function
End If
建议你将上述加了日志的代码放进去,如果出现不一致情况,将打印的日志发给我们这边看一下
我们用最新的4.1版本,通过外盘数据测试,没发现你说的问题。
本地内盘测试也正常,你公式属性是否 序列正常选择的?
重新建立一个查看下呢