建議:HistoryData類返回的是數(shù)組 [金字塔]
- 咨詢內(nèi)容:
大家都知道,當運算量大時,VB比C代碼的運行速度要慢得多。而金字塔是對VBA開放的對象。這樣,如果大量數(shù)據(jù)操作時,會造成軟件當機的現(xiàn)象。
我不清楚具體的Histordata,ReportData,Table等等等等對象工作原理,但我想它大約是一個函數(shù),以HistoryData為例
Set History = marketdata.GetHistoryData("rb00","sq",5)
For i=1 to 10
x=History.Close(i)'這里我感覺是每讀一個數(shù),都需要運行一下金字塔的HistoryData函數(shù)。'這個函數(shù)里大約對某個文件要打開,計算,再關(guān)閉文件,本身效率已經(jīng)很低了,這個函數(shù)。
'如果是再用VB來反復(fù)打開這個函數(shù)。速度更慢。如果運行10000次,可能這個金字塔就要當機了。
Next
以EXCEL為例吧,如果是一個單元格一個單元的格的給數(shù)組賦值,讀幾萬個數(shù)字,就要幾秒種了。但EXCEL提供了直接將單元格賦值給數(shù)組的功能。比如x=range("A1:A65536")
這樣讀6萬個數(shù)字,幾乎就不需要時間了。
不知道金字塔的底層函數(shù)到底如何。但我想,如果HistoryData等對象,返回的直接是數(shù)組的話。整體的金字塔VBA代碼,運行速度會飛一樣的快。
建議:History = marketdata.GetHistoryData("rb00","sq",5)
是直接將("rb00","sq",5)它的所有數(shù)據(jù),以數(shù)組的形式返回。
其它對象,涉及到數(shù)據(jù)的,同理。
這樣就能真正發(fā)揮金字塔的VBA功能了。
- 金字塔客服:
還有,不清楚為什么金字塔的Array函數(shù),速度為什么這么慢,讀入幾千個數(shù)據(jù),可能就需要幾秒鐘。比VBA的數(shù)組函數(shù)賦值要慢許多。
它的搜索的函數(shù)FIND,效率也極低。也不如直接用VBA循環(huán)查找得快。
這類的函數(shù),建議做次升級。提高金字塔整體的VBA代碼運行效率
- 用戶回復(fù):
EXCEL下測試的代碼,及結(jié)果
Sub 逐個讀單元格的效率()
Dim x(65536)
t = Time
For j = 1 To 5
For i = 1 To 65536
x(i) = Cells(i, 1)
Next
Next
Debug.Print Time & "|" & t
End Sub
Sub 整體賦值給數(shù)組的效率()
t = Time
For j = 1 To 200
x = [a1:a65536]
Next
Debug.Print Time & "|" & t
End Sub
'大約可以提速50倍
Sub Array對象的效率()
t = Time
Set d = CreateObject("Stock.Array")
For i = 1 To 1000
d.AddBack (Cells(i, 1))
Next
Debug.Print Time & "|" & t
End Sub
Sub 直接讀入數(shù)組的效率()
Dim x(1000)
t = Time
For j = 1 To 200
For i = 1 To 1000
x(i) = (Cells(i, 1))
Next
Next
Debug.Print Time & "|" & t
End Sub
'大約可以提速200倍以上結(jié)論:如果金字塔的各對象返回的直接是數(shù)組的話,會提高金字塔整體效率的50倍以上,甚至更多。
- 網(wǎng)友回復(fù):
是滴,是滴。
金字塔的ARRRAY函數(shù)是擺設(shè)
[此貼子已經(jīng)被作者于2013-5-21 23:13:42編輯過]
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容