程式

在 R 中創建投資組合:良好實踐

  • March 5, 2018

我對 quantfin 很陌生,但想學習。我已經搜尋了答案(Google和stackex),但沒有找到任何令人滿意的東西(但我可能沒有問正確的問題……)問題:

我必須從期刊重新創建投資組合 (PF),該期刊每 3 個月發布一次,但包含每日數據。該 PF 每 3 個月重新平衡一次。我目前獲得了我需要的所有日常數據(宇宙)。如何以最有用的方式創建我的 PF?

我的理想目標是讓我的 PF 基於時間,只有當時在其中的股票(而不是權重 = 0 的整個宇宙)。

有這個包嗎?什麼是好的做法?

任何幫助表示讚賞

正如 Alex C 所評論的PMwR,我維護的 R 包可能會提供一些有用的功能。一個小例子:我創建了一個包含三筆交易的日誌。(請注意,這裡的期刊只是交易的集合。)

library("PMwR")
library("orgutils")

tmp <- readOrg(text="
| instrument | amount |  timestamp | price |
|------------+--------+------------+-------|
| AMZN       |     10 | 2018-01-03 |  1201 |
| AMZN       |    -10 | 2018-01-10 |  1250 |
| IBM        |     20 | 2018-01-10 |   153 |
")

tmp$timestamp <- as.Date(tmp$timestamp)
J <- as.journal(tmp)
J
##    instrument   timestamp  amount  price
## 1        AMZN  2018-01-03      10   1201
## 2        AMZN  2018-01-10     -10   1250
## 3         IBM  2018-01-10      20    153
## 
## 3 transactions  

您可以使用 獲得投資組合的目前組成position

position(J)
##      2018-01-10
## AMZN          0
## IBM          20

該參數drop.zero隱藏了非活動位置。

position(J, drop.zero = TRUE)
##     2018-01-10
## IBM         20


position(J, when = as.Date("2018-1-5"), drop.zero = TRUE)
##      2018-01-05
## AMZN         10

您也可以計算超過一天的位置:

days <- seq(from = as.Date("2018-1-1"),
           to = as.Date("2018-1-12"),
           by = "1 day")
position(J, when = days)
##            AMZN IBM
## 2018-01-01    0   0
## 2018-01-02    0   0
## 2018-01-03   10   0
## 2018-01-04   10   0
## 2018-01-05   10   0
## 2018-01-06   10   0
## 2018-01-07   10   0
## 2018-01-08   10   0
## 2018-01-09   10   0
## 2018-01-10    0  20
## 2018-01-11    0  20
## 2018-01-12    0  20

引用自:https://quant.stackexchange.com/questions/38603