【发布时间】:2019-09-11 02:31:22
【问题描述】:
我正在尝试从我拥有的列表中筛选出不满足一定水平的积极趋势存在条件的股票。我通过要求时间和股票价格之间的相关系数至少为 0.4 来做到这一点,这意味着应该存在某种程度的积极趋势。
我将 for 循环与 if else 语句相结合,以便检查列表中每只股票的相关性。我的目标是,如果股票的相关性 > .4,它将保留在列表中,否则我将过滤到新的数据框 Stock_list 并过滤数据,以便除了被拒绝的股票之外的所有代码都将保留。但是,我发现即使满足 else 条件,也没有应用过滤器。此外,我添加到 else 条件中要求它打印“rejected”的第二部分运行成功。我真的很困惑为什么会出现这个问题。我将 google.drive 链接附加到我正在使用的 CSV。它的空间很小——只有大约 400 行和 6 列。
https://drive.google.com/file/d/1h4E6yg9U6oDeKUvsWhsQbFlxL3a6Fx-K/view?usp=sharing
我已经以我能想象到的所有方式对代码进行了调整(虽然不多,但仍然需要相当长的时间),但我根本无法让它工作。我不知道为什么没有在循环的每次迭代中应用过滤器。我正在使用 quantmod 来提取历史股票数据。
library(tidyverse)
library(quantmod)
Stocks <- read_csv("2018-19-KWHS-Approved-Securities.csv")
Stocks <- filter(Stocks, EXCHANGE == "New York Stock Exchange" | EXCHANGE == "NASDAQ Stock Market" | EXCHANGE == "NASDAQ - Industrial" | EXCHANGE == "NASDAQ Bank - Insurance" | EXCHANGE == "NYSE MKT LLC")
Stocks <- read_csv("2018-19-KWHS-Approved-Securities.csv")
Stocks <- filter(Stocks, EXCHANGE == "New York Stock Exchange" | EXCHANGE == "NASDAQ Stock Market" | EXCHANGE == "NASDAQ - Industrial" | EXCHANGE == "NASDAQ Bank - Insurance" | EXCHANGE == "NYSE MKT LLC")
Stocks <- filter(Stocks, TICKER != "AMCN" & TICKER != "CHKE" & TICKER != "DFBG" & TICKER != "GPIC" & TICKER != "NTRI" & TICKER != "BORN" & TICKER != "WMIH" & TICKER != "DWDP" & TICKER != "TAHO" & TICKER != "LABL" & TICKER != "SMI " & TICKER != "UTSI" & TICKER != "SMI")
Stock_List <- Stocks
Stock_filter <- function (na.rm = TRUE) {
for (i in seq_along(Stocks$TICKER)){
z <- getSymbols.yahoo(Stocks$TICKER[i],
globalenv(),
index.class = 'Date',
fr0m = "2018-01-01",
to = Sys.Date(), header = TRUE,
periodicity = "daily",
curl.options = list(), auto.assign = FALSE)
z <- data.frame(date=index(z), coredata(z))
names(z)[5]<- "Close_Price"
z <- transform(z, date = as.numeric(date))
x <<- Stocks$TICKER[i]
if (cor(z$Close_Price, z$date) > .4) {print(x)}
else {Stock_List <<- Stocks %>% filter(TICKER != x)
print("Rejected")}
}}
我已将数据集调整为无错误,但如前所述,我希望过滤器在满足 else 条件的每次迭代中发生,但这根本不会发生。
【问题讨论】:
标签: r