鼎元C++期货量化/程序化教程【随机指标(Stochastic Oscillator,KDJ)的计算方法及调用方法】
- UID
- 2
- 积分
- 2903567
- 威望
- 1401815 布
- 龙e币
- 1501752 刀
- 在线时间
- 13440 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-1-30
|
鼎元C++期货量化/程序化教程【随机指标(Stochastic Oscillator,KDJ)的计算方法及调用方法】
第一部分、简介与计算原理
KDJ指标的中文名称又叫随机指标,最早起源于期货市场,由乔治·莱恩(George Lane)首创。随机指标KDJ最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的。不过KD指标只判断股票的超买超卖的现象,在KDJ指标中则融合了移动平均线速度上的观念,形成比较准确的买卖信号依据。在实践中,K线与D线配合J线组成KDJ指标来使用。KDJ指标在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时也融合了动量观念、强弱指标和移动平均线的一些优点。因此,能够比较迅速、快捷、直观地研判行情,被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。
|
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2903567
- 威望
- 1401815 布
- 龙e币
- 1501752 刀
- 在线时间
- 13440 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-1-30
|
第一部分:头文件:- double hhv(vector<double> pc, int num);
- double llv(vector<double> pc, int num);
复制代码- vector<double>highs, lows,rsv, KValue, DValue, JValue,highesthigh,lowestlow;
- int period;
- double smoothingFactor;
- vector<double> K, D, J ;
复制代码 ode]
第二部分:源文件主程序部分:- double k1 = 50, d1 = 50, j1 = 0, r1 = 0;
- RsqBar(sPeriod, sInst);
- map<string, TKVALUE >::iterator it;
- for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); ++it)
- {
- pc.push_back(it->second.dClose);
- if (pc.size() <= 9)
- {
- r1 = 0;
- k1 = 50;
- d1 = 50;
- j1 = 50;
- }
- else
- {
- rsv = (it->second.dClose - llv(pc,9))/(hhv(pc,9) - llv(pc,9)) * 100;
- k1 = 2 / 3 * k1 + rsv / 3;
- d1 = 2 / 3 * d1 + rsv / 3;
- j1 = 3 * d1 - 2 * rsv;
- }
- KValue.push_back(k1);
- DValue.push_back(d1);
- JValue.push_back(j1);
- }
- for (int i = 1; i <= 9; i++)
- {
- InsertLog("Jvalue" + to_string(JValue[JValue.size() - i]));
- }
- InsertLog("最新Kvalue " + to_string(KValue[KValue.size() - 1]) + "最新Dvalue " + to_string(DValue[DValue.size() - 1]) + "最新Jvalue " + to_string(JValue[JValue.size() - 1]));
复制代码 第三部分:指标区主要核心部分:- ////////////////////////////////////////////////////////////////////////////////////////////////////////////KDJ公式计算
- double test::hhv(vector<double> pc, int num)
- {
- double d = 0;
- for (int i = pc.size()-1; i >= pc.size() - num; i--)
- {
- d = max2(d, pc[i]);
- }
- return d;
- }
- double test::llv(vector<double> pc, int num)
- {
- double d1 = 999999;
- for (int i = pc.size()-1; i >= pc.size() - num; i--)
- {
- d1 = min2(d1, pc[i]);
- }
- return d1;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////KDJ公式计算
复制代码 |
|
|
|
|
|
|
- UID
- 2
- 积分
- 2903567
- 威望
- 1401815 布
- 龙e币
- 1501752 刀
- 在线时间
- 13440 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-1-30
|
这里面的难点是计算rsv的部分,这个指标还是有些问题我没有搞明白,大家可以先放一下,我弄好了会在这里做说明。 |
|
|
|
|
|
|