發表文章

目前顯示的是有「VBA知識紀錄」標籤的文章

用VBA寫股市交易策略可行嗎?

          在國內有些教授出書提到用VBA寫股市策略,我自己有買的書就是姜林杰佑、許江河這兩個教授寫的,也許還有其他教授出書教怎麼用VBA寫策略也不一定,只是我後來在這方面少著墨。最近翻交易聖經2這本書,作者 布倫特‧潘富 (   Brent Penfold )提到他用VBA做不同的策略回測,這讓我有點訝異,沒想到知名的股市名人也會用VBA去做交易策略回測。          我自己幾年前也曾經用VBA以去做過,只是在資料庫整理方面花時間,只玩了一小段時間,不過基本上VBA做交易策略是可行的,只要有一點點VBA程度就可以。          如果用這方面來看Power Query ,我的理解似乎是無法做這方面的測試,但應該是能用在股市資料庫整理,以及相關資訊的連結。

VBA_執行錯誤6溢位

        最近請資訊同事幫忙寫一個VBA撈資料庫的資料,因為我要跑的資料大約9萬多筆,同事幫我弄 完後跟我說只能顯示32,767筆,這我還是第一次遇到因為 office 2003版的限制是65,536筆,之後的版本已經能達到1,048,576筆。         後來我上網搜尋瞭一下出現的錯誤資訊( 執行錯誤6溢位 ),剛好有提到關於32,767筆的,應該是把資料型態設為 Integer ,因為代碼牽涉到資料庫密碼,因此我也看不到相關代碼,跟同事確認後的確是這設定問題,我請同事改為 Long 筆數完全不會受限甚至超過1,048,576筆,long 的範圍值 從-9223372036854775808 到9223372036854775807(9.2 ... E + 18)的值。 請詳官方介紹 long資料類型  。 下面的代碼會出現 錯誤資訊( 執行錯誤6溢位 ) sub TEST_A() Dim r As Integer For r = 1 To 100000 Next End Sub 下面的代碼執行時不會出現錯誤   Sub TEST_B() Dim r As Long For r = 1 To 100000 Next End Sub

VBA_善用陣列能縮短程序執行時間

            下面VBA代碼是用來做單價查詢,利用TRIMMEAN函數將20%的極端值排除求出平均數,在以STDEV.S求得標準差,然後計算標準差佔坪均數的比例,比例越高代表這個品號價格波動越大,用在採購單價及銷售單價上有不錯的篩選效果。           在這裡是使用一般平均數計算也可以達到效果,因為每個單價如果差異大標準差就會大,也就會顯示高差異比例。           陣列在VBA使用上能節省很多時間 ,在這例子上不使用陣列需要花33秒,這讓我有點難接受,後來改陣列計算,縮短為7秒左右,勉強能接受,下面提供部分代碼,有興趣的人可以參考一下。 Sub 單價偏鋒_標準差()     '2020/11/25 此方式須33秒(跟資料範圍有關)     Application.ScreenUpdating = False     t = Timer     Dim sh_樞紐 As Worksheet     Set sh_樞紐 = Sheets("樞紐")     With sh_樞紐         lr = .Range("A1048576").End(xlUp).Row         lc = .Range("A2").End(xlToRight).Column         For i = 3 To lr             .Cells(i, lc + 1) = "=IFERROR(TRIMMEAN(RC[-60]:RC[-1],0.2),"""")"             .Cells(i, lc + 2) = "=IFERROR(int(STDEV.S(RC[-61]:RC[-2])),""...