ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2388|回复: 8

[求助] 用vba实现EMA函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-16 20:16 | 显示全部楼层 |阅读模式
本帖最后由 buciyuan 于 2020-3-17 11:42 编辑

在网上搜索到:用VBA实现的EMA函数,但不知道怎么用,请教各位大神

CYC是表示取第周期的值, N是EMA函数里的N

Function EMA3(Formula,CYC,N)
    Set History=Formula.ParentGrid.GetHistoryData()
Y=History.Close(0)
For i=1 To CYC
  Y=(2*History.Close(i)+(N-1)*Y)/(N+1)
Next
Ema3=Y
End Function


如果创建一个自定义函数EMA2

Function EMA2(Formula,N)
    EMA2 = EMA3(formula,formula.indexdata,n)
End Function


公式里这些调用测试

aa:ema(close,30);
bb:ema2(30);


与系统EMA结果完全一致


计算:有一组数据(收盘价为):1,2,3,4,5,6,7,求其EMA(c,5)
解答:对应上面数据,X1,X2,X3,X4,X5分别对应3、4、5、6、7
则EMA(c,5)=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1=(5*X5+4*X4+3*X3+2*X2+1*X1)/15
=5.67
而,MA(c,5)=(3+4+5+6+7)/5=5
理解公式算法-EMA与MA(理解了公式算法,才能更好的应用公式)
MA和EMA的数学表达式:
1、MA(X,N),求X的N日移动平均值。算法是:
(X1+X2+X3+…..+Xn)/N
例如:MA(C,20)表示20日的平均收盘价。C表示CLOSE。
2、EMA(X,N)求X的N日指数平滑移动平均。算法是:
若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。
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=3/6*X3+2/6*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)=4/10*X4+3/10*X3+2/10*X2+1/10*X1
=2/5*X4+3/10*X3+3/15*X2+3/30*X1
如果N=5,则EMA(X,5)=2/(5+1)*X5+(5-1)/(5+1)(2/5*X4+3/10*X3+3/15*X2+3/30*X1)
=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1
…………循环下去吧:)

EMA(X,6)=6/21*X6+5/21*X5+4/21*X4+3/21*X3+2/21*1/21X1
注意到上面我标记的颜色部分,应该发现一个规律:即任何时候系数之和恒为1(如果X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N).),但系数该如何确定呢?这个你还是自己观察一下吧(提示,系数的分母是各个系数分子之和,而系数的个数就是EMA(X,N)中的N,还有一个需要注意的就是系数的分子和系数后参数的下标是一致的)


EMA函数验证.zip

15.14 KB, 下载次数: 44

TA的精华主题

TA的得分主题

发表于 2020-3-17 06:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
新建一个模块,代码粘贴进去 EMA2和EMA3就是公式了

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 09:03 | 显示全部楼层
wangweihebtu 发表于 2020-3-17 06:07
新建一个模块,代码粘贴进去 EMA2和EMA3就是公式了

谢谢大神指点,我的意思是怎么用这个公式,能进一点提供帮助吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 10:51 | 显示全部楼层
=ema3(b1:b30,10);提示错误,请教各位大神,指点一二,谢谢!

TA的精华主题

TA的得分主题

发表于 2020-3-17 11:08 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 11:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
计算:有一组数据(收盘价为):1,2,3,4,5,6,7,求其EMA(c,5)
解答:对应上面数据,X1,X2,X3,X4,X5分别对应3、4、5、6、7
则EMA(c,5)=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1=(5*X5+4*X4+3*X3+2*X2+1*X1)/15
=5.67
而,MA(c,5)=(3+4+5+6+7)/5=5
理解公式算法-EMA与MA(理解了公式算法,才能更好的应用公式)
MA和EMA的数学表达式:
1、MA(X,N),求X的N日移动平均值。算法是:
(X1+X2+X3+…..+Xn)/N
例如:MA(C,20)表示20日的平均收盘价。C表示CLOSE。
2、EMA(X,N)求X的N日指数平滑移动平均。算法是:
若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。
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=3/6*X3+2/6*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)=4/10*X4+3/10*X3+2/10*X2+1/10*X1
=2/5*X4+3/10*X3+3/15*X2+3/30*X1
如果N=5,则EMA(X,5)=2/(5+1)*X5+(5-1)/(5+1)(2/5*X4+3/10*X3+3/15*X2+3/30*X1)
=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1
…………循环下去吧:)
EMA(X,6)=6/21*X6+5/21*X5+4/21*X4+3/21*X3+2/21*1/21X1
注意到上面我标记的颜色部分,应该发现一个规律:即任何时候系数之和恒为1(如果X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N).),但系数该如何确定呢?这个你还是自己观察一下吧(提示,系数的分母是各个系数分子之和,而系数的个数就是EMA(X,N)中的N,还有一个需要注意的就是系数的分子和系数后参数的下标是一致的)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 11:41 | 显示全部楼层
sj15627581616 发表于 2020-3-17 11:08
EMA是什么东东,哈哈,不懂,说下逻辑关系

计算:有一组数据(收盘价为):1,2,3,4,5,6,7,求其EMA(c,5)
解答:对应上面数据,X1,X2,X3,X4,X5分别对应3、4、5、6、7
则EMA(c,5)=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1=(5*X5+4*X4+3*X3+2*X2+1*X1)/15
=5.67
而,MA(c,5)=(3+4+5+6+7)/5=5
理解公式算法-EMA与MA(理解了公式算法,才能更好的应用公式)
MA和EMA的数学表达式:
1、MA(X,N),求X的N日移动平均值。算法是:
(X1+X2+X3+…..+Xn)/N
例如:MA(C,20)表示20日的平均收盘价。C表示CLOSE。
2、EMA(X,N)求X的N日指数平滑移动平均。算法是:
若Y=EMA(X,N),则Y=[2*X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。
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=3/6*X3+2/6*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)=4/10*X4+3/10*X3+2/10*X2+1/10*X1
=2/5*X4+3/10*X3+3/15*X2+3/30*X1
如果N=5,则EMA(X,5)=2/(5+1)*X5+(5-1)/(5+1)(2/5*X4+3/10*X3+3/15*X2+3/30*X1)
=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1=5/15*X5+4/15*X4+3/15*X3+2/15*X2+1/15*X1
…………循环下去吧:)
EMA(X,6)=6/21*X6+5/21*X5+4/21*X4+3/21*X3+2/21*1/21X1
注意到上面我标记的颜色部分,应该发现一个规律:即任何时候系数之和恒为1(如果X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N).),但系数该如何确定呢?这个你还是自己观察一下吧(提示,系数的分母是各个系数分子之和,而系数的个数就是EMA(X,N)中的N,还有一个需要注意的就是系数的分子和系数后参数的下标是一致的)

TA的精华主题

TA的得分主题

发表于 2020-3-17 20:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-15 16:00 | 显示全部楼层
要计算26日 EMA,就得先知道26个系数哈

然后加权平均
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 09:13 , Processed in 0.052299 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表