问题描述
当我运行下面的代码时出现以下错误。 “如果 (inherits(sret$indicators,"xts") & nrow(mktdata) == nrow(sret$indicators)) { 中的错误: 参数的长度为零”。我的猜测是我的线性回归曲线 (LRC) 函数中缺少某些内容。请帮忙。
# rm(list = ls(all = TRUE))
library(timeSeries)
library(timeDate)
library(tseries)
library(PerformanceAnalytics)
library(quantmod)
library(xts)
library(blotter)
library(TTR)
library(quantstrat)
library(FinancialInstrument)
library(reshape2)
library(ggplot2)
library(alphavantager)
library(dplyr)
startDate = "2001-01-01"
LRC <- function(x,n) {
price <- Cl(x)
m <- 1:n;
y <- ts(coredata(price))[,1]
ab = rollapply(y,n,function(yt){coef(lm(yt~m))},align = "right")
z <- ab[,2]*m[n]+ab[,1]
price <- price[n:length(price)]
z <- xts(unclass(z),order.by = as.Date(index(price)))
colnames(z) <-"LRC"
return(z)
}
symbols <- c("SPY","GLD")
getSymbols(symbols,src="av",api.key="P3KV99S52NH4N3YZ",output.size="full",periodicity="daily",from = startDate,adjusted=FALSE,auto.assign = TRUE)
initDate <- startDate
initEq <- 100000
tradeSize <- initEq/length(symbols)
currency("USD")
stock(symbols,currency="USD",multiplier=1)
myTheme<-chart_theme()
myTheme$col$dn.col<- 'lightblue'
myTheme$col$dn.border <- 'lightgray'
myTheme$col$up.border <- 'lightgray'
if(exists('.strategy')) rm.strat(qs.strategy)
if(!exists('.blotter')) .blotter <- new.env()
if(!exists('.strategy')) .strategy <- new.env()
qs.strategy <- "AD26"
initPortf(qs.strategy,symbols,initDate=initDate)
initAcct(qs.strategy,portfolios=qs.strategy,initDate=initDate,initEq=initEq)
initOrders(portfolio=qs.strategy,initDate=initDate)
strategy(qs.strategy,store=TRUE)
add.indicator(strategy = qs.strategy,name = "LRC",arguments = list(x = quote(OHLC(mktdata)),n=21),label="LR21")
add.indicator(strategy = qs.strategy,n=5),label="LR5")
summary(getStrategy(qs.strategy))
#############################################################################################################
add.signal(qs.strategy,name="sigCrossover",arguments=list(columns=c("LR5","LR21"),relationship="gte"),label="Buy")
add.signal(qs.strategy,relationship="lt"),label="Sell")
summary(getStrategy(qs.strategy))
##############################################################################################################
add.rule(qs.strategy,name='ruleSignal',arguments = list(sigcol="Buy",sigval=TRUE,prefer ="open",replace = FALSE,orderqty = 100,ordertype='market',orderside = 'long'
),type='enter',label = 'LE'
)
add.rule(qs.strategy,arguments = list(sigcol="Sell",replace = TRUE,prefer ="Close",orderqty="all",orderside='long'
),type='exit',parent = "LE",label = "ProfitTake",enable = TRUE
)
summary(getStrategy(qs.strategy))
applyStrategy(strategy=qs.strategy,portfolios=qs.strategy)
sessionInfo() 返回以下内容:
R version 4.0.4 (2021-02-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.2 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_1.0.4 alphavantager_0.1.2 highfrequency_0.8.0.1 anytime_0.3.9 forecast_8.13 jsonlite_1.7.2
[7] tidyquant_1.0.2 lubridate_1.7.9.2 riingo_0.3.1 pracma_2.3.3 urca_1.3-0 Quandl_2.10.0
[13] reshape2_1.4.4 Hmisc_4.4-2 ggplot2_3.3.3 Formula_1.2-4 survival_3.2-7 quantstrat_0.16.8
[19] foreach_1.5.1 blotter_0.15.0 FinancialInstrument_1.3.1 quantmod_0.4.18 TTR_0.24.2 PerformanceAnalytics_2.0.4
[25] xts_0.12.1 zoo_1.8-8 tseries_0.10-48 timeSeries_3062.100 timeDate_3043.102 lattice_0.20-41
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)