求解最大子序列和

求解最大子序列和

更新於 發佈於 閱讀時間約 3 分鐘

問題如下,在這串連續數列中 : -7、8、2、9、3、-4、-8、7、9、-5,請找出最大的子序列之和、以及最小的子序列之和,求最大子序列和 ~ MaxSubSum,是用途很廣的敘述統計工具,例如應用於求解 MDD、描述價格資料期間內最大的累積上漲點數...等

Kadane's 提供的算法邏輯如下 :
1. 該元素如果是負值,就不是子序列起點;
2. 同理,子序和為負值亦不列入集合內
僅需兩個判斷條件,即可建構程式碼求解

Excel VBA程式碼提供如下

Public Function MaxSubArraySum(ByVal InputData As Range, ByVal Output As Variant) As Variant
'Output=1 求解最大子序列和
'Output=-1 求解最小子序列和
Dim ArrDataX() As Variant
Dim DataCount As Variant
Dim ii As Variant
Dim thisSum As Variant
Dim MaxSum As Variant

ArrDataX = InputData '抓取Excel 欄位的數據,存入VBA控制的陣列
DataCount = InputData.Count '記錄抓取的資料筆數

thisSum = 0
MaxSum = 0

For ii = 1 To DataCount
thisSum = thisSum + (Output) * ArrDataX(ii, 1)
If thisSum > MaxSum Then MaxSum = thisSum
If thisSum < 0 Then thisSum = 0
Next 'For ii = 1 To DataCount
MaxSubArraySum = (Output) * MaxSum '求解最大子序列和
End Function

avatar-img
Piemann的沙龍
21會員
113內容數
留言
avatar-img
留言分享你的想法!
Piemann的沙龍 的其他內容
率變動的範圍。一般金融價格的時間序列通常有五個特色:趨勢(trend)、季節性、 異常價格、價格叢聚(cluster)以及非線性(nonlinear)。所謂「非線性」是指金融價 格具有以下情形:(1.)異常報酬出現的機率大於預期,顯示報酬率為常態分配的 比正的造成較大的波動。
承繼上一篇的數值加工想法,這次介紹取對數的效果
這次來談指標數值的二次加工,數值二次加工的方式很多,例如對K棒取平均後,還會想要再取一次平均值,讓數值更為平滑;或是對數據取log、開根號,讓極端值的影響力減少,不同的目的會有相應的轉換函數可供使用 參考下圖數據,明顯的這個轉換函數會讓RSI的數值更為趨向100與0的極值靠攏
Excel VBA 簡單的網頁爬蟲
波動度壓縮後,等待突破訊號,是提高勝算的好構想, 以下是內困型態發生後的突破策略程式碼
拋物線SAR(Stop and Reverse),好用的出場概念,但是常常被搞錯認為是進場的邏輯,廢話不多說,請參考程式碼的出場部分
率變動的範圍。一般金融價格的時間序列通常有五個特色:趨勢(trend)、季節性、 異常價格、價格叢聚(cluster)以及非線性(nonlinear)。所謂「非線性」是指金融價 格具有以下情形:(1.)異常報酬出現的機率大於預期,顯示報酬率為常態分配的 比正的造成較大的波動。
承繼上一篇的數值加工想法,這次介紹取對數的效果
這次來談指標數值的二次加工,數值二次加工的方式很多,例如對K棒取平均後,還會想要再取一次平均值,讓數值更為平滑;或是對數據取log、開根號,讓極端值的影響力減少,不同的目的會有相應的轉換函數可供使用 參考下圖數據,明顯的這個轉換函數會讓RSI的數值更為趨向100與0的極值靠攏
Excel VBA 簡單的網頁爬蟲
波動度壓縮後,等待突破訊號,是提高勝算的好構想, 以下是內困型態發生後的突破策略程式碼
拋物線SAR(Stop and Reverse),好用的出場概念,但是常常被搞錯認為是進場的邏輯,廢話不多說,請參考程式碼的出場部分