通达信CCI RSI KDJ多指标共振与C++源代码详解
创作时间:
作者:
@小白创作中心
通达信CCI RSI KDJ多指标共振与C++源代码详解
引用
1
来源
1.
http://www.360doc.com/content/25/0219/03/17132703_1147091321.shtml
本文将分享一段通达信软件中CCI、RSI、KDJ多指标共振的源代码。这些技术指标主要用于判断股票市场的买卖时机和底部信号。文章将详细解释这些指标的原理和计算方法,并提供具体的C++代码实现。
技术指标详解
通道线(CCI)
通道线(Commodity Channel Index,CCI)主要用于衡量价格与平均价格之间的偏离程度,帮助投资者识别市场趋势。其计算公式为:
CCI = (TYP - MA(TYP, M)) / (0.015 * AVEDEV(TYP, M))
其中,TYP是典型价格((最高价+最低价+收盘价)/3),MA是移动平均值,AVEDEV是平均偏差。
相对强弱指标(RSI)
相对强弱指标(Relative Strength Index,RSI)用于衡量市场强弱,其计算公式为:
RSI = (RSI1 - 50) * 5.3
其中,RSI1是通过比较一段时间内的平均涨跌幅度计算得出的。
随机指标(KDJ)
随机指标(Stochastic Oscillator,KDJ)通过计算一段时间内的最高价、最低价和收盘价来判断市场买卖信号。其计算公式为:
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = SMA(RSV, 3, 1)
D = SMA(K, 3, 1)
J = 3 * K - 2 * D
指数平滑移动平均(EMA)
指数平滑移动平均(Exponential Moving Average,EMA)是对价格进行指数加权平滑处理,更看重近期的数据。其计算公式为:
EMA = alpha * data[i] + (1 - alpha) * EMA[i - 1]
其中,alpha是平滑系数。
加权移动平均(SMA)
加权移动平均(Simple Moving Average,SMA)是对价格进行加权平均处理,把价格波动给平滑了。其计算公式为:
SMA = sum(data) / period
判断底部的算法逻辑
这段代码通过多种条件组合来判断底部信号:
- 超卖判断:
- 当RSI值低于某个阈值(比如-100),可能说明市场超卖了。
- 当K值和J2值低于某个阈值(比如-100),也可能说明市场到底部了。
- 趋势反转判断:
- 用RR(即RR1 > RR2)判断当前趋势是不是向上反转了。
- 再结合CB1(指数平滑处理后的指标),看看是不是低于-100,进一步确认是不是底部。
- 共振条件:
- 通过SSTT1、SSTT2、SSTT3这些条件组合,当多个指标同时满足超卖且趋势反转时,就标记为底部信号。
源代码实现
以下是具体的C++代码实现:
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <numeric>
using namespace std;
// 计算简单移动平均线
double SMA(const vector<double>& data, int period) {
vector<double> sma(data.size() - period + 1, 0.0);
for (size_t i = period - 1; i < data.size(); ++i) {
double sum = 0.0;
for (int j = 0; j < period; ++j) {
sum += data[i - j];
}
sma[i - period + 1] = sum / period;
}
return sma.back();
}
// 计算指数移动平均线
double EMA(const vector<double>& data, int period) {
vector<double> ema(data.size(), 0.0);
ema[0] = data[0];
double alpha = 2.0 / (period + 1);
for (size_t i = 1; i < data.size(); ++i) {
ema[i] = alpha * data[i] + (1 - alpha) * ema[i - 1];
}
return ema.back();
}
// 计算平均偏差
double AVEDEV(const vector<double>& data, int period) {
vector<double> avgdev(data.size() - period + 1, 0.0);
for (size_t i = period - 1; i < data.size(); ++i) {
double sum = 0.0;
double mean = SMA(vector<double>(data.begin() + i - period + 1, data.begin() + i + 1), period);
for (int j = 0; j < period; ++j) {
sum += abs(data[i - j] - mean);
}
avgdev[i - period + 1] = sum / period;
}
return avgdev.back();
}
// 计算RSI指标
double RSI(const vector<double>& close, int period) {
vector<double> gains, losses;
for (size_t i = 1; i < close.size(); ++i) {
double change = close[i] - close[i - 1];
if (change > 0) {
gains.push_back(change);
losses.push_back(0);
} else {
gains.push_back(0);
losses.push_back(abs(change));
}
}
double avg_gain = SMA(gains, period);
double avg_loss = SMA(losses, period);
return avg_gain / avg_loss * 100;
}
风险提示
本指标仅供技术研究与学习交流使用。资本市场具有高度不确定性,任何基于本指标的投资决策都需要自行承担风险,不构成任何投资建议。
热门推荐
8个模块化技巧,让你的前端项目维护性提升70%!
三角洲行动狙击枪配件详解:PSG狙击枪改造方案与推荐
眼睛视力急剧下降的原因及应对方法
10个中餐烹饪技巧,让你的厨艺更上一层楼
“在希腊遇见兵马俑”线上展,平行时空里的五彩兵马俑
呵护文化瑰宝 探寻文明历史——写在秦始皇帝陵兵马俑考古发现50周年之际
【中级软件设计师】原码、反码、补码、移码 (附软考真题)
电机系统文献综述:技术进展与应用前景分析
Excel表格自动序号生成完全指南:填充柄、公式、VBA代码等多种方法详解
别忽视!插管类型如何影响感染性休克的 ECMO 治疗效果
邓丽君在日本教唱〈哆来咪〉,中文歌声魅力绽放
以案说法:四个真实案例告诉你,毒品的危害有多大
虾的英文表达:常见的翻译和有趣的事实
安全用“气”,三招、四步、六常识你要知道→
增长岗位的职业生涯规划建议?
挣值技术(EVM):项目管理中的进度与成本控制利器
农村宅基地确权规定与拆迁继承处理指南
一文精通ping命令:从入门到实战
如何正确使用ping命令,ping同一网段内所有在用IP地址
C语言递归函数在进制转换中的应用
清晰表达:如何在拥挤的PPT中传递重点信息
无修音的《歌手》爆火,华语乐坛最缺的到底是啥?
彩铅画渐变技巧:从浅到深的上色秘诀与颜色过深的解决方案
彩铅基础知识:从入门到精通的全面指南
125克是多少两?了解克与两的换算关系
居民楼内能办餐饮执照吗
骨水泥是什么?骨水泥后遗症、自费与健保优缺点、术后的注意事项
如何分析股权结构?关键方法与注意事项全解析
2025年卡牌类游戏推荐排行榜前十名汇总
国画教程:没骨画常识