鼎元C++量化程式码指标与函数模块系列之【KDJ指标计算方法及调用方法】返回数组形式
  
- UID
- 2
- 积分
- 2948830
- 威望
- 1424452 布
- 龙e币
- 1524378 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-5-1

|
鼎元C++量化程式码指标与函数模块系列之【KDJ指标计算方法及调用方法】返回数组形式
1、源文件主程式模块源码- //主程序区计算KDJ
- vector<double>highs, lows, highesthigh, lowestlow; //声明四个变量容器,分别存储当根bar的最高价、最低价及period周期的最高价和最低价
- int period = 9;//声明整数变量KDJ的周期9
- vector<double>RSV;//声明未成熟随机值
- vector<double> K, D, J;//声明KDJ的三个容器变量
- RsqBar(sPeriod, sInst);//调用数据
- //将bar数据的收盘价close,最高价,最低价分别存入pc,highs,lows三个容器变量
- map<string, TKVALUE >::iterator it;
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); ++it)
- {
- highs.push_back(it->second.dHigh);//将每日的high存入highs容器
- lows.push_back(it->second.dLow);//将每日的low存入lows容器
- highesthigh.push_back(highestseries(highs, period));//将上方的highs,lows容器变量的period周期最高,低值存入highesthigh和lowestlow两个容器变量
- lowestlow.push_back(lowestseries(lows, period));
- RSV.push_back(100 * (it->second.dClose - lowestseries(lows, period)) / (highestseries(highs, period) - lowestseries(lows, period)));//计算RSV公式
- }
- K = smaseries(RSV,3,1);
- D = smaseries(K,3,1);
- for (size_t i = 0; i < K.size(); i++)
- {
- J.push_back(3*K[i] - 2*D[i]);//计算J值
- }
- 调用方法:
- [code]
- //输出KDJ的三个变量数值至日志面板
- InsertLog("最新Kvalue " + to_string(K[K.size() - 1]) + "最新Dvalue " + to_string(D[D.size() - 1]) + "最新Jvalue " + to_string(J[J.size() - 1]));
复制代码 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2948830
- 威望
- 1424452 布
- 龙e币
- 1524378 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-5-1

|
新增一字板时的RSV分母为零时的尴尬:- //主程序区计算KDJ
- vector<double>highs, lows, highesthigh, lowestlow; //声明四个变量容器,分别存储当根bar的最高价、最低价及period周期的最高价和最低价
- int period = 9;//声明整数变量KDJ的周期9
- vector<double>RSV;//声明未成熟随机值
- vector<double> K, D, J;//声明KDJ的三个容器变量
- RsqBar(sPeriod, sInst);//调用数据
- //将bar数据的收盘价close,最高价,最低价分别存入pc,highs,lows三个容器变量
- map<string, TKVALUE >::iterator it;
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); ++it)
- {
- highs.push_back(it->second.dHigh);//将每日的high存入highs容器
- lows.push_back(it->second.dLow);//将每日的low存入lows容器
- highesthigh.push_back(highestseries(highs, period));//将上方的highs,lows容器变量的period周期最高,低值存入highesthigh和lowestlow两个容器变量
- lowestlow.push_back(lowestseries(lows, period));
- if (highestseries(highs, period) - lowestseries(lows, period) == 0)
- {
- RSV.push_back(int(50));
- }
- else
- {
- RSV.push_back(100 * (it->second.dClose - lowestseries(lows, period)) / (highestseries(highs, period) - lowestseries(lows, period)));//计算RSV公式
- }
- }
- K = smaseries(RSV,3,1);
- D = smaseries(K,3,1);
- for (size_t i = 0; i < K.size(); i++)
- {
- J.push_back(3*K[i] - 2*D[i]);//计算J值
- }
- //输出KDJ的三个变量数值至日志面板
- InsertLog("最新Kvalue " + to_string(K[K.size() - 1]) + "最新Dvalue " + to_string(D[D.size() - 1]) + "最新Jvalue " + to_string(J[J.size() - 1]));
复制代码 |
|
|
|
|
|
|