通达信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;
}
风险提示
本指标仅供技术研究与学习交流使用。资本市场具有高度不确定性,任何基于本指标的投资决策都需要自行承担风险,不构成任何投资建议。
热门推荐
李白,扶摇直上九万里的诗仙
2025年中国半导体分立器件行业竞争格局及市场份额分析
三角函数图像与性质 知识点归纳总结
核桃的保存时间有多久?(探究核桃的保鲜技巧与时间限制)
学习机器学习过程中都走过哪些弯路,怎样避免走弯路
如何计算股票的涨跌幅?这些计算方法如何帮助你分析市场趋势?
列奥纳多·达·芬奇:文艺复兴时期的全才与不朽传奇
麻辣烫引发消化不良?原因与解决方案全解析
深圳公积金贷款指南(2025年3月更新)
7个实用保健法,让鼻子呼吸更顺畅
揭秘茅山上清派:内修背后的神秘力量
乡村四时好风光·花期乡遇|山东·泰安“泰麓春韵 岱下寻芳”之旅
CSGO电脑设置全攻略:优化游戏性能的最佳配置指南
初次见面时,怎样的自我介绍符合职场礼仪规范
禅宗美学,空纳万境
软件工程师的核心技能和发展路径
云龙马拉松:一场体育与文旅的完美邂逅
蓝光效果(探索蓝光效果对视力健康的影响及防护措施)
中国著名四大名医:历史贡献与医学传承
元宇宙平台是干嘛用的,探索元宇宙平台:定义与用途一览
元宇宙的应用场景
什么是正畸:正畸牙科护理患者指南
正确认识艾滋病
中国航天员完成9小时太空行走,打破美国保持23年世界纪录
私人影院音响的效果应该如何有效提升?
中国画中梅兰竹菊的训练是何等的重要!
研究发现:蜂胶是对抗糖尿病、肥胖和癌症的天然武器
《金铲铲》S13赛季更新内容及S14赛季预告
7-8岁孩子的心理和生理特征
寒花开已尽 菊蕊独盈枝,古诗词里寒菊,坚韧之美,诉说生命不屈