public class TechnicalAnalysis {
public static double calculateSMA(List<Double> values, int period) {
double sum = 0;
for (int i = 0; i < period; i++) {
sum += values.get(i);
}
return sum / period;
}
public static double calculateEMA(List<Double> values, int period) {
double alpha = 2.0 / (period + 1);
double ema = values.get(0);
for (int i = 1; i < values.size(); i++) {
ema = alpha * values.get(i) + (1 - alpha) * ema;
}
return ema;
}
public static double calculateRSI(List<Double> values, int period) {
double upSum = 0;
double downSum = 0;
double lastValue = values.get(0);
for (int i = 1; i < values.size(); i++) {
double diff = values.get(i) - lastValue;
if (diff > 0) {
upSum += diff;
} else {
downSum += Math.abs(diff);
}
lastValue = values.get(i);
}
double rs = upSum / downSum;
return 100 - 100 / (1 + rs);
}
}
这段代码定义了一个 TechnicalAnalysis
类,其中包含了三个静态方法,分别用于计算简单移动平均线(SMA)、指数移动平均线(EMA)和相对强弱指数(RSI)。
在 calculateSMA
方法中,通过一个 for
循环计算给定 values
列表中最近 period
个元素的平均值,该平均值即为 SMA 值。
在 calculateEMA
方法中,通过给定的 period
计算出平滑系数 alpha
,然后利用一个 for
循环,使用指数加权移动平均的方法计算给定 values
列表中最近 period
个元素的 EMA 值。
在 calculateRSI
方法中,使用一个 for
循环遍历 values
列表,依次计算每个时间段的涨跌幅,并根据涨跌幅计算出相应的上涨值 upSum
和下跌值 downSum
,最终通过这两个值计算出相对强弱指数 RSI 值。