C++程序化/量化学习视频教程系列 第058节:鼎元C++量化之如何使用容器(vector)对bar数据进行高级处理【vector容器使用范例:MACD】
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
C++程序化/量化学习视频教程系列 第058节:鼎元C++量化之如何使用容器(vector)对bar数据进行高级处理【vector容器使用范例:MACD】
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
主程序源码MACD模块;- //设计MACD指标
- //调用主合约bar数据
- RsqBar(sPeriod, sInst);
- //将收盘价存入pc容器
- map<string, TKVALUE>::iterator it;//迭代
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++) //遍历所有K线
- {
- pc.push_back(it->second.dClose);
- }
- vector<double> ema12 = emaseries(pc, 12); //获取12周期 ema均线数组形式值
- vector<double> ema26 = emaseries(pc, 26); //获取26周期 ema均线数组形式值
- vector<double> diff;
- for (size_t i = 0; i < ema12.size(); i++)
- {
- diff.push_back(ema12[i] - ema26[i]); //将ema12 - ema26 值赋给diff,以数组形式
- }
- vector<double> dea = emaseries(diff,9); //dea = xaverage(diff,9) //对diff进行9周期的加权指数平均
- vector<double> macd;
- for (size_t j = 0; j < ema12.size(); j++)
- {
- macd.push_back((diff[j] - dea[j])*2); //将ema12 - ema26 值赋给diff,以数组形式
- }
- //输出MACD的三个数据diff,dea,macd
- InsertLog("diff值为: " + to_string(diff[diff.size() - 1]));
- InsertLog("dea均线值为: " + to_string(dea[dea.size() - 1]));
- InsertLog("MACD值为: " + to_string(macd[macd.size()-1]));
复制代码 使用参考地址:http://www.qhlt.cn/thread-160291-1-1.html; |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
显示效果:
 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
视频中程式码部分:- //主程序化区设计MACD模块
- //调用数据
- RsqBar(sPeriod, sInst);
- //将收盘价存入pc容器
- map<string, TKVALUE>::iterator it;//迭代
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++) //遍历所有K线
- {
- pc.push_back(it->second.dClose);
- }
- //建立两个容器分别存入12周期和26周期指数均线ema的值
- vector<double> ema12 = emaseries(pc, 12);//获取12周期ema均线数组形式
- vector<double> ema26 = emaseries(pc, 26);//获取26周期ema均线数组形式
- vector<double> diff;//声明新容器变量,存入diff指标
- for (size_t i = 0; i < pc.size(); i++)
- {
- diff.push_back(ema12[i] - ema26[i]);//将ema12-ema26值赋给diff,仍然是数组形式
- }
- vector<double> dea = emaseries(diff, 9);//dea = xaverage(diff,9),对difff进行9周期的指数加权移动平均
- vector<double>macd;//声明macd变量容器形式
- for (size_t j = 0; j < diff.size(); j++)
- {
- macd.push_back((diff[j] - dea[j]) * 2);//macd计算方法2倍(diff-dea)
- }
- //输出MACD三个变量diff,dea,macd以供检查
- InsertLog("diff值: " + to_string(diff[diff.size() - 1]));
- InsertLog("dea值: " + to_string(dea[dea.size() - 1]));
- InsertLog("macd值: " + to_string(macd[macd.size() - 1]));
复制代码 |
|
|
|
|
|
|