股票dmi指标的算法用java实现 ,传入完整的当天的价格,输出四个指标
时间: 2024-09-06 10:06:49 浏览: 64
Python 实现 DMI 指标计算:股票技术分析的利器系列(5)
DMI(Directional Movement Index,动向指数)是一种技术分析工具,用于测量价格的方向性变化。它由+DI(正差分线)和–DI(负差分线)两个指标组成,以及一个综合指标TRIX(1-day Rate of Change of the DMI)。以下是基本步骤的Java实现概述:
```java
import java.util.ArrayList;
public class DMI {
private static final double DECAY_RATE = 0.14; // 这通常是DMI计算中的衰减率
public static void calculateDMI(double[] dailyPrices) {
if (dailyPrices == null || dailyPrices.length < 2) return;
int length = dailyPrices.length;
ArrayList<Double> upMoves = new ArrayList<>(), downMoves = new ArrayList<>();
for (int i = 1; i < length; i++) {
double diff = dailyPrices[i] - dailyPrices[i - 1];
if (diff > 0) upMoves.add(diff);
else if (diff < 0) downMoves.add(-diff);
}
// 计算DI
double[] DI = {0};
for (double move : upMoves) {
DI[0] += move * DECAY_RATE;
// 如果当前值大于前一周期,计算+DI
if (DI[0] > DI[0] / 2) {
DI[0] = Math.min(100, DI[0]);
}
}
for (double move : downMoves) {
DI[0] += move * DECAY_RATE;
// 如果当前值小于前一周期,计算-DI
if (DI[0] < DI[0] / 2) {
DI[0] = Math.max(-100, DI[0]);
}
}
DI[0] /= length; // 平均值
// 计算-DM
// 类似于计算+DI的过程,只是处理的是负移动
// 计算TRIX
double trix = calculateTRIX(DI);
System.out.println("DMI: " + DI[0]);
System.out.println("-DMI: (未提供,类似计算+DI过程)");
System.out.println("TRIX: " + trix);
}
private static double calculateTRIX(double[] di) {
double trix = di[0];
double prevTRIX = trix;
for (int i = 1; i < di.length; i++) {
trix = (di[i] - prevTRIX) / DECAY_RATE;
prevTRIX = trix;
}
return trix;
}
}
```
这段代码首先获取每日价格的差分,然后计算+DI和-DI。最后计算TRIX。注意,实际代码可能需要对-DMI进行同样的计算,并且这里假设了价格列表包含至少两天的数据。
阅读全文