返回列表 上一主題 發帖

計算週報酬

計算週報酬

請問各位大大關於股票要算週報酬的問題

EXCEL檔案中有1年的每日指數(或個股)收盤資料,另外也有日期欄位。
欲計算這一年間的每週週報酬率(用這禮拜五與上禮拜五的收盤價計算)
但後來發現這樣做有問題 譬如某個禮拜五股市休市,所以沒有當日的資料,所以該週應該改用星期四的收盤價,
應該使用何種函數確保每週都會捉出最後交易日(通常是FRIDAY,FRIDAY放假就是THURSDAY,當然也有可能是WEDNESDAY)的收盤價.
GinBow

回復 1# ginbow


用資料庫加總函數 DSUM   輸入日期可得
如圖
使用 WEEKNUM須在增益集安裝「分析工具箱」。
A:B兩欄為資料庫
週別         E2=WEEKNUM(日期)=WEEKNUM($D$2)   
總收盤價 F2=DSUM(A:B,B1,E1:E2)
DSUM(database,field,criteria)


如用巨集如下
  1. Sub Ex()
  2.     Dim Wd As String, Tol As Double, i As Long
  3.     With Sheet1
  4.         Wd = Format(.Range("D2"), "WW")
  5.         .Range("E2") = Wd & "週"
  6.         i = 1
  7.         Do While .Cells(i, "a") <> ""
  8.             i = i + 1
  9.             If Format(.Cells(i, "a"), "WW") = Wd Then Tol = Tol + .Cells(i, "B")
  10.         Loop
  11.         .Range("F2") = Tol
  12.     End With
  13. End Sub
複製代碼

TOP

謝謝GBKEE給的概念 可是我要的不是那一週全部的收盤價合
因該是說那一週有交易資料的最後一比
如上圖 假如沒有5/20號的交易資料
而那一週的最後一比資料就是5/19
所以抓到的要是5/19和5/13
GinBow

TOP

我突然有靈感了!先來寫看看 !
先判斷今天是不是禮拜五 如果不是就往前找上個禮拜五看有沒有資料
如果沒就-1抓在沒就-2 直到抓到有資料
然後在往前去找上上個禮拜五
GinBow

TOP

不曉得我的處理方式~ 有沒有符合樓主的要求
我的方式是將data轉換成每週的方式~ 這樣可以排除樓主撈不到該週最後一天的收盤價問題~
附件是我完成的檔案~  僅是設定一個按健加上~ 使用一些函數後~ 將其data進行轉換~
  c欄位函數=WEEKDAY(A2,2) <---從第2列開始
  d欄位函數=A3-$A$2 <----從第3列開始
  o欄位函數=IF(M2="",IF(L2="",IF(K2="",IF(J2="",IF(I2="","",I2),J2),K2),L2),M2) <---從第2列開始
   按鑑的程式碼~
  Private Sub CommandButton1_Click()
Sheet1.Range("H:N").ClearContents '先清除資料
'欄位設定
Sheet1.Range("H1") = "星期日"
Sheet1.Range("I1") = "星期一"
Sheet1.Range("J1") = "星期二"
Sheet1.Range("K1") = "星期三"
Sheet1.Range("L1") = "星期四"
Sheet1.Range("M1") = "星期五"
Sheet1.Range("N1") = "星期六"

'將資料轉換為每一週的格式
Do Until Sheet1.Range("A" & 2 + I) = ""

If Sheet1.Range("A" & 2 + I).Value = Sheet1.Range("A" & 2) Then
   
Else
   A = Int(Sheet1.Range("D" & 2 + I) / 7)
End If

B = B
If B = A Then
   K = K
Else
   B = A
   K = K + 1
End If
    Select Case Sheet1.Range("C" & 2 + I)
    Case 7
         Range("H" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 1
         Range("I" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 2
         Range("J" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 3
         Range("K" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 4
         Range("L" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 5
         Range("M" & 2 + K) = Sheet1.Range("B" & 2 + I)
    Case 6
         Range("N" & 2 + K) = Sheet1.Range("B" & 2 + I)
         
    End Select

I = I + 1
   
Loop
End Sub
附件
計算週報酬.rar (15.05 KB)
結果圖示
學習才能提升自己

TOP

回復 3# ginbow
自訂函數試試看


收盤價..rar (30.98 KB)

TOP

學海無涯_不恥下問

TOP

我在試試看! 謝謝 ^^
GinBow

TOP

        靜思自在 : 做該做的事是智慧,做不該做的事是愚癡。
返回列表 上一主題