(使用for循环解决QuantMod错误)。 runSum(x,n)中的错误:n = 20在有效范围之外:[1,5]

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

我目前正在尝试对约500个股票行情自动收录器运行for循环,并尝试为所有股票创建一个图表。我已成功完成此操作,但是我的for循环因该错误而中断Error in runSum(x, n) : n = 20 is outside valid range: [1, 5],我从BatchGetSymbols库获得了股票行情记录。

这是我的脚本,底部是我的for循环:

library(stocks)
library(BatchGetSymbols)
library(quantmod)
datalist <- list()
stocks <- c('MMM','ABT','ABBV','ABMD','ACN','ATVI','ADBE','AMD','AAP','AES','AFL','A',
            'APD','AKAM','ALK','ALB','ARE','ALXN',
            'ALGN','ALLE','AGN','ADS','LNT','ALL','GOOGL','GOOG','MO','AMZN','AMCR',
            'AEE','AAL','AEP','AXP','AIG','T','AMT','AWK','AMP','ABC','AME','AMGN','APH','ADI','ANSS',
            'ANTM','AON','AOS','APA','AIV','AAPL','AMAT','APTV','ADM','ARNC','ANET','AJG','AIZ','ATO','ADSK','ADP',
            'AZO','AVB','AVY','BKR','BLL','BAC','BK','BAX','BDX','BRK.B',
            'BBY','BIIB','BLK','BA','BKNG','BWA','BXP','BSX','BMY','AVGO',
            'BR','BF.B','CHRW','COG','CDNS','CPB','COF','CPRI','CAH','KMX','CCL',
            'CAT','CBOE','CBRE','CDW','CE','CNC','CNP','CTL', 'CERN','CF','SCHW','CHTR','CVX','CMG','CB',
            'CHD','CI','CINF','CTAS','CSCO','C','CFG','CTXS','CLX','CME','CMS',
            'KO','CTSH','CL','CMCSA','CMA','CAG','CXO','COP','ED','STZ','COO','CPRT','GLW',
            'CTVA','COST','COTY','CCI','CSX','CMI', 'CVS','DHI','DHR','DRI','DVA','DE','DAL',
            'XRAY','DVN','FANG','DLR','DFS','DISCA','DISCK',
            'DISH','DG','DLTR','D','DOV','DOW','DTE','DUK','DRE','DD','DXC','ETFC',
            'EMN','ETN','EBAY','ECL','EIX','EW','EA','EMR','ETR','EOG','EFX','EQIX',
            'EQR','ESS','EL','EVRG','ES','RE','EXC','EXPE','EXPD','EXR',
            'XOM','FFIV','FB','FAST','FRT','FDX','FIS',
            'FITB','FE','FRC','FISV','FLT','FLIR','FLS','FMC', 'F','FTNT','FTV','FBHS','FOXA','FOX','BEN',
            'FCX','GPS','GRMN','IT','GD','GE','GIS','GM',
            'GPC','GILD','GL','GPN','GS','GWW','HRB','HAL','HBI','HOG','HIG',
            'HAS', 'HCA','PEAK','HP','HSIC','HSY','HES','HPE','HLT', 'HFC','HOLX','HD',
            'HON', 'HRL','HST', 'HWM','HPQ','HUM',  'HII', 'IEX',
            'IDXX', 'INFO','ITW','ILMN','INCY', 'IR','INTC',
            'ICE','IBM','IP','IPG','IFF','INTU','ISRG','IVZ','IPGP',
            'IQV', 'IRM', 'JKHY','J','JBHT', 'SJM', 'JNJ', 'JCI','JPM','JNPR','KSU','K','KEY', 'KEYS',
            'KMB', 'KIM','KMI', 'KLAC','KSS','KHC','KR',
            'LB', 'LHX', 'LH', 'LRCX','LW', 'LVS','LEG', 'LDOS', 'LEN','LLY','LNC',
            'LIN','LYV','LKQ','LMT','L','LOW','LYB','MTB','M','MRO','MPC','MKTX','MAR','MMC','MLM','MAS','MA',
            'MKC','MXIM', 'MCD','MCK','MDT','MRK','MET',  'MTD','MGM','MCHP','MU','MSFT', 'MAA',
            'MHK', 'TAP','MDLZ','MNST','MCO','MS', 'MOS','MSI','MSCI',
            'MYL','NDAQ', 'NOV','NTAP','NFLX','NWL','NEM','NWSA','NWS','NEE','NLSN','NKE',
            'NI','NBL','JWN','NSC','NTRS','NOC','NLOK','NCLH','NRG','NUE','NVDA','NVR', 'ORLY', 'OXY',
            'ODFL', 'OMC','OKE','ORCL','PCAR','PKG','PH','PAYX','PAYC','PYPL','PNR', 'PBCT','PEP','PKI','PRGO',
            'PFE','PM', 'PSX', 'PNW','PXD', 'PNC','PPG','PPL','PFG',
            'PG','PGR','PLD','PRU','PEG','PSA','PHM','PVH','QRVO','PWR','QCOM',
            'DGX','RL','RJF', 'RTX','O','REG','REGN','RF','RSG', 'RMD',
            'RHI','ROK','ROL','ROP','ROST','RCL','SPGI','CRM','SBAC','SLB','STX',
            'SEE', 'SRE','NOW','SHW','SPG','SWKS', 'SLG','SNA','SO','LUV', 'SWK','SBUX',
            'STT', 'STE', 'SYK','SIVB', 'SYF','SNPS','SYY','TMUS','TROW','TTWO','TPR','TGT','TEL',
            'FTI', 'TFX','TXN','TXT','TMO','TIF','TJX','TSCO','TT',
            'TDG','TRV','TFC', 'TWTR','TSN','UDR','ULTA', 'USB', 'UAA','UA',
            'UNP','UAL','UNH', 'UPS','URI','UHS','UNM','VFC','VLO','VAR', 'VTR',
            'VRSN', 'VRSK','VZ', 'VRTX','VIAC', 'V', 'VNO','VMC',
            'WRB','WAB','WMT','WBA', 'DIS','WM','WAT','WEC','WFC','WELL','WDC','WU','WRK','WY','WHR',
            'WMB','WLTW','WYNN',  'XEL', 'XRX','XLNX', 'XYL','YUM', 'ZBRA','ZBH','ZION', 'ZTS'
)

