我正在嘗試在 R 中分析燭臺形態 Marubozu。到目前為止,我能夠下載不同的股票資料并在一個股票資料中使用“燭臺”庫找到形態。我想自動化該程序,以便我可以同時對許多股票運行 CSPMarubozu 功能。
我的主要問題是我無法真正理解如何將資料串列傳遞給這個函式。在嘗試使用 for 回圈(嘗試 1)執行此操作時,出現以下錯誤:“CSPMarubozu((names(stocks_list[i])), n = 20, ATRFactor = 0.8, 中的錯誤:價格系列必須包含開盤價、最高價、最低價并關閉。”我知道,我無法將字符變數傳遞給這個函式,但我找不到沒有“”標記的索引名稱。(例如“AMZN”,我只需要 AMZN”
我的另一個嘗試(嘗試 2)是用 lapply() 函式來做,但出現同樣的問題
這是我的代碼:
#install.packages(candlesticks)
library(candlesticks)
library(tidyquant)
library(quantmod)
#List of stock codes
stocks <- c("AAPL","MSFT","GOOG","GOOGL","AMZN","TSLA","FB","ADI","ASML","ADBE","NTES","NFLX","JD","CSCO","AVGO","COST","PEP","CMCSA","PYPL","INTC","QCOM","INTU","TXN","TMUS","HON","AMAT","SBUX","CHTR","ISRG","AMGN","MRNA","ADP","LRCX","MU","TEAM","BKNG","GILD","MDLZ","CSX","PDD","MRVL","WDAY","REGN","KLAC","NXPI","ADSK","MELI","LULU","ILMN","ZM")
#Timestamp
start = '2019-01-01'
end = '2020-01-01'
#Stocks data download (creates XTS - objects)
for (i in stocks)
{
i <- getSymbols(i, src = "yahoo", from = start, to = end)
}
#Stocks data download (creates list of XTS - objects
stocks_list <- list()
for (i in stocks){
stocks_list[[i]] <- getSymbols(i, src = "yahoo", from = start, to = end, auto.assign=FALSE, return.class="xts")
}
#Finding Marubozu Candlestick in one stock
AMZN_marubozu<- CSPMarubozu(AMZN, n=20, ATRFactor=.8, maxuppershadowCL=.017, maxlowershadowCL=.017)
#Finding Marubozu Candlestick in the whole list of Stocks
#Try 1
for (i in names(stocks_list)){
names(stocks_list[i]) <- CSPMarubozu((names(stocks_list[i])), n=20, ATRFactor=.8, maxuppershadowCL=.017, maxlowershadowCL=.017)
}
#Try 2
DoMaru <- function(name)
{
CSPMarubozu(name, n=20, ATRFactor=.8, maxuppershadowCL=.017, maxlowershadowCL=.017)
}
apply_Marubozu <- lapply(stocks_list, DoMaru(stocks_list$name))
uj5u.com熱心網友回復:
這將下載股票,然后顯示處理每種股票的三種不同的等效方式。我們使用 dim(...) 但這將被替換為所需的任何處理。請注意,如果 x 是具有 OHLC 以及調整后收盤價和交易量的股票的 xts 物件,則 Op(x)、Hi(x)、Lo(x)、Cl(x)、Ad(x) 和 Vo(x)是開盤價、最高價、最低價、收盤價、調整收盤價和成交量的向量。
盡管下面的代碼似乎更可取,但getSymbols(stocks); L <- mget(stocks)也可以將股票放入您的作業區,然后將它們收集到串列 L 中。
library(quantmod)
stocks <- c("AAPL", "MSFT", "GOOG")
getSymbols(stocks, env = e <- new.env())
# 1. iterate over components of e
out1 <- eapply(e, function(x) { dim(x) })
L <- as.list(e)
# 2. iterate over names
out2 <- Map(function(nm) { x <- L[[nm]]; dim(x) }, names(L))
out2a <- Map(function(nm) { x <- e[[nm]]; dim(x) }, ls(e))
# 3. iterate over components of list L
out3 <- Map(function(x) { dim(x) }, L)
str(out1)
## List of 3
## $ AAPL: int [1:2] 3764 6
## $ GOOG: int [1:2] 3764 6
## $ MSFT: int [1:2] 3764 6
identical(out1, out2)
## [1] TRUE
identical(out1, out2a)
## [1] TRUE
identical(out1, out3)
## [1] TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380638.html
