鼎元C++量化程式码指标与函数模块系列之【指数平滑移动平均函数(SMA(X,m1,m2))计算方法及调用方法】
  
- UID
- 2
- 积分
- 2945117
- 威望
- 1422595 布
- 龙e币
- 1522522 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
鼎元C++量化程式码指标与函数模块系列之【指数平滑移动平均函数(SMA(X,m1,m2))计算方法及调用方法】
说明:
此sma非简单移动平均,注意里面有三个参数,sma(X,M1,M2)中X是要求值的变量,m1是周期参数,m2是权重参数,即X的权重是多少。以KDJ(9,3,3)为例,在计算K,D是他们的周期是3,权重是1. 简单说Kt = Kt-1 *2/3 + RSV/3;
这是一定要能理解清楚对行,要不没法处理。
下面附:
1、头文件声明变量:- vector<double>smaseries(vector<double>pc, int num, int num2);//指数平滑移动平均函数(SMA,sma(x,N,M),即x变量的N周期平均,最新值权重为M,即SMAt = SMAt-1 * (N-M)/N + x*M/N )返回数组形式
复制代码 2、源文件test.cpp写核心计算公式,我是一般专门放在function.cpp中统一存放的。- //指数平滑移动平均函数(SMA,sma(x,N,M),即x变量的N周期平均,最新值权重为M,即SMAt = SMAt-1 * (N-M)/N + x*M/N )返回数组形式
- vector<double> test::smaseries(vector<double> pc, int num,int num2)
- {
- vector<double>smav; //声明一个设计变量容器
- for (int i = 0; i < pc.size(); i++)
- {
- if (i < num)
- {
- smav.push_back(pc[i]);
- }
- else
- {
- smav.push_back( smav[i-1]* (num - num2) /num + pc[i]/num);
- }
- }
- return smav;
- }
复制代码 解读:这里我们会发现,sma一般的使用场景都是数组的形式,多是做为中间变量使用的。不过我为了以后的方便,特意改成一个有辨识度的名称smaseries, 大家若是习惯国内的写法,可以写成sma也是可以的。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|