不清楚你是否是金字塔的新手,因为你的代码逻辑是紊乱的,其中
1, vvv:c,linethick0; 你将变量赋值到vvv,但是你的PEL代码中并没有中间有重复赋值的地方,当然一直是c了.
2, vba的函数返回值 应该是 函数名=返回值 这样才对,建议你先书店买本VBA的基础开发书籍看看
vvv = formula.VARDATA("ccc")
formula.VARDATA("ccc") = vvv
VARDATA 是只能在序列模式上使用的, 你的VBA自定义函数也不是工作在序列模式,因为序列模式不是你这么搞的, 金字塔的序列模式是传递给你数组让你去处理的.
建议你参考 金字塔自带的2个MA均线的自定义函数的处理方法
'计算逐周期模式下指定周期长度的收盘价均价
Function CU_MA2(Formula,cyc)
'得到K线数据对象
Set History = Formula.ParentGrid.GetHistoryData()
'若当前周期尚未到计算周期,不参与计算
if Formula.IndexData < cyc-1 then
CU_MA2 = 0
exit function
end if
DataCount = 0
for i = Formula.IndexData-cyc+1 to Formula.IndexData
'累加收盘价
DataCount = DataCount + history.close(i)
next
CU_MA2 = DataCount / cyc
End Function
'计算序列模式下指定周期长度的收盘价均价
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
runmode:0; //必须工作在逐K线模式
ccc:c,linethick0;
now:=BARPOS;
ccc:=chuli(l,h,now);
插入一个过程,有如下代码
chuli(Formula,ll,hh,cyc)
'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
chuli=0
set history=Formula.ParentGrid.GetHistoryData()
if ll>hh-100 then
chuli=4014
end if
由于你没具体需求,大致是这样的。等你有了具体需求再提了