鼎元C++期货量化/程序化教程【随机指标(Stochastic Oscillator,KDJ)的计算方法及调用方法】
第一部分、简介与计算原理KDJ指标的中文名称又叫随机指标,最早起源于期货市场,由乔治·莱恩(George Lane)首创。随机指标KDJ最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的。不过KD指标只判断股票的超买超卖的现象,在KDJ指标中则融合了移动平均线速度上的观念,形成比较准确的买卖信号依据。在实践中,K线与D线配合J线组成KDJ指标来使用。KDJ指标在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时也融合了动量观念、强弱指标和移动平均线的一些优点。因此,能够比较迅速、快捷、直观地研判行情,被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。
[img]http://p.algo2.net/2024/1218/dc258aeda9b19.png[/img]
[img]http://p.algo2.net/2024/1218/29f6991c57251.png[/img] 第一部分:头文件:[code]
double hhv(vector<double> pc, int num);
double llv(vector<double> pc, int num);
[/code][code]
vector<double>highs, lows,rsv, KValue, DValue, JValue,highesthigh,lowestlow;
int period;
double smoothingFactor;
vector<double> K, D, J ;
[/code]ode]
第二部分:源文件主程序部分:[code]
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]));
[/code]第三部分:指标区主要核心部分:[code]
////////////////////////////////////////////////////////////////////////////////////////////////////////////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公式计算
[/code] 这里面的难点是计算rsv的部分,这个指标还是有些问题我没有搞明白,大家可以先放一下,我弄好了会在这里做说明。
页:
[1]