用下面VBS对某个指标做参数优化时,内存会不断耗尽,请教大侠如何解决,谢谢!
for j=6 to 20 step 1
for k=8 to 36 step 1
test = "W_TEST(" & j & "," & k & ",30)"
for i=0 to 1166-1
dim MarketData1, Report1, Fomula1
set MarketData1 = MarketData
Set Report1 = MarketData1.GetReportDataByIndex("SZ",i)
Set Formula1 = MarketData1.STKINDI(Report1.Label,"SZ",test,0,4)
sg = Formula1.GetBufData("SG", Formula1.DataSize-1)
Application.PeekAndPump
Set Report1 = Nothing
Set Formula1 = Nothing
set MarketData1 = Nothing
next
next
next
谢谢回复!可能是我测试的指标 W_TEST2中又调用了VBA自定义的函数,
然后VBA函数中申请了返回数组返回出去了,是不是这个数组在外面没地方释放,出现了内存泄漏。
下面是测试的代码,请确认。
测试宏:
Sub M_Test()
dim sg, wn, sn, st, test
for j=6 to 20 step 1
for k=8 to 36 step 1
sg = 0
test = "W_TEST2(" & j & "," & k & ",30)"
Application.MsgOut(test)
for i=0 to 1166-1
dim MarketData1, Report1, Fomula1
set MarketData1 = MarketData
Set Report1 = MarketData1.GetReportDataByIndex("SZ",i)
Set Formula1 = MarketData1.STKINDI(Report1.Label,"SZ",test,0,4)
sg = sg + Formula1.GetBufData("SG", Formula1.DataSize-1)
Application.PeekAndPump
Set Report1 = Nothing
Set Formula1 = Nothing
Set MaketData1 = Nothing
next
next
next
MsgBox "计算完成!"
End Sub
测试指标 W_TEST2 :
INPUT: N(14, 1, 50),M(18, 0, 100);
BS: CU_MA1(C, N) + CU_MA1(C, M);
SG: BS;
系统自带的自定义函数 CU_MA1:
'计算序列模式下指定周期长度的收盘价均价
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
这个做法恐怕不行,会导致问题,建议你不要在PEL中使用自定义函数,又拿VBA来做调用。
建议将你的PEL中的VBA自定义函数的算法,直接移植到VBA中,只直行简单的单次调用