Board logo

標題: 計算週報酬 [打印本頁]

作者: ginbow    時間: 2011-5-30 01:05     標題: 計算週報酬

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

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

回復 1# ginbow
[attach]6408[/attach]

用資料庫加總函數 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
複製代碼

作者: ginbow    時間: 2011-5-30 14:28

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

我突然有靈感了!先來寫看看 !
先判斷今天是不是禮拜五 如果不是就往前找上個禮拜五看有沒有資料
如果沒就-1抓在沒就-2 直到抓到有資料
然後在往前去找上上個禮拜五
作者: hugh0620    時間: 2011-5-30 16:18

不曉得我的處理方式~ 有沒有符合樓主的要求
我的方式是將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
附件
[attach]6422[/attach]
結果圖示
[attach]6423[/attach]
作者: GBKEE    時間: 2011-5-30 20:44

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


[attach]6426[/attach]
作者: Hsieh    時間: 2011-5-30 22:58

[attach]6427[/attach]
作者: ginbow    時間: 2011-5-31 01:47

我在試試看! 謝謝 ^^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)