У меня возникли проблемы при записи пользовательской функции индикатора для использования с quanstrat::add.indicator
Пользовательская функция индикатора для quantstrat
Ошибка:
Error in inherits(x, "xts") : object 'price' not found
Мой код:
library(quantstrat)
symbols<-getSymbols("USD/EUR",src="oanda")
strat<-acct<-portfolio<-"tempTest"
initEq<-1000
initDate <- '2009-12-31'
currency("USD")
exchange_rate(symbols, currency="USD")
rm.strat(strat) # remove portfolio, account, orderbook if re-run
initPortf(name=portfolio, symbols, initDate=Sys.Date())
initAcct(name=acct, portfolios=portfolio,initDate=Sys.Date(), initEq=initEq)
initOrders(portfolio=portfolio, initDate=Sys.Date())
strategy(strat, store=TRUE)
colnames(USDEUR)<-"Close"
#################################################################################################
RSI.lagged<-function(lag=1,n=2,...){
RSI <- RSI(price)
RSI <- lag(RSI, lag)
out <- RSI$rsi
colnames(out) <- "rsi"
return(out)
}
########RSI indicator
####THIS IS LAGGED TO PREVENT FOREKNOWLEDGE
add.indicator(strat, name="RSI.lagged", arguments=list(price = quote(Cl(mktdata)), n=2), label="rsiIndLagged")
test <- applyIndicators(strat, mktdata=USDEUR)
После добавления параметра price
к функции RSI.lagged, например RSI.lagged<-function(lag=1,n=2,price,...)
Я получаю сообщение об ошибке:
Error in `colnames<-`(`*tmp*`, value = "rsi") : attempt to set 'colnames' on an object with less than two dimensions
Где функция 'add.indicator'? Единственной функцией, которую вы показываете для кода, является 'RSI.lagged' (и если вы хотите, чтобы она использовала' price' внутри нее, тогда вы должны передать аргумент с именем 'price'), но вы не показываете код, который его вызывает , – Gregor
Мои извинения, 'library (quantstrat)' является необходимой библиотекой. Я редактировал мой код, чтобы включить это. – Rilcon42
Я все еще смущен --- Я считаю, что вы ответили на первые 5 слов моего комментария, но проигнорировали остальные 40 слов. Или я пропустил что-то еще? – Gregor