EMA表示的是指数平滑移动平均,其函数的定义为Y=EMA(X,N) 则Y=[2*X+(N-1)*Y']/(N+1), 其中Y'表示上一周期Y值。

求X的N日指数平滑移动平均,它真正的公式表达是:当日指数平均值=平滑系数*(当日指数值-昨日指数平均值)+昨日指数平均值;平滑系数=2/(周期单位+1)

EMA引用函数在计算机上使用递归算法很容易实现,但不容易理解。以下,列举分析说明EMA函数。

X是变量,每天的X值都不同,从远到近地标记,它们分别记为X1,X2,X3,….,Xn

当N=1,则EMA(X,1)=[2*X1+(1-1)*Y’]/(1+1)=X1

当N=2,则EMA(X,2)=[2*X2+(2-1)*Y’]/(2+1)=(2/3)*X2+(1/3)X1

当N=3,则EMA(X,3)=[2*X3+(3-1)*Y’]/(3+1)=[2*X3+2*((2/3)*X2+(1/3)*X1)]/4=(1/2)*X3+(1/3)*X2+(1/6)*X1

当N=4,则EMA(X,4)=[2*X4+(4-1)*Y’]/(4+1)=2/5*X4+3/5*((1/2)*X3+(1/3)*X2+(1/6)*X1)=2/5*X4+3/10*X3+1/5*X2+1/10*X1

当N=5,则EMA(X,5)= (1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1

当N=6,则EMA(X,6)=(2/7)*X6+(5/21)*X5+(4/21)*X4+(3/21)*X3+(2/21)*X2+(1/21)*X1

当N=7,则EMA(X,7)=(2/8)*X7+(6/28)*X6+(5/28)*X5+(4/28)*X4+(3/28)*X3+(2/28)*X2+(1/28)*X1

当N=8,则EMA(X,8)=(2/9)*X8+(36/36)*X36+(6/36)*X6+(5/36)*X5+(4/36)*X4+(3/36)*X3+(2/36)*X2+(1/36)*X1

当N=9,则EMA(X,9)=(2/10)*X9+(8/45)*X8+(45/45)*X45+(6/45)*X6+(5/45)*X5+(4/45)*X4+(3/45)*X3+(2/45)*X2+(1/45)*X1

当N=10,则EMA(X,10)=(2/11)*X10+(9/55)*X9+(8/55)*X8+(55/55)*X55+(6/55)*X6+(5/55)*X5+(4/55)*X4+(3/55)*X3+(2/55)*X2+(1/55)*X1

当N=11,则EMA(X,11)=(2/12)*X11+(10/66)*X10+(9/66)*X9+(8/66)*X8+(7/66)*X7+(6/66)*X6+(5/66)*X5+(4/66)*X4+(3/66)*X3+(2/66)*X2+(1/66)*X1

当N=12,则EMA(X,12)=(2/13)*X12+(11/78)*X11+(10/78)*X10+(9/78)*X9+(8/78)*X8+(7/78)*X7+(6/78)*X6+(5/78)*X5+(4/78)*X4+(3/78)*X3+(2/78)*X2+(1/78)*X1

当N=13,则EMA(X,13)=(2/14)*X13+(12/91)*X12+(11/91)*X11+(10/91)*X10+(9/91)*X9+(8/91)*X8+(7/91)*X7+(6/91)*X6+(5/91)*X5+(4/91)*X4+(3/91)*X3+(2/91)*X2+(1/91)*X1

其他依次循环可得。

其中,系数分母是N*(N+1)/2。而且任何时候系数之和恒为1。当X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N)。

以上公式可以直接作为计算公式。

从以上的列举分析中,我们可以看到时间周期越近的X值它的权重越大,说明EMA函数对近期的X值加强了权重比,更能及时反映近期X值的波动情况。 所以EMA比MA更具参考价值,而EMA也不容易出现死叉和金叉,所以一旦出现要立即作出反映!对周线处理,EMA就更加稳定了。

像EMA它的定义是 Y=[2*X+(N-1)*Y']/(N+1) Y'是上一个周期的计算值。这样的函数是一个递归函数,不断的调用前一个周期的值来参加计算的。我们为了加快计算的速度,没有采用递归的方式。

/// <summary>
    /// Contains calculation results for EMA indicator
    /// </summary>
    public class EMAResult
    {
        public List<double> Values { get; set; }

/// <summary>
        /// Represents the index of input signal at which the indicator starts
        /// </summary>
        public int StartIndexOffset { get; set; }
    }

-------------------------------------------------------------------------------------------------------------------------------

/// <summary>
        /// Calculates Exponential Moving Average (EMA) indicator
        /// </summary>
        /// <param name="input">Input signal</param>
        /// <param name="period">Number of periods</param>
        /// <returns>Object containing operation results</returns>
        public static EMAResult EMA(IEnumerable<double> input, int period)
        {
            var returnValues = new List<double>();

double multiplier = (2.0 / (period + 1));
            double initialSMA = input.Take(period).Average();

returnValues.Add(initialSMA);

var copyInputValues = input.ToList();

for (int i = period; i < copyInputValues.Count; i++)
            {
                var resultValue = (copyInputValues[i] - returnValues.Last()) * multiplier + returnValues.Last();

returnValues.Add(resultValue);
            }

var result = new EMAResult()
            {
                Values = returnValues,
                StartIndexOffset = period - 1
            };

return result;
        }

上述实现代码来自 http://technicalanalysis.codeplex.com/

EMA算法的C#实现相关推荐

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

    写在前面的话 本人android开发股线图时基于MpAndroidChart开发的,所以后面用到的算法中CandleEntry, Entry等都是MpAndroidChart的API,均使用java实 ...

  2. java ema算法_全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数

    6. JVM 中的期望计算 EMA 在上面提到的 TLAB 大小设计的时候,我们经常提到期望.这个期望是根据历史数据计算得出的,也就是每次输入采样值,根据历史采样值得出最新的期望值.不仅 TLAB 用 ...

  3. python计算ema_Python第三方库TALIB对RSI的EMA算法,有偿求解答!

    你好,我感觉你这写错了,首先第一步要对close做差分,然后通过这个差分与0的大小关系来进一步计算,我感觉你代码里没有这个判断(我是门外汉,我也不清楚,希望可以帮到你) def rsi(price,p ...

  4. 全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数

    今天,又是干货满满的一天.这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始.由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外 ...

  5. python 均线斜率怎么计算_高频交易算法研发心得--均线算法

    今天来探讨一下常见的均线算法的应用.在各种交易软件中,我们常常可以见到MA指标,EMA指标以及SMA指标. 首先说明SMA的二义性,如果您在百度直接搜索SMA指标,指的是带加权的指数平均值:然而,再去 ...

  6. 深度学习《CNN架构续篇 - 梯度下降的优化》

    骚话一下: 今天是2020年10月2号,继续学习.本文依然是<CNN架构>的延续博文,重点介绍优化的新的梯度下降算法. 一:梯度下降的种类 说到梯度下降的方法,确实是求最优解的比较好的途径 ...

  7. 通过 JFR 与日志深入探索 JVM - TLAB 原理详解

    全系列目录:通过 JFR 与日志深入探索 JVM - 总览篇 什么是 TLAB? TLAB(Thread Local Allocation Buffer)线程本地分配缓存区,这是一个线程专用的内存分配 ...

  8. 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜)

    今天,又是干货满满的一天.这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始.由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外 ...

  9. 模型优化与tensorflow

    模型优化与tensorflow 模型优化方法介绍 神经网络的要求:小.准.快 小:要求网络权重存储空间小 准:准确率高 快:计算量小 目前有四种方法达到这种要求:裁剪,蒸馏,模型结构搜索,量化. 剪裁 ...

最新文章

  1. Js中最常见的异常捕捉 TryCatch
  2. Activemq 安全机制以及稳定性研究
  3. 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)...
  4. bat php 监控网站,bat curl 发送http请求 监控网站
  5. 极端懒惰:使用Spring Boot开发JAX-RS服务
  6. 计算机刚过国家线能调剂到哪些学校,2020考研:刚过国家线好不好调剂?这4个调剂策略!考生要知道...
  7. 几种不同的邮件发送解决方案
  8. 升级 Node.js 版本遇到的 co 和 pm2 问题解析
  9. Atititi 软件界面gui开发之道 attilax著 1. 概览 2 1.1. 编程语言的发展 asmnativevmscriptdsl 2 1.2. Ui的细化html ,css ,
  10. 轴承后缀ce和ca_轴承cc和ca与cde4有什么区别
  11. CAD绘图的基本步骤和重点
  12. Java kafka producer 的常用参数的意义说明及默认值
  13. python打印小票_购物小票——Python字符串格式化练习
  14. 浏览此博客者开年必时来运转,否极泰来
  15. 在图像中找任意曲线记录
  16. 软考中级软件设计师 2009-2022年真题
  17. 天狮集团新零售有什么优势?天狮直销等于天狮新零售?
  18. 数据科学家:为什么我要离职……
  19. https://www.cnblogs.com/dennytao/p/5351868.html 多个界面公用socket
  20. 计算机主机箱前后都有什么不同,机箱前面的USB插口跟后面的有什么不同吗?

热门文章

  1. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发
  3. 浅析AES和RSA加密算法的区别和适用场景
  4. 关于Zookeeper来实现分布式锁的几个问题
  5. Rust LeetCode 练习:929 Unique Email Addresses
  6. expected an indented block
  7. [UVA] 704 Colour Hash
  8. Multiple methods named 'status' found with mismatched result, parameter type or attributes
  9. 使用Event Message 对 Package 进行Troubleshoot
  10. 分享一个 GIFControl 控件