鼎元C++量化程式码指标与函数模块系列之【指数移动平均(Exponential Moving Average,ema)数组计算方法及调用方法】
- UID
- 2
- 积分
- 2892307
- 威望
- 1396185 布
- 龙e币
- 1496122 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
鼎元C++量化程式码指标与函数模块系列之【指数移动平均(Exponential Moving Average,ema)数组计算方法及调用方法】
使用场景:
1、ema只是一个中间变量,所以需要用数组的形式计算。
第一部分:头文件声明变量:- vector<double>ema(vector<double>pc, int num);//ema计算返回数组vector形式指数移动平均
复制代码 第二部分:源文件公式区域计算核心公式- ////ema计算返回数组vector形式指数移动平均
- vector<double>test::ema(vector<double>pc, int num)
- {
- vector<double>ema;
- double emavector = 0;
- int i = 0;
- for (int it = 0; it < pc.size(); it++)
- {
- if (i < num)
- {
- emavector = (emavector + pc[it]) / (i+1);
- i++;
- ema.push_back(emavector);
- }
- else
- {
- emavector = (2 * pc[it] + (num-1) * emavector) / (num+1);//ema均线计算公式
- ema.push_back(emavector);
- }
- }
- return ema;
- }
复制代码 第三部分:声明中间变量名称:- vector<double>pc;//priceclose,pc简称
- vector<double>emashort, emalong;
复制代码 第四部分:源文件数据处理与调用- RsqBar(sPeriod, sInst);
- map<string, TKVALUE>::iterator it;
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++)
- {
- pc.push_back(it->second.dClose); //将收盘价放入pc容器vector
- }
- emashort = ema(pc,12); //调用获得数组形式的新变量容器
- emalong = ema(pc,26); //调用获得数组形式的新变量容器
- InsertLog("ema1均线值为: " + to_string(emashort[emashort.size() - 1])); //将新变量最新值输出到日志
- InsertLog("dea均线值为: " + to_string(emalong[emalong.size() - 1]));
复制代码 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2892307
- 威望
- 1396185 布
- 龙e币
- 1496122 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
数组形式的ema均线使用场景很多,而且多为中阐传递数据变量存在,在下一节我们将演示设计macd指标,此即为ema数组形式使用范例。 |
|
|
|
|
|
|