KDJ(KD指标又称随机指标)是一种趋势跟踪类指标,主要用于股市趋势判断。它由三部分组成:K值、D值和J值。
K值的计算公式如下:
K = 100 * (RSV / N)
其中,RSV是当日的相对强弱指数,N是计算K值所需的数据天数。
D值的计算公式如下:
D = (K1 + K2 + K3 + … + Kn) / N
其中,K1、K2、K3、…、Kn是过去N天的K值,N是计算D值所需的数据天数。
J值的计算公式如下:
J = 3 * D - 2 * K
要计算KDJ指标,需要先获取股票的最高价、最低价和收盘价,然后根据公式计算K值、D值和J值。
下面是使用Qt和C++计算KDJ指标的示例代码:
#include <QVector>
double getRSV(double high, double low, double close, int N)
{
// 获取最近N天的最高价、最低价和收盘价
QVector<double> highs = getHighs(N);
QVector<double> lows = getLows(N);
QVector<double> closes = getCloses(N);
double maxHigh = highs[0];
double minLow = lows[0];
for (int i = 1; i < N; i++)
{
if (highs[i] > maxHigh)
{
maxHigh = highs[i];
}
if (lows[i] < minLow)
{
minLow = lows[i];
}
}
// 计算RSV
if (maxHigh == minLow)
{
return 0;
}
else
{
return (close - minLow) / (maxHigh - minLow) * 100;
}
}
double getK(int N)
{
// 获取当日的最高价、最低价和收盘价
double high = getCurrentHigh();
double low = getCurrentLow();
double close = getCurrentClose();
// 计算RSV
double RSV = getRSV(high, low, close, N);
// 计算K值
return 100 * (RSV / N);
}
double getD(int N)
{
// 获取过去N天的K值
QVector<double> Ks = getKs(N);
// 计算D值
double sum = 0;
for (int i = 0; i < N; i++)
{
sum += Ks[i];
}
return sum / N;
}
double getJ()
{
// 获取当日的K值和D值
double K = getK();
double D = getD();
// 计算J值
return 3 * D - 2 * K;
}
在上面的代码中,getCurrentHigh()
、getCurrentLow()
和getCurrentClose()
函数用于获取当日的最高价、最低价和收盘价,getHighs(N)
、getLows(N)
和getCloses(N)
函数用于获取最近N天的最高价、最低价和收盘价,getKs(N)
函数用于获取过去N天的K值。
注意:上面的代码仅供参考,实际应用中可能需要根据需要进行修改。
在实际应用中,可以在Qt界面中显示KDJ指标的走势图,以便于分析股票的趋势。
下面是使用Qt的QCustomPlot库绘制KDJ指标走势图的示例代码:
#include <QCustomPlot>
void drawKDJ(QCustomPlot *customPlot, int N)
{
// 获取最近N天的K值、D值和J值
QVector<double> Ks = getKs(N);
QVector<double> Ds = getDs(N);
QVector<double> Js = getJs(N);
// 创建K值曲线、D值曲线和J值曲线
QCPGraph *KGraph = customPlot->addGraph();
QCPGraph *DGraph = customPlot->addGraph();
QCPGraph *JGraph = customPlot->addGraph();
// 设置曲线的数据、颜色和线宽
KGraph->setData(Ks);
KGraph->setPen(QPen(Qt::red, 1));
DGraph->setData(Ds);
DGraph->setPen(QPen(Qt::green, 1));
JGraph->setData(Js);
JGraph->setPen(QPen(Qt::blue, 1));
// 设置坐标轴的范围
customPlot->yAxis->setRange(0, 100);
customPlot->xAxis->setRange(0, N);
// 设置图例
customPlot->legend->setVisible(true);
customPlot->legend->setBrush(QBrush(QColor(255,255,255,230)));
customPlot->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignTop|Qt::AlignHCenter);
customPlot->legend->setFont(QFont("Helvetica", 9));
customPlot->legend->addElement(0, 0, new QCPPlottableLegendItem(customPlot->legend, KGraph));
customPlot->legend->addElement(0, 1, new QCPPlottableLegendItem(customPlot->legend, DGraph));
customPlot->legend->addElement(0, 2, new QCPPlottableLegendItem(customPlot->legend, JGraph));
}
在上面的代码中,getKs(N)、getDs(N)和getJs(N)函数用
于获取最近N天的K值、D值和J值,QCustomPlot库中的QCPGraph类用于绘制曲线图。
在调用drawKDJ()函数时,需要传入QCustomPlot控件的指针和计算KDJ指标所需的数据天数N。该函数会绘制K值曲线、D值曲线和J值曲线,并在图例中显示曲线的名称。
注意:上面的代码仅供参考,实际应用中可能需要根据需要进行修改。
希望上面的示例代码能够帮助你实现计算和绘制KDJ指标的功能。
量化对冲交易系统设计一
python的string 竟然有这么多用法
python给游戏增加音效
python 只用20行代码完成一个web应用开发
开发Python程序你一定要安装的一个库.让异常信息更加易读和信息量更丰富.
Python如何测网速
Python如何监控文件系统的目录变化.
Python的处理时间和日期库与pandas到底怎么用.有什么区别
Python是如何实现文件锁的
Python展示如何实现二维空间物体的各种物理约束
Python创建了一个弹性蜘蛛网,可以通过鼠标点击并拖动来抓住交点
Python实现一个具有交互模式的牛顿摆屏幕保护程序
Python模拟一个垂直堆叠的物体堆,用球去碰撞
Python如何创造可变形的地形的完整示例.
python如何模拟阻尼旋转,跟随鼠标指针转动
Python如何使用pickle库来复制、保存和加载一个空间
Python如何模拟球的碰撞及摩擦力,弹力.
Python通过写一个射箭小游戏来详细展示物理引擎的使用
Python实现一个简单的星场动画场景完整示例代码
Python如何编写一个钢琴弹奏软件,操作MIDI设备的详细流程