SPL量化 EMA(指数移动平均线)
EMA(Exponential Moving Average) 指数移动平均值是以指数式递减加权的移动平均,它是一种趋势指标,要了解均价趋势快慢的时候,用 EMA 更稳定。显然时间越靠近当今时刻,即 N 越小,它的权重越大,说明 EMA 函数对近期的价格加强了权重比,比 MA 更能及时反映近期价格波动情况。在没有昨日 EMA 的情况下,该日的 EMA 用当日的收盘价代替,一般用第一天的收盘价为 E
EMA(Exponential Moving Average) 指数移动平均值是以指数式递减加权的移动平均,它是一种趋势指标,要了解均价趋势快慢的时候,用 EMA 更稳定。
EMA 的计算方法是一个递归公式。
EMA= 平滑系数 * 当前价格 +(1- 平滑系数)*EMA(N-1)。
N 表示 ema 的周期,有短期、中期、长期。
平滑系数 =2/(N+1)
在没有昨日 EMA 的情况下,该日的 EMA 用当日的收盘价代替,一般用第一天的收盘价为 EMA 的初始值
显然时间越靠近当今时刻,即 N 越小,它的权重越大,说明 EMA 函数对近期的价格加强了权重比,比 MA 更能及时反映近期价格波动情况。
以代码 600000 的股票数据为例,计算 5 日 EMA 值。
| A | |
| 1 | 600000 |
| 2 | 2024-01-01 |
| 3 | 2024-12-31 |
| 4 | =call("adjustprice.splx", "", call("loadkday.splx", A1, A2,A3) ) |
| 5 | 5 |
| 6 | =k=2/(A5+1) |
| 7 | =A4.new(code,tdate,if(#>1,k*close+(1-k)*ema[-1],close):ema) |
A1-A4 读取股票数据
A5 设置移动平均周期 N
A6 计算平滑系数 k
A7 带入递归公式计算 ema

也可以封装成函数,使用时直接调用。
函数代码:
| A | B | |
| 1 | func ema(data,field,N) | >k=2/(N+1) |
| 2 | =data.new(code,tdate,if(#>1,k*${field}+(1-k)*ema_${N}[-1],${field}):ema_${N}) |
此代码比较短,和前面章节的 MA 一样,可以用 func 的形式保存在 index.splx 中。
参数:
| data | 序表,某支股票的日线数据 |
| field | 字符串,字段名如 "close" |
| N | 数字,移动平均周期 |
返回数据集结构:
| code | 股票代码 |
| tdate | 日期 |
| ema_N | N 日 EMA |
例如,调用脚本计算浦发银行 2024 年收盘价的 5 日 EMA,
| A | B | |
| … | … | |
| 4 | =call@f("index.splx") | 登记脚本中的函数 |
| 5 | … | 计算出源数据 |
| 6 | =ema (A5,"close",5) | 调用函数 |
运行效果:

SPL 可以在这里下载:免费下载。使用免费的桌面版就可以了,直接安装即可使用。专业程序员也可以使用这里的开源版,但需要自行配置部署。
SPL 配有系统的教程,这里有面向新手的课程(含视频):SPL程序设计语言 · 乾学院VIP课程 ,乾学院 也有更多学习资料。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)