java 移动平均_EWMA之——EWMA指数加权移动平均模型的Java实现
具体代码如下:
package com.lyz.storm.ewma;
import java.io.Serializable;
/**
* 实现指数移动平均值计算
* 实现中使用了流式风格的builder API
* @author liuyazhuang
*
*/
public class EWMA implements Serializable {
private static final long serialVersionUID = 2979391326784043002L;
//时间类型枚举
public static enum Time {
MILLISECONDS(1), SECONDS(1000), MINUTES(SECONDS.getTime() * 60), HOURS(MINUTES.getTime() * 60), DAYS(HOURS.getTime() * 24), WEEKS(DAYS.getTime() * 7);
private long millis;
private Time(long millis) {
this.millis = millis;
}
public long getTime() {
return this.millis;
}
}
//三个alpha常量,这些值和Unix系统计算负载时使用的标准alpha值相同
public static final double ONE_MINUTE_ALPHA = 1 - Math.exp(-5d / 60d / 1d);
public static final double FIVE_MINUTE_ALPHA = 1 - Math.exp(-5d / 60d / 5d);
public static final double FIFTEEN_MINUTE_ALPHA = 1 - Math.exp(-5d / 60d / 15d);
private long window;
private long alphaWindow;
private long last;
private double average;
private double alpha = -1D;
private boolean sliding = false;
public EWMA() {
}
public EWMA sliding(double count, Time time) {
return this.sliding((long) (time.getTime() * count));
}
public EWMA sliding(long window) {
this.sliding = true;
this.window = window;
return this;
}
public EWMA withAlpha(double alpha) {
if (!(alpha > 0.0D && alpha <= 1.0D)) {
throw new IllegalArgumentException("Alpha must be between 0.0 and 1.0");
}
this.alpha = alpha;
return this;
}
public EWMA withAlphaWindow(long alphaWindow) {
this.alpha = -1;
this.alphaWindow = alphaWindow;
return this;
}
public EWMA withAlphaWindow(double count, Time time) {
return this.withAlphaWindow((long) (time.getTime() * count));
}
//没有参数的话,当前时间来计算平均值
public void mark() {
mark(System.currentTimeMillis());
}
//用来更新移动平均值,没有参数的话,使用当前时间来计算平均值
public synchronized void mark(long time) {
if (this.sliding) {
if (time - this.last > this.window) {
this.last = 0;
}
}
if (this.last == 0) {
this.average = 0;
this.last = time;
}
long diff = time - this.last;
double alpha = this.alpha != -1.0 ? this.alpha : Math.exp(-1.0 * ((double) diff / this.alphaWindow));
this.average = (1.0 - alpha) * diff + alpha * this.average;
this.last = time;
}
//返回mark()方法多次调用的平均间隔时间,单位是微秒
public double getAverage() {
return this.average;
}
//按照特定的时间单位来返回平均值,单位详见Time枚举
public double getAverageIn(Time time) {
return this.average == 0.0 ? this.average : this.average / time.getTime();
}
//返回特定时间度量内调用mark()的频率
public double getAverageRatePer(Time time) {
return this.average == 0.0 ? this.average : time.getTime() / this.average;
}
}
按照如下方式调用:
//建立1分钟滑动窗口EWMA实例
EWMA ewma = new EWMA().sliding(1.0, EWMA.Time.MINUTES).withAlpha(EWMA.ONE_MINUTE_ALPHA);
以下内容为转载:
Exponentially Weighted Moving Average(EWMA)指数加权移动平均是一种常用的序列数据处理方式,如下:
在时间 t, 根据实际的观测值(或量测值)我们可以求取 EWMA(t)如下:
EWMA(t ) = λY(t)+ ( 1-λ) EWMA(t-1) for t = 1, 2, ..., n.
* EWMA(t):t时刻的估计值
* Y(t): t 时间之量测值﹐
* n is the number of observations to be monitored including EWMA0
* λ ( 0
从另一个角度看, λ 决定了EWM A估计器跟踪实际数据突然发生变化的能力,即时效性, 显然随着λ 增大, 估计器的时效性就越强,反之,越弱;另一方面,由于 λ 的存在,EWMA还表现出一定的吸收瞬时突发的能力,这种能力称为平稳性。显然随着 λ 减小, 估计器的平稳性增强,反之降低。
应用领域:
1. 金融和管理领域处理统计数据处理的一个常用工具
2. 在通信领域中,EWMA主要用于对网络的状态参数进行估计和平滑, 例如在TCP 拥塞控制中EWMA被 用来计算分组的往返时延( RTT ) ,在拥塞控制中的主动队列管理(AQM)技术中很多使用EWMA平滑估计拥塞指示参数( 如平均队长) 等参数
深入观察:
1. 从概率角度看,EWMA是一种理想的最大似然估计技术,它采用一个权重因子 λ 对数据进行估计,当前估计值由前一次估计值和当前的抽样值共同决定
2. 从信号处理角度看,EWMA可以看成是一个低通滤波器,通过控制 λ 值,剔除短期波动、保留长期发展趋势提供了信号的平滑形式
移动平均
移动平均,简称均线,是技术分析其中一种分析时间序列数据的工具。最常见的是利用股价、回报或交易量等变量计算出移动平均。
移动平均可抚平短期波动,将长线趋势或周期显现出来。数学上,移动平均可视为一种卷积。
简单移动平均
简单移动平均(Simple moving average, SMA)是之前n个数值的未作加权算术平均。例如,收市价的10日简单移动平均指之前10日收市价的平均数。设收市价为p1至pn,则方程式为:
当计算连续的数值,一个新的数值加入,同时一个旧数值剔出,所以无需每次都重新逐个数值加起来:
在技术分析中,有几个n的数值较为普遍,如10日、40日、200日,视乎分析时期长短而定。投资者冀从移动平均线的图表中分辨出支持位或阻力位。
加权移动平均
加权移动平均(Weighted moving average, WMA)指计算平均时个别数据乘以不同数值,在技术分析中,n日WMA的最近期一个数值乘以n、次近的乘以n-1,如此类推,一直到0:
WMA,N=15
由于WMAM + 1与WMAM的分子相差
,假设
为总和M:
总和M+1 = 总和M + pM + 1 − pM − n + 1
分子M+1 = NM + 1 = 分子M + npM + 1 − 总和M
留意分母为三角形数,方程式为
右图显示出加权是随日子远离而递减,直至递减至零。
指数移动平均
EMA,N=15
指数移动平均(Exponential Moving Average, EMA或EWMA)是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。右图是一例子。
加权的程度以常数α决定,α数值介乎0至1。α也可用N来代表:
,所以,N=19代表α=0.1。
设时间t的数值为Yt,而时间t的EMA则为St,计算时间t≥2是方程式为:
设p=昨日(t0)价格,今日(t1)EMA的方程式为:
将EMAt0分拆开来如下:
理论上这是一个无穷级数,但由于1-α少于1,各项的数值会越来越细,可以被忽略。分母方面,若有足够多项,则其数值趋向 1/α。
假设k项及以后的项被忽略,即
,重写后可得
,相当于
。所以,若要包含99.9%的加权,解方程
即可得出k。由于当N不断增加,
将趋向
,简化后k大约等于
。
其他加权
有时计算移动平均时会加入其他变量,例如,交易量加权会加入交易量的因素。
java 移动平均_EWMA之——EWMA指数加权移动平均模型的Java实现相关推荐
- java判断均线_EWMA:EWMA指数加权移动平均模型的Java实现
具体代码如下: package com.lyz.storm.ewma; import java.io.Serializable; /** * 实现指数移动平均值计算 * 实现中使用了流式风格的buil ...
- EWMA之——EWMA指数加权移动平均模型的Java实现
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79141435 具体代码如下: package com.lyz.storm.ewma ...
- EWMA 指数加权移动平均 模型
Exponentially Weighted Moving Average(EWMA)指数加权移动平均是一种常用的序列数据处理方式,如下: 在时间 t, 根据实际的观测值(或量测值)我们可以求取 EW ...
- EWMA 指数加权移动平均
EWMA(Exponentially Weighted Moving Average)指数加权移动平均,是一种常用的序列数据处理方式. 在t时刻,根据实际的观测值可以求取EWMA(t):EWMA(t) ...
- EWMA(Exponentially Weighted Moving Average)指数加权移动平均
原博:http://blog.csdn.net/sony_zhang/article/details/7256646 EWMA(Exponentially Weighted Moving Averag ...
- 神经网络基础--指数加权移动平均ewma
因为神经网络中的常用优化算法都会涉及到指数加权移动平均(exponential weighted moving average, ewma:也可称为exponential moving average ...
- Python 金融量化 均线系统交易策略专题(简单移动平均,加权移动平均,指数加权移动平均,异同移动平均MACD等解读与绘图)
捕捉趋势最普遍的方法为移动平均线,根据求平均的方式不同,移动平均数又可分为简单移动平均数(Simple Moving Average, SMA),加权移动平均数(Weighted Moving Ave ...
- Matlab正态分布、历史模拟法、加权移动平均线 EWMA估计风险价值VaR和回测标准普尔指数 SP500时间序列...
原文链接:http://tecdat.cn/?p=24480 此示例说明如何使用三种方法估计风险价值 (VaR) 并执行 VaR 回测分析.这三种方法是:(点击文末"阅读原文"获取 ...
- 量化均线策略-简单移动平均数、指数加权移动平均数、双均线交叉和异同移动平均线(MACD)...
概述 根据求平均的方式不同,可以有简单移动平均数( Simple moving Average,SMA).加权移动平均数( Weighted Moving Average,WMA)和指数移动平均数(E ...
最新文章
- 今日 Paper | 多人姿势估计;对话框语义分析;无监督语义分析;自然语言处理工具包等
- JS break语句和continue语句
- 常见python面试题总结
- OpenCV形态学变换函数morphologyEx()顶帽运算的使用
- Utils.toDip()的用法
- web百度地图 地址解析获取百度地理坐标
- PlateSpin 完全复制由于LVM没有可用空闲空间导致失败
- Python(9):函数
- HOW TO:构造Java类
- c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)
- WordPress 查询数据库 操作数据库
- Cookie禁用了Session还可以用吗?
- 让AI自动调参,才是百度无人车的进化方式:适应环境全靠自己 | 论文
- UNIX环境高级编程之第7章:进程环境
- 关于Ext checkboxfiled 获取值为 on的解决办法
- ce游戏逆向修改之扫雷
- 计算机网络第五章课后答案第七版(谢希仁著)
- 【刷题】数学知识——博弈论:移棋子游戏
- Pytorch中pack_padded_sequence和pad_packed_sequence的理解
- linux 文本方式怎么安装,Linux文本方式安装系统