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

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

|
视频中程式码部分:- //在主程序区计算KDJ函数指标
- vector<double>highs, lows, highesthigh, lowestlow;//声明四个变量,分别存储当根bar的最高价,最低价,highest(N),lowest(N)
- int period = 9;//KDJ的周期之一9
- vector<double>RSV;//计算KDJ的未成熟随机值
- vector<double>K, D, J;//声明KDJ的三个变量
- RsqBar(sPeriod, sInst);//申请策略运行面板设置的品种周期数据
- //下面是迭人工和遍历取所需数据
- 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
- highesthigh.push_back(highestseries(highs, period));//将当前bar最高价的前period周期最大的值存入highesthigh容器变量
- lowestlow.push_back(lowestseries(lows, period));//将当前bar最低价的前period周期的最低价存入lowestlow容器变量
- RSV.push_back(100*(it->second.dClose - lowestseries(lows, period)) / (highestseries(highs, period) - lowestseries(lows, period)));//RSV = (close - L(N))/(H(N) - L(N))*100
- }
- K = smaseries(RSV, 3, 1);//计算K值
- D = smaseries(K, 3, 1);//计算D值
- //计算J值
- for (size_t i = 0; i < K.size(); i++)
- {
- J.push_back(3 * K[i] - 2 * D[i]);
- }
- //输出KDJ值
- InsertLog("最新K值: " + to_string(K[K.size() - 1]) + "最新D值: " + to_string(D[D.size() - 1]) + "最新J值: " + to_string(J[J.size() - 1]));
复制代码 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
优化后:- //在主程序区计算KDJ函数指标
- vector<double>highs, lows;//声明四个变量,分别存储当根bar的最高价,最低价,highest(N),lowest(N)
- int period = 9;//KDJ的周期之一9
- vector<double>RSV;//计算KDJ的未成熟随机值
- vector<double>K, D, J;//声明KDJ的三个变量
- RsqBar(sPeriod, sInst);//申请策略运行面板设置的品种周期数据
- //下面是迭人工和遍历取所需数据
- 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
- RSV.push_back(100*(it->second.dClose - lowestseries(lows, period)) / (highestseries(highs, period) - lowestseries(lows, period)));//RSV = (close - L(N))/(H(N) - L(N))*100
- }
- K = smaseries(RSV, 3, 1);//计算K值
- D = smaseries(K, 3, 1);//计算D值
- //计算J值
- for (size_t i = 0; i < K.size(); i++)
- {
- J.push_back(3 * K[i] - 2 * D[i]);
- }
- //输出KDJ值
- InsertLog("最新K值: " + to_string(K[K.size() - 1]) + "最新D值: " + to_string(D[D.size() - 1]) + "最新J值: " + to_string(J[J.size() - 1]));
复制代码 优化掉:- highesthigh.push_back(highestseries(highs, period));//将当前bar最高价的前period周期最大的值存入highesthigh容器变量
- lowestlow.push_back(lowestseries(lows, period));//将当前bar最低价的前period周期的最低价存入lowestlow容器变量
复制代码 因为可以用公式直接计算的。上厕所声明中也可以删除这两个变量的声明。 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
|
|
|
|
|
|