標題:
計算週報酬
[打印本頁]
作者:
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
)
如用巨集如下
Sub Ex()
Dim Wd As String, Tol As Double, i As Long
With Sheet1
Wd = Format(.Range("D2"), "WW")
.Range("E2") = Wd & "週"
i = 1
Do While .Cells(i, "a") <> ""
i = i + 1
If Format(.Cells(i, "a"), "WW") = Wd Then Tol = Tol + .Cells(i, "B")
Loop
.Range("F2") = Tol
End With
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/)