我想测试VBA自定义PEL函数如何使用,就新建了一个公式,序列模式,主图叠加,使用系统内置的函数CU_MA1
公式只有一行:
MAW:CU_MA1(CLOSE,20),COLORRED;
我希望他是显示类似传统函数 MAW:MA(CLOSE,20)的效果,就在K线图上画20日均线。
但是会出现2种异常(不可重复,不知道何种条件会跳到哪种异常):
(1)加载了公式,但主K线图上没有任何反应。我用断点调试,发现MAW返回的,只是一个数值,并不是我以为的一个数组。
(2)直接从K线图跳去了分时图(不知道是不是VBA有什么特殊进程),然后再按F5也无法返回K线图。
想问,这个异常时什么原因?
老师,我原来写的公式就一行 MAW:CU_MA1(CLOSE,20),COLORRED;,今天发现可以正常显示了。
问题:
1、接着我想进入自定义函数里面来调试,发现在公式编辑器里面,选择单步调试直接就跳过这句话了,想问怎么样才能进入vba里面进行单步调试呢?
2对于一些复杂的控制,例如for ,if等控制,我是内嵌<% %>来实现的。我发现教材里面,有些地方除了传统的MA1:MA(CLOSE,5)这种,还看到也有直接在PEL语言(不是在<% %>里面),想问这个在哪里是有介绍吗?或者只需要有个范例,把各种语句都展示就行。
之前不正常显示,有可能你是没有启动VBS引擎导致的。
在PEL的单步跟踪无法进入VBS中进行调试
目前金字塔已经废弃对<% %>模式的VBS嵌入进行技术支持,建议你选择自定义函数的VBS编程模式,也就是你CU_MA1(CLOSE,20)这种
老师,我用<% %>内嵌的模式写了个公式,正常显示的,需要输入HIGH,LOW两个数组,会返回一个数组(大部分是0,低点标记-1,高点标记1)然后在图上画高低点连线。
然后我想用自定义函数方式来重写,PEL公式调用为
RESULT:=UD_XINBI(HIGH,CLOSE);
DRAWLINE((RESULT=-1),LOW,(RESULT=1),HIGH,0),LINEDOT,COLORDEC4B0;
DRAWLINE((RESULT=1),HIGH,(RESULT=-1),LOW,0),LINEDOT,COLORDEC4B0;
我附件上传了原来内嵌的代码(这个直接使用都是正常的),还有我自己写的自定义代码,输入部分和输出到ResultMA是抄范例的,其余就是照抄内嵌模式的代码,只是把两个输入变量的部分做了替换,其他都没变。但是我运行,发现图上没有任何反应。而且单步调试时候,发现左边调试窗口里显示,RESULT显示 RESULT 最新 In:1,下面只跟着1行,我想这个应该是数组来的吧?为什么只有显示1个数?
还有是怎么进入自定义函数那里进行调试啊?我发现单步运算直接就跳过那行了
刚才浏览器只能上传内嵌代码版本的公式,现在再上传使用自定义函数版本的公式
老师,但CU_MA1(CLOSE,20),这个序列模式下是返回了一个和close相等长度的数组,而且自定义函数里面是Redim ResultMA(Datacount),也是定义为数组而返回的,这个算是返回数组吗?
老师,我还是不太明白,这个是自定义函数的官方例子,2个疑问:
(1)序列模式下,最后一句,的确是返回一个CU_MA1=ResultMA '返回一个计算完毕的均线数组。
在序列模式下,是返回一个单值还是返回一个数组啊?
(2)如果在回测模式下,想问回测模式下,是不是会在历史每个时刻上都按序列模式计算历史数据,实际就有点类似逐K调用的方式?
'计算序列模式下指定周期长度的收盘价均价
Function CU_MA1(Formula,CLOSE,CYC)
CU_MA1=0
'防止公式逐周期模式时调用
If Formula.WorkMode = 0 Then
Exit Function
End If
'CLOSE数组数据长度一定会与Formula.DataSize-1相等
Dim DataCount
DataCount = UBound(CLOSE)
If DataCount <> Formula.DataSize-1 Then
Exit Function
End If
'定义一个计算返回的数组
Dim ResultMa
Redim ResultMa(DataCount)
Dim i
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
返回一个数组
2、还是序列模式,逐k模式是说每次都要计算历史值。回测中就和你实盘一根根k从新生成是一样的
你pel公式用序列模式,使能够正确得到0或1的条件返回的