R - 如何在计算调整后的股票收益率之前将吝啬鬼从环境中排除

问题描述 投票:0回答:1

在我目前的研究中,我试图找出,特殊情绪对每日股票回报的影响有多大。计算运行良好,结果也是合理的。到目前为止,quantmod包和雅虎财务数据的计算如下所示:

getSymbols(c("^CDAXX",Symbols) , env = myenviron, src = "yahoo",
           from = as.Date("2007-01-02"), to = as.Date("2016-12-30")

Returns <- eapply(myenviron, function(s) ROC(Ad(s), type="discrete"))
ReturnsDF <- as.data.table(do.call(merge.xts, Returns))
# adjust column names 
colnames(ReturnsDF) <- gsub(".Adjusted","",colnames(ReturnsDF))
ReturnsDF <- as.data.table(ReturnsDF)

然而,为了使其更加强大,以便对pennystock数据的嘈杂影响我想知道,如何排除曾经在该时间段内低于某个值x的股票,假设1欧元。

我想,最好的办法是在计算返回值之前将它们排除并合并xts对象结果,甚至更好,然后再使用getSymbols命令下载它们。有谁知道这怎么可能最好?提前致谢。

environment xts quantmod yahoo-finance
1个回答
0
投票

试试这个:

  • 建立Adj的价格框架。你的符号的收盘价格(我使用的是quantmod附加软件包PFqmao函数,它具有许多其他有用的函数用于此类分析。(install.packages("qmao", repos="http://R-Forge.R-project.org”)
  • 如果任何价格低于最低触发价格,请按栏检查
  • 仅选择在触发价格之下没有结束的列

为了保持更灵活,我建议采取一个子期间 - 假设在过去21个交易日内没有低于5的价格。下面的玩具示例可能说明我的观点。

我使用AAPL,FB和MSFT作为符号Universe。

> symbols <- c('AAPL','MSFT','FB')
> getSymbols(symbols, from='2018-02-01')
[1] "AAPL" "MSFT" "FB"  
> prices <- PF(symbols, silent = TRUE)
> prices
               AAPL     MSFT     FB
2018-02-01 167.0987 93.81929 193.09
2018-02-02 159.8483 91.35088 190.28
2018-02-05 155.8546 87.58855 181.26
2018-02-06 162.3680 90.90299 185.31
2018-02-07 158.8922 89.19102 180.18
2018-02-08 154.5200 84.61253 171.58
2018-02-09 156.4100 87.76771 176.11
2018-02-12 162.7100 88.71327 176.41
2018-02-13 164.3400 89.41000 173.15
2018-02-14 167.3700 90.81000 179.52
2018-02-15 172.9900 92.66000 179.96
2018-02-16 172.4300 92.00000 177.36
2018-02-20 171.8500 92.72000 176.01
2018-02-21 171.0700 91.49000 177.91
2018-02-22 172.5000 91.73000 178.99
2018-02-23 175.5000 94.06000 183.29
2018-02-26 178.9700 95.42000 184.93
2018-02-27 178.3900 94.20000 181.46
2018-02-28 178.1200 93.77000 178.32
2018-03-01 175.0000 92.85000 175.94
2018-03-02 176.2100 93.05000 176.62

假设您希望在过去6个交易日内交易低于175.40的任何工具被排除在您的分析之外:-)。如您所见,它将排除AAPL和FB。

apply和基本函数any应用(!)为6天的prices子集将给我们准确的我们想要的。显示最近3天的价格,不包括不符合我们条件的工具:

> tail(prices[,apply(tail(prices),2, function(x) any(x < 175.4)) == FALSE],3)
               FB
2018-02-28 178.32
2018-03-01 175.94
2018-03-02 176.62
© www.soinside.com 2019 - 2024. All rights reserved.