Я хотел бы вычислить функцию RSI, которая задается следующим образом:
RSI = 100 * RS / ( 1 + RS ), where RS = n_up / n_down
and n_up( t ) = ( 1 - b ) * n_up( t - 1 )
+ b * U( t ),
and n_down( t ) = ( 1 - b ) * n_down( t - 1 )
+ b * D( t ).
where U( t ) = 1 for P( t ) > P( t - 1 ) and
0 otherwise;
and D( t ) = 1 for P( t ) < P( t - 1 ) and
0 otherwise.
Итак, вот мой код:
p <- data[,6]
rsi <- function(P,t,n)
{
U <- function(P,t)
{
if (diff(P)[t] > 0)
{
return(1)
} else {
return(0)
}
}
D <- function(P,t)
{
if (diff(P)[t] < 0)
{
return(1)
} else {
return(0)
}
}
recursive.n_up <- function(P,t,b)
{
return((1-b)*recursive.n_up(P,t-1,b) + b*U(P,t))
}
recursive.n_down <- function(P,t,b)
{
return((1-b)*recursive.n_down(P,t-1,b) + b*D(P,t))
}
b <- 2/(n+1)
rs <- function(P,t,b)
{
return(recursive.n_up(P,t,b)/recursive.n_down(P,t,b))
}
return(100*rs(P,t,b)/(1+rs(P,t,b)))
}
n <- 14
RSI <- rep(0,length(p)-1)
for (i in 1:length(RSI))
{
RSI[i] <- rsi(p,i,n)
}
print(RSI)
Я получаю сообщение об ошибке:
Использование стека C 7970184 слишком близко к пределу
Итак, я хочу знать, очень ли плох мой дизайн алгоритма или этого следует ожидать при использовании рекурсивных функций? Спасибо, что помогли мне решить эту проблему.