推广“$-notation”

Generalize "$-notation"

我仍然习惯于在 R 中工作,并认为构建一个“简单的”MACD 筛选器将是了解 R 的一些内部工作原理的好方法。但是,我遇到了以下问题。 我已经完全能够计算出单独股票的 MACD 和信号线。所以现在,为了能够扫描多只股票,我必须概括代码。我的问题是:“如何在“$-notation”中使用变量(f.e。当前正在查看的股票名称)? 在此之后,我打算做一个“for 循环”来迭代列表对象中的股票名称。这是一种实用的方法吗?

下面我插入了到目前为止的代码。在此代码中,我希望用变量替换“QQQ”。

library(quantmod)
tickers <- c('QQQ','SPY','APPL','MMM')

ema.s = 12
ema.l = 26
ema.k = 9
ema.t = 200

getSymbols(tickers, from = '2021-01-6',
           to = "2021-10-21",warnings = FALSE,
           auto.assign = TRUE)

QQQ$QQQ.EMA.S <- EMA(QQQ[,6], n = ema.s)
QQQ$QQQ.EMA.L <- EMA(QQQ[,6], n = ema.l)
QQQ$QQQ.MACD <- QQQ$QQQ.EMA.S - QQQ$QQQ.EMA.L
QQQ$QQQ.SIG <- EMA(QQQ$QQQ.MACD, n = ema.k)

您可以一次性使用 tidyquant 完成所有这些。

library(tidyquant)

ema.s = 12
ema.l = 26

tickers <- c('QQQ','SPY','AAPL','MMM')

# get all the data in a tibble
stock_data <- tq_get(tickers, 
                     from = '2021-01-6',
                     to = "2021-10-21")


stock_data <- stock_data %>% 
  group_by(symbol) %>% 
  tq_mutate(select = adjusted,
            mutate_fun = MACD,
            n_fast = ema.s,
            n_slow = ema.l)

stock_data 

# A tibble: 800 x 10
# Groups:   symbol [4]
   symbol date        open  high   low close   volume adjusted  macd signal
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl> <dbl>  <dbl>
 1 QQQ    2021-01-06  307   312.  306.  308. 52809600     306.    NA     NA
 2 QQQ    2021-01-07  310.  316.  310.  315. 30394800     314.    NA     NA
 3 QQQ    2021-01-08  317.  319.  315.  319. 33955800     318.    NA     NA
 4 QQQ    2021-01-11  316.  317.  314.  314. 32746400     313.    NA     NA
 5 QQQ    2021-01-12  314.  316.  311.  314. 29266800     313.    NA     NA
 6 QQQ    2021-01-13  314.  317.  314.  316. 22898400     315.    NA     NA
 7 QQQ    2021-01-14  316.  318.  314.  314. 23500100     313.    NA     NA
 8 QQQ    2021-01-15  314.  315.  311.  312. 35118700     311.    NA     NA
 9 QQQ    2021-01-19  314.  317.  313.  316. 24537000     315.    NA     NA
10 QQQ    2021-01-20  320.  325.  317.  324. 30728100     323.    NA     NA  

如果您想在基本 R 函数中仅结合 quantmod 函数来执行此操作,请检查 quantmod 标签,有一些帖子使用 lapply 来执行此操作。如果您没有找到您需要的,请告诉我。