: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

鼎元C++量化程式码指标与函数模块系列之【自适应指数移动平均线(Adaptive Exponential Moving Average,AEMA )的计算方法及调用方法】最终版!

鼎元C++量化程式码指标与函数模块系列之【自适应指数移动平均线(Adaptive Exponential Moving Average,AEMA )的计算方法及调用方法】最终版!

主要有两个版本,一个是vector数组版本,二是直接调用数据版本

vector容器返回变量版本:

第一部分:源文件核心策略程式码
  1. //***************************aema计算模块********************************//
  2.         //变量声明
  3.         int key = 0;
  4.         double j = length + 1;
  5.         double mltp1 = 2 / j;//权重系数
  6.         double mltp2 = 0;
  7.         double rate = 0;
  8.         double aema1 = 0;
  9.         double aema2 = 0;
  10.         double value2 = -99999;
  11.         double value3 = 99999;
  12.         double a0 = 0;
  13.         double aa = 0;
  14.         double a1, a2, a3, a4;
  15.         vector<double>aemaseries, highs, lows; //声明vector变量容器
  16.         //开始迭代与遍历(从左向右,编号从0开始至size()-1)
  17.         map<string, TKVALUE>::iterator it;//迭代
  18.         for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++) //遍历
  19.         {
  20.                 highs.push_back(it->second.dHigh);//将最高价装入highs容器中
  21.                 lows.push_back(it->second.dLow); //将最低价装入lows容器中
  22.                 pc.push_back(it->second.dClose); //将收盘价装入容器pc中
  23.                 a0 = it->second.dClose; //将最新收盘价赋值给a0

  24.                 if (key < length)
  25.                 {
  26.                         aema1 = aema1 + a0;//收盘价总和
  27.                         aema2 = aema1 / length; //求length周期的平均数
  28.                         aemaseries.push_back(aema2); // 将平均值装入vector中
  29.                         key++;
  30.                 }
  31.                 else
  32.                 {
  33.                         for (int i = 0; i < length; i++) //将近10个周期的bar最高值装入vector
  34.                         {
  35.                                 //遍历最近10个最高价找到最大的那个值放入value2,将highs容器数值从右第一个"highs[key-1]"至最左边"highs[(key-1)-10]"跟value2比大的放入value2
  36.                                 value2 = max2(value2, highs[(key - length) + i]);
  37.                                 //遍历最近10个最低价找到最小的那个值放入value1,将lows容器数值从右第一个"lows[key-1]"至最左边"lows[(key-1)-10]"跟value1比小的放入value1
  38.                                 value3 = min2(value3, lows[(key - length) + i]);
  39.                         }
  40.                         a1 = (a0 - value3); //最新收盘价减10周期最低价
  41.                         a2 = (value2 - a0); //10周期最高价减最新收盘价
  42.                         a3 = value2 - value3; //10周期最高价减10周期最低价
  43.                         a4 = abs(a1 - a2); // 取a1-a2绝对值
  44.                         if (a3 != 0)mltp2 = a4 / a3;//求mltp2值
  45.                         rate = (1 + mltp2) * mltp1; //求rate值
  46.                         aema2 = aema2 + rate * (a0 - aema2);
  47.                         aemaseries.push_back(aema2);
  48.                         key++;
  49.                 }
  50.         }
  51.         //***************************aema计算模块********************************//
复制代码
  1. InsertLog("最新aemaseries值:" + to_string(aemaseries[aemaseries.size() - 1]));
复制代码
这样的形式调用,因为这个AEMA是数组形式。

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

Function调用形式:返回数值形式:

第一部分:头文件声明变量
  1.         double aema(string period, string inst, int num, int pds);//自适应移动平均线(Adaptive Exponential Moving Average, AEMA)
复制代码
第二部分、源文件公式模块区增加aema模块
  1. //自适应移动平均线(Adaptive Exponential Moving Average,AEMA)返回数值模式
  2. double test::aema(string period, string inst, int num, int pds)//自适应移动平均线(Adaptive Exponential Moving Average, AEMA)
  3. {
  4.         //批量声明计算参数
  5.         int key = 0;
  6.         double j = num + 1;
  7.         double mltp1 = 2 / j;//权重系数
  8.         double mltp2 = 0;
  9.         double rate = 0;
  10.         double aema1 = 0;
  11.         double aema2 = 0;
  12.         double value2 = -99999;
  13.         double value3 = 99999;
  14.         vector<double>aemavector, hs, ls; //声明vector变量容器
  15.         double a0, a1, a2, a3, a4;//声明计算变量
  16.         map<string, TKVALUE>::iterator it;
  17.         for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++)
  18.         {
  19.                 hs.push_back(it->second.dHigh);//将最高价装入vector中
  20.                 ls.push_back(it->second.dLow); //将最低价装入vector中
  21.                 a0 = it->second.dClose;
  22.                 if (key < num)
  23.                 {
  24.                         aema1 = aema1 + a0;//收盘价总和
  25.                         aema2 = aema1 / length;
  26.                         key++;
  27.                 }
  28.                 else
  29.                 {
  30.                         for (int i = 0; i < pds; i++) //将近10个周期的bar最高值装入vector
  31.                         {
  32.                                 value2 = max2(value2, hs[key - 1 - i]); //遍历最近10个最高价找到最大的那个值放入value2
  33.                                 value3 = min2(value3, ls[key - 1 - i]);
  34.                         }
  35.                         a1 = (a0 - value3);
  36.                         a2 = (value2 - a0);
  37.                         a3 = value2 - value3;
  38.                         a4 = abs(a1 - a2);
  39.                         if (a3 != 0)mltp2 = a4 / a3;
  40.                         rate = (1 + mltp2) * mltp1;
  41.                         aema2 = aema2 + rate * (it->second.dClose - aema2);
  42.                         key++;
  43.                 }
  44.         }
  45.         return aema2;
  46. }
复制代码
第三部分,调用办法
  1. aema(sPeriod,sInst,length,length);
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

自适应移动平均线(AEMA)指标研究【原文+程式码】

本帖隐藏的内容需要回复才可以浏览
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

学习了,感谢分享!

TOP

今天进行了最后的修正与完善,从而形成最终版,以后有修正我会第一时间在这里进行公布。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表

站长推荐 关闭


鼎元C++程序化软件欢迎试用!

绿色免安装,策略免费下、点击就运行、多品种/策略/账户一键全搞定!小巧简洁、不占空间、不挑配置、38元租云服务器跑一年!


查看