求助:VBA做參數(shù)優(yōu)化時(shí)內(nèi)存不斷的耗盡 [金字塔]
- 咨詢內(nèi)容:
用下面VBS對(duì)某個(gè)指標(biāo)做參數(shù)優(yōu)化時(shí),內(nèi)存會(huì)不斷耗盡,請(qǐng)教大俠如何解決,謝謝!
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 = Nothingset MarketData1 = Nothing
next
nextnext
- 金字塔客服:
建議檢查一下是不是你的其他代碼因?yàn)槟撤N原因沒(méi)有釋放導(dǎo)致的問(wèn)題,我們檢查過(guò)金字塔代碼,VBA在創(chuàng)建公式對(duì)象時(shí)不會(huì)多次分配內(nèi)存的
- 用戶回復(fù):
謝謝回復(fù)!可能是我測(cè)試的指標(biāo) W_TEST2中又調(diào)用了VBA自定義的函數(shù),
然后VBA函數(shù)中申請(qǐng)了返回?cái)?shù)組返回出去了,是不是這個(gè)數(shù)組在外面沒(méi)地方釋放,出現(xiàn)了內(nèi)存泄漏。
下面是測(cè)試的代碼,請(qǐng)確認(rèn)。
測(cè)試宏:
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
nextMsgBox "計(jì)算完成!"
End Sub測(cè)試指標(biāo) W_TEST2 :
INPUT: N(14, 1, 50),M(18, 0, 100);
BS: CU_MA1(C, N) + CU_MA1(C, M);
SG: BS;系統(tǒng)自帶的自定義函數(shù) CU_MA1:
'計(jì)算序列模式下指定周期長(zhǎng)度的收盤價(jià)均價(jià)
Function CU_MA1(Formula,CLOSE,CYC)
CU_MA1=0'防止公式逐周期模式時(shí)調(diào)用
If Formula.WorkMode = 0 Then
Exit Function
End If'CLOSE數(shù)組數(shù)據(jù)長(zhǎng)度一定會(huì)與Formula.DataSize-1相等
DataCount = UBound(CLOSE)
If DataCount <> Formula.DataSize-1 Then
Exit Function
End If'定義一個(gè)計(jì)算返回的數(shù)組
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'返回一個(gè)計(jì)算完畢的均線數(shù)組
CU_MA1 = ResultMa
End Function - 網(wǎng)友回復(fù):
這個(gè)做法恐怕不行,會(huì)導(dǎo)致問(wèn)題,建議你不要在PEL中使用自定義函數(shù),又拿VBA來(lái)做調(diào)用。
建議將你的PEL中的VBA自定義函數(shù)的算法,直接移植到VBA中,只直行簡(jiǎn)單的單次調(diào)用
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容