java ema算法_K线图指标算法(MA EMA)

写在前面的话

本人android开发股线图时基于MpAndroidChart开发的,所以后面用到的算法中CandleEntry, Entry等都是MpAndroidChart的API,均使用java实现,算法经过对比验证,和其他证券平台的指标结果一致。

目前只研究了MA、EMA、BOLL、MACD、KDJ、RSI几种指标。

一、MA:

英文(Moving average)的简写,叫移动平均线指标,算法最简单的一个指标。

计算方式:

1.N日MA=N日收市价的总和/N(即算术平均数)

2.要设置多条移动平均线,一般参数设置为N1=5,N2=10,N3=20,N4=60,N5=120,N6=250

// n日均线MA,

public static List getMA(List entries, int n) {

List result = new ArrayList<>();

for (int i = 0, len = entries.size(); i < len; i++) {

if (i < n - 1) {

continue;

}

float sum = 0;

for (int j = 0; j < n; j++) {

sum += entries.get(i - j).getClose();

}

result.add(new Entry(entries.get(i).getX(), sum / n));

}

return result;

}

二、EMA:

指数移动平均值。也叫EXPMA指标,它也是一种趋向类指标,指数移动平均值是以指数式递减加权的移动平均

计算方式:

EMAtoday=α * Pricetoday + ( 1 - α ) * EMAyesterday;

其中,α为平滑指数,一般取作2/(N+1)。在计算MACD指标时,EMA计算中的N一般选取12和26天,因此α相应为2/13和2/27

/**

* EMA算法

* EMA(N) = 2/(N+1)*C + (N-1)/(N+1)*EMA', EMA'为前一天的ema; 通常N取12和26

*

* @param entries

* @param n

* @return

*/

public static List getEMA(List entries, int n) {

List result = new ArrayList<>();

float lastEma = entries.get(0).getClose();// 第一个EMA为第一个数据的价格

result.add(new Entry(0, lastEma));

float[] emaFactor = getEMAFactor(n);

for (int i = 1; i < entries.size(); i++) {

float ema = emaFactor[0] * entries.get(i).getClose() + emaFactor[1] * lastEma;

result.add(new Entry(entries.get(i).getX(), ema));

lastEma = ema;

}

return result;

}

/**

* 获取EMA计算时的相关系数 (后续多个地方需要这个系数 抽取出来用)

* @param n

* @return

*/

private static float[] getEMAFactor(int n) {

return new float[]{2f / (n + 1), (n - 1) * 1.0f / (n + 1)};

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值