鼎元C++量化程式码指标与函数模块系列之【指数移动平均(Exponential Moving Average,ema)计算方法及调用方法】
- UID
- 2
- 积分
- 2892307
- 威望
- 1396185 布
- 龙e币
- 1496122 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
鼎元C++量化程式码指标与函数模块系列之【指数移动平均(Exponential Moving Average,ema)计算方法及调用方法】
第一部分、头文件声明变量:- double xaverage(string period, string inst, int num);//计算NUM周期指标移动平均(Exponential Moving Average,ema)值
复制代码 第二部分、源文件公式计算函数- //计算NUM周期指数移动平均(Exponential Moving Average,ema)值
- double test::xaverage(string period, string inst, int num)
- {
- double n = 0;
- int ema = 0;
- if (mapK[period][inst].size() < num) return 0; //如果数据不够用就返回0;
- map<string, TKVALUE >::iterator it;
- for (it = mapK[period][inst].begin(); it != mapK[period][inst].end(); ++it)
- {
- if (n < num)
- {
- ema = (ema + it->second.dClose) / (n + 1);
- n++;
- }
- else
- {
- ema = (2 * it->second.dClose + (n - 1) * ema) / (n + 1); //或 ema = it->second.dClose * (1/n+1) + ema * (n-1)/(n+1) 经典格式: ema = a*close + (1-a)*close[1]
- }
- }
- return ema;
- }
复制代码 第三部分、在初始参数区域设计length的参数- //Name 参数名, Value 默认值, Explain 参数说明, tend 表示一个参数结束
- t.Name = "指标周期"; t.Value = "5"; t.Explain = "均线的周期参数"; tend(t);
复制代码 第四部分、在onrun中调用到参数并赋值给一个变量length- //交易系统参数变量传递开始*******************************************************************************************************
- num = 0;
- jg = 5;
- length = atoi(parm["指标周期"].Value.c_str());
- //交易系统参数变量传递结束*******************************************************************************************************
复制代码 第五部分、申请bar数据调用指令(只需要调用一次申请就行)第六部分、调用公式获取变量值- xaverage(sPeriod, sInst, length);
复制代码 第七部分、如果想让它在每一个bar开始时都运行一次,就把它加到”OnBarOpen(TKVALUE t)“中。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|