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

|
鼎元C++量化程式码指标与函数模块系列之【自适应指数移动平均线(Adaptive Exponential Moving Average,AEMA )的计算方法及调用方法】最终版!
主要有两个版本,一个是vector数组版本,二是直接调用数据版本
vector容器返回变量版本:
第一部分:源文件核心策略程式码- //***************************aema计算模块********************************//
- //变量声明
- int key = 0;
- double j = length + 1;
- double mltp1 = 2 / j;//权重系数
- double mltp2 = 0;
- double rate = 0;
- double aema1 = 0;
- double aema2 = 0;
- double value2 = -99999;
- double value3 = 99999;
- double a0 = 0;
- double aa = 0;
- double a1, a2, a3, a4;
- vector<double>aemaseries, highs, lows; //声明vector变量容器
- //开始迭代与遍历(从左向右,编号从0开始至size()-1)
- map<string, TKVALUE>::iterator it;//迭代
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++) //遍历
- {
- highs.push_back(it->second.dHigh);//将最高价装入highs容器中
- lows.push_back(it->second.dLow); //将最低价装入lows容器中
- pc.push_back(it->second.dClose); //将收盘价装入容器pc中
- a0 = it->second.dClose; //将最新收盘价赋值给a0
- if (key < length)
- {
- aema1 = aema1 + a0;//收盘价总和
- aema2 = aema1 / length; //求length周期的平均数
- aemaseries.push_back(aema2); // 将平均值装入vector中
- key++;
- }
- else
- {
- for (int i = 0; i < length; i++) //将近10个周期的bar最高值装入vector
- {
- //遍历最近10个最高价找到最大的那个值放入value2,将highs容器数值从右第一个"highs[key-1]"至最左边"highs[(key-1)-10]"跟value2比大的放入value2
- value2 = max2(value2, highs[(key - length) + i]);
- //遍历最近10个最低价找到最小的那个值放入value1,将lows容器数值从右第一个"lows[key-1]"至最左边"lows[(key-1)-10]"跟value1比小的放入value1
- value3 = min2(value3, lows[(key - length) + i]);
- }
- a1 = (a0 - value3); //最新收盘价减10周期最低价
- a2 = (value2 - a0); //10周期最高价减最新收盘价
- a3 = value2 - value3; //10周期最高价减10周期最低价
- a4 = abs(a1 - a2); // 取a1-a2绝对值
- if (a3 != 0)mltp2 = a4 / a3;//求mltp2值
- rate = (1 + mltp2) * mltp1; //求rate值
- aema2 = aema2 + rate * (a0 - aema2);
- aemaseries.push_back(aema2);
- key++;
- }
- }
- //***************************aema计算模块********************************//
复制代码- InsertLog("最新aemaseries值:" + to_string(aemaseries[aemaseries.size() - 1]));
复制代码 这样的形式调用,因为这个AEMA是数组形式。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945117
- 威望
- 1422595 布
- 龙e币
- 1522522 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
Function调用形式:返回数值形式:
第一部分:头文件声明变量- double aema(string period, string inst, int num, int pds);//自适应移动平均线(Adaptive Exponential Moving Average, AEMA)
复制代码 第二部分、源文件公式模块区增加aema模块- //自适应移动平均线(Adaptive Exponential Moving Average,AEMA)返回数值模式
- double test::aema(string period, string inst, int num, int pds)//自适应移动平均线(Adaptive Exponential Moving Average, AEMA)
- {
- //批量声明计算参数
- int key = 0;
- double j = num + 1;
- double mltp1 = 2 / j;//权重系数
- double mltp2 = 0;
- double rate = 0;
- double aema1 = 0;
- double aema2 = 0;
- double value2 = -99999;
- double value3 = 99999;
- vector<double>aemavector, hs, ls; //声明vector变量容器
- double a0, a1, a2, a3, a4;//声明计算变量
- map<string, TKVALUE>::iterator it;
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++)
- {
- hs.push_back(it->second.dHigh);//将最高价装入vector中
- ls.push_back(it->second.dLow); //将最低价装入vector中
- a0 = it->second.dClose;
- if (key < num)
- {
- aema1 = aema1 + a0;//收盘价总和
- aema2 = aema1 / length;
- key++;
- }
- else
- {
- for (int i = 0; i < pds; i++) //将近10个周期的bar最高值装入vector
- {
- value2 = max2(value2, hs[key - 1 - i]); //遍历最近10个最高价找到最大的那个值放入value2
- value3 = min2(value3, ls[key - 1 - i]);
- }
- a1 = (a0 - value3);
- a2 = (value2 - a0);
- a3 = value2 - value3;
- a4 = abs(a1 - a2);
- if (a3 != 0)mltp2 = a4 / a3;
- rate = (1 + mltp2) * mltp1;
- aema2 = aema2 + rate * (it->second.dClose - aema2);
- key++;
- }
- }
- return aema2;
- }
复制代码 第三部分,调用办法- aema(sPeriod,sInst,length,length);
复制代码 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945117
- 威望
- 1422595 布
- 龙e币
- 1522522 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
自适应移动平均线(AEMA)指标研究【原文+程式码】
本帖隐藏的内容需要回复才可以浏览 |
|
|
|
|
|
|

- UID
- 23600
- 积分
- 130
- 威望
- 65 布
- 龙e币
- 65 刀
- 在线时间
- 3 小时
- 注册时间
- 2025-2-21
- 最后登录
- 2025-3-6
|
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945117
- 威望
- 1422595 布
- 龙e币
- 1522522 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
今天进行了最后的修正与完善,从而形成最终版,以后有修正我会第一时间在这里进行公布。 |
|
|
|
|
|
|