stockEnv <- new.env()
View(stockEnv)
symbols <- getSymbols(stocks, src='yahoo', env=stockEnv)

for (stocks in ls(stockEnv)){
  chartSeries(stockEnv[[stocks]], theme="white", name=stocks,
              TA="addVo();addBBands();addCCI();
        addSMA(5, col='red');addMACD();addRSI();addROC()", subset='last 30 days')     
}
r rstudio quantmod
1个回答
1
投票

下载数据后,我收到以下警告消息:

Warning message:
HWM contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 

这可能是该错误消息的来源。让我们来看看HWM

head(stockEnv[[stocks]])
           HWM.Open HWM.High HWM.Low HWM.Close HWM.Volume HWM.Adjusted
2019-10-03    24.17    24.28   23.74     24.25    2828500        24.25
2019-10-04    24.21    24.50   23.96     24.49    2250500        24.49
2019-10-07       NA       NA      NA        NA         NA           NA
2019-10-08       NA       NA      NA        NA         NA           NA
2019-10-09       NA       NA      NA        NA         NA           NA
2019-10-10       NA       NA      NA        NA         NA           NA

tail(stockEnv[[stocks]])
           HWM.Open HWM.High HWM.Low HWM.Close HWM.Volume HWM.Adjusted
2020-03-27       NA       NA      NA        NA         NA           NA
2020-03-30       NA       NA      NA        NA         NA           NA
2020-03-31       NA       NA      NA        NA         NA           NA
2020-04-01    15.40    15.40   12.71     13.20    2531000        13.20
2020-04-02    12.97    13.71   12.00     12.50    4431900        12.50
2020-04-03    12.10    12.69   11.85     12.54    4053100        12.54

因此,根据警告消息,HMW在系列中间有NA,但这是for循环失败的原因吗? for循环将告诉您导致循环停止的罪魁祸首,只需检查stocks变量的内容即可。

stocks
[1] "HWM"

是的,HWM是造成这种情况的原因。问题是why会失败吗?查看chartseries()源代码,检查前两行是否是xts对象并删除NA:

x <- try.xts(x, error = "chartSeries requires an xtsible object")
x <- na.omit(x)

na.omit上调用stockEnv[[stocks]]给出:

 na.omit(stockEnv[[stocks]])
           HWM.Open HWM.High HWM.Low HWM.Close HWM.Volume HWM.Adjusted
2019-10-03    24.17    24.28   23.74     24.25    2828500        24.25
2019-10-04    24.21    24.50   23.96     24.49    2250500        24.49
2020-04-01    15.40    15.40   12.71     13.20    2531000        13.20
2020-04-02    12.97    13.71   12.00     12.50    4431900        12.50
2020-04-03    12.10    12.69   11.85     12.54    4053100        12.54

五行数据,与错误消息中x中的五行匹配:

Error in runSum(x, n) : n = 20 is outside valid range: [1, 5] 

查看传递给TA参数的函数列表,addBBands具有参数n,默认值为20。我不确定addBBands()到底在哪里调用runSum(),但我假定它使用n的值,该值为20传递给n中的runSum()参数。 n的值大于数据的行数,则会导致该错误。

如何解决?这取决于您要如何对待这些NA。我的建议是完全排除这一份额。您可能更希望将NA替换为零,我不建议您执行此操作,因为零表示该日的交易量,而与NA一样,您也不知道发生了什么。数据太小,无法近似或内插。

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.