兄弟们武汉股票期货配资,今天咱来说说一个挺有意思的指标,这玩意儿是基于MACD改的,还加了点布林带的元素,用起来感觉还挺有门道的,说不定能帮大家在复杂的市场里找到些蛛丝马迹。
图片
先说说这指标里头的关键部分。MACD大家都熟吧,那DIF就是短的EMA(12天)和长的EMA(26天)的差,这玩意儿能反映出短期和长期趋势的差别,是MACD的核心。DEA呢,就是DIF的9天EMA,相当于给DIF“磨平”一下,把短期的波动过滤掉。至于MACD柱,就是(DIF - DEA)乘以2,这能直观地看出多空力量的对比。
MACD公式DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);DEA:EMA(DIF,MID);MACD:DIF-DEA,COLORSTICK;然后,这指标还把布林带的概念给搬过来了。上轨和下轨是通过MACD柱加减2倍的标准差(20周期)算出来的,这就像是给MACD柱划定了一个“活动范围”,有点像布林带的上下轨。UP和LO呢,就是上轨和下轨跟MACD柱之间的差值再乘以2,用来画辅助线。
布林带指标BOLL:MA(CLOSE,M);UB:BOLL+2*STD(CLOSE,M);LB:BOLL-2*STD(CLOSE,M);
说到判断底部,这指标也有自己的招数。当DIF低于LO的时候,就说明DIF已经掉到一个比较低的位置了,这可能意味着市场被“砸”得差不多了,有反弹的可能。这时候指标会用蓝色标出来,提醒大家这里可能是底部区域。这有点像布林带的下轨,当价格碰到下轨的时候,市场说不定就要反转向上了。
图片
再看看MACD柱的波动范围,如果MACD柱一直低于下轨,那可能说明市场空头占了上风,要是这时候MACD柱开始往上靠近下轨,说不定就是一个不错的信号。
总体来说,这指标的逻辑就是通过DIF和DEA的交叉来判断趋势,DIF上穿DEA可能是个好信号,下穿可能就得小心了。同时,它还结合了布林带的概念,通过上轨和下轨来判断市场的超买或超卖状态。当DIF低于LO的时候,可能是个潜在的底部信号,大家可以多留意一下。
通达信MACD算法叠加布林带指标DIF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIF,6);MACD:(DIF-DEA)*2,COLORSTICK;上轨:=MACD+2*STD(MACD,20);下轨:=MACD-2*STD(MACD,20);UP:2*(上轨-MACD),DOTLINE;LO:2*(下轨-MACD),DOTLINE;STICKLINE(DIF<LO,LO,DIF,3,0),COLORBLUE;STICKLINE(DIF>UP,UP,DIF,3,0),COLORRED;图片
MACD算法叠加布林带C+源代码#include <iostream>#include <vector>#include <cmath>#include <numeric>#include <algorithm>// 计算指数移动平均值(EMA)double EMA(const std::vector<double>& prices, int period, int index) { if (index < period) { returnstd::accumulate(prices.begin(), prices.begin() + index + 1, 0.0) / (index + 1); } double alpha = 2.0 / (period + 1); return alpha * prices[index] + (1 - alpha) * EMA(prices, period, index - 1);}// 计算标准差(STD)double STD(const std::vector<double>& values, int period, int index) { if (index < period) { return0.0; } double mean = std::accumulate(values.begin() + index - period + 1, values.begin() + index + 1, 0.0) / period; double variance = 0.0; for (int i = index - period + 1; i <= index; ++i) { variance += (values[i] - mean) * (values[i] - mean); } variance /= period; returnstd::sqrt(variance);}// 主函数int main() { // 示例价格数据 std::vector<double> prices = {10, 12, 15, 14, 13, 16, 18, 20, 19, 17, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // 计算DIF、DEA和MACD std::vector<double> dif(prices.size(), 0.0); std::vector<double> dea(prices.size(), 0.0); std::vector<double> macd(prices.size(), 0.0); for (size_t i = 0; i < prices.size(); ++i) { dif[i] = EMA(prices, 12, i) - EMA(prices, 26, i); dea[i] = EMA(dif, 6, i); macd[i] = (dif[i] - dea[i]) * 2; } // 计算上下轨 std::vector<double> upper_band(prices.size(), 0.0); std::vector<double> lower_band(prices.size(), 0.0); for (size_t i = 0; i < prices.size(); ++i) { upper_band[i] = macd[i] + 2 * STD(macd, 20, i); lower_band[i] = macd[i] - 2 * STD(macd, 20, i); } // 标记上下轨范围内的DIF值 std::vector<double> up(prices.size(), 0.0); std::vector<double> lo(prices.size(), 0.0); for (size_t i = 0; i < prices.size(); ++i) { up[i] = 2 * (upper_band[i] - macd[i]); lo[i] = 2 * (lower_band[i] - macd[i]); } // 输出结果 for (size_t i = 0; i < prices.size(); ++i) { std::cout << 'Index: ' << i << ', Price: ' << prices[i] << ', DIF: ' << dif[i] << ', DEA: ' << dea[i] << ', MACD: ' << macd[i] << ', Upper Band: ' << upper_band[i] << ', Lower Band: ' << lower_band[i] << ', UP: ' << up[i] << ', LO: ' << lo[i]; if (dif[i] < lo[i]) { std::cout << ', Mark: Blue'; } elseif (dif[i] > up[i]) { std::cout << ', Mark: Red'; } std::cout << std::endl; } return0;}
风险提示:本指标仅供技术研究与学习交流使用。资本市场具有高度不确定性,任何基于本指标的投资决策都需要自行承担风险,不构成任何投资建议。
图片
图片
学习分享武汉股票期货配资
学术交流:我们专注于市场的学术交流与研究包括自用指标抄底逃顶零滞后均线最速曲线,以及期货自动化和股票自动化学习。分享知识:田都元帅,敬神常在,爱人如己,我为人人,与人为善,分享快乐! 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。