兄弟们,今天来说说这个卡尔曼自适应MACD,这玩意儿挺有意思,感觉像是给传统MACD加了个“智能大脑”,让它变得更灵活了。
为啥说它厉害?
传统MACD那几个参数(12日、26日、9日)是死的,市场一变就容易跟不上节奏。但卡尔曼自适应MACD不一样,它能根据市场的波动自动调整参数,这就好比它能“看懂”市场的变化,然后自己调整状态,应对起来就更顺手了。
图片
而且,它在保持MACD那种平滑性的同时,还能对价格变化更敏感。这就相当于在稳和快之间找到了个平衡,信号也更靠谱了,不像传统MACD有时候反应慢半拍。
图片
通达信卡尔曼自适应MACD顶底背离指标N1:=12;N2:=26;lijin1:=CLOSE-REF(CLOSE,N1);lijin2:=SUM(ABS((CLOSE-REF(CLOSE,1))),N1);lijin3:=ABS(lijin1/lijin2);lijin4:=2/(2+1);lijin5:=2/(30+1);lijin6:=lijin3*(lijin4-lijin5)+lijin5;lijin7:=lijin6*lijin6;lijin9:=CLOSE-REF(CLOSE,N2);lijin10:=SUM(ABS((CLOSE-REF(CLOSE,1))),N2);lijin11:=ABS(lijin9/lijin10);lijin12:=2/(2+1);lijin13:=2/(30+1);lijin14:=lijin11*(lijin12-lijin13)+lijin13;lijin15:=lijin14*lijin14;DIFF:DMA(CLOSE,lijin7)-DMA(CLOSE,lijin15);DEA:EMA(DIFF,9);MACD:2*(DIFF-DEA),COLORSTICK;MACD120:=REF(MACD/2,BARSLAST(MACD=HHV(MACD,120))),COLORRED,LINETHICK2;MACD250:=REF(MACD/2,BARSLAST(MACD=HHV(MACD,250))),COLORWHITE,LINETHICK2;XG:=NOT(REF(MACD120,1)=MACD120);STICKLINE(XG,0,MACD,2,0),COLORYELLOW;STICKLINE(MACD>=MACD250,MACD250,MACD,2,0),COLORMAGENTA;KK120:=REF(MACD/2,BARSLAST(MACD=LLV(MACD,120))),COLORRED,LINETHICK2;KK250:=REF(MACD/2,BARSLAST(MACD=LLV(MACD,250))),COLORWHITE,LINETHICK2;XG1:=NOT(REF(KK120,1)=KK120);STICKLINE(XG1,0,MACD,2,0),COLORGREEN;判断底部的套路这个指标里有个MACD120和MACD250,分别是120周期和250周期内的最高MACD值。要是MACD值离这些高位远了,那可能就说明市场有点“跌过头”了,说不定就是底部的信号。
还有个XG条件,它能判断MACD120是不是连续高位。要是突然不连续了,可能就说明市场要变天了。要是这时候MACD值又处于低位,那底部的可能性就更大了。
再看看柱状图,当MACD值从负的往零轴靠近,甚至穿过零轴,这不就说明市场要从空头转多头了嘛,也是底部的信号。
还有个DEA线(9日EMA),要是MACD值靠近DEA线,而且还在低位,这也可以当底部的参考。
图片
整体思路
这个指标通过一堆复杂的计算(比如lijin1到lijin15),动态调整权重,让指标能根据市场波动自动调整。它还结合了不同周期的MACD值,这样就能同时看到市场的短期和长期趋势,判断起来更全面。
最后,它还能过滤假信号,强化真信号。比如,当MACD值在高位或低位的时候,判断一下是不是连续的,要是不连续,那可能就是假突破,直接过滤掉。
总结
卡尔曼自适应MACD这玩意儿,就是通过动态调整权重和结合多周期信号,让判断市场趋势的能力更强了。尤其是在找底部的时候,通过MACD值的变化和多周期的参考,能更准确地抓住市场反转的信号。
兄弟们,要是对这个指标感兴趣,可以多研究研究,毕竟多掌握一种工具,看市场的时候心里也有底。
图片
卡尔曼自适应MACD顶底背离指标#include <iostream>#include <vector>#include <cmath>#include <algorithm>// 计算移动平均线double MA(const std::vector<double>& data, int period, int type, int index) { if (index < period - 1) return0; double sum = 0.0; for (int i = index - period + 1; i <= index; ++i) { sum += data[i]; } return sum / period;}// 计算指数移动平均线double EMA(const std::vector<double>& data, int period, int index) { if (index < period - 1) return0; double alpha = 2.0 / (period + 1); double ema = data[index - period + 1]; for (int i = index - period + 2; i <= index; ++i) { ema = alpha * data[i] + (1 - alpha) * ema; } return ema;}// 动态移动平均线double DMA(const std::vector<double>& data, const std::vector<double>& weights, int index) { double sum = 0.0; double weight_sum = 0.0; for (int i = 0; i <= index; ++i) { sum += data[i] * weights[i]; weight_sum += weights[i]; } return sum / weight_sum;}// 主函数int main() { int N1 = 12; int N2 = 26; std::vector<double> lijin1(close.size(), 0.0); std::vector<double> lijin2(close.size(), 0.0); std::vector<double> lijin3(close.size(), 0.0); std::vector<double> lijin6(close.size(), 0.0); std::vector<double> lijin7(close.size(), 0.0); std::vector<double> lijin14(close.size(), 0.0); std::vector<double> lijin15(close.size(), 0.0); std::vector<double> diff(close.size(), 0.0); std::vector<double> dea(close.size(), 0.0); std::vector<double> macd(close.size(), 0.0); // 计算指标 for (size_t i = N1; i < close.size(); ++i) { lijin1[i] = close[i] - close[i - N1]; for (size_t j = i - N1 + 1; j <= i; ++j) { lijin2[i] += std::abs(close[j] - close[j - 1]); } lijin3[i] = std::abs(lijin1[i] / lijin2[i]); lijin6[i] = lijin3[i] * (2.0 / 3 - 2.0 / 31) + 2.0 / 31; lijin7[i] = lijin6[i] * lijin6[i]; lijin14[i] = std::abs((close[i] - close[i - N2]) / lijin2[i]); lijin15[i] = lijin14[i] * lijin14[i]; diff[i] = DMA(close, lijin7, i) - DMA(close, lijin15, i); dea[i] = EMA(diff, 9, i); macd[i] = 2 * (diff[i] - dea[i]); } return0;}
风险提示:本指标仅供技术研究与学习交流使用。市场具有高度不确定性,任何基于本指标的决策都需要自行承担风险,不构成任何投资建议。
图片
图片
图片
学习分享
学术交流:我们专注于市场的学术交流与研究包括自用指标零滞后均线最速曲线,以及自动化程序量化学习。分享知识:田都元帅,敬神常在,爱人如己,我为人人,与人为善,分享快乐! 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。盛多网配资提示:文章来自网络,不代表本站观点。