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