分析 【算法征询】邃晓信MACD算法类似布林带瞎想
昆季们,今天咱来说说一个挺有道理的瞎想,这玩意儿是基于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;}
风险领导:本瞎想仅供时刻征询与学习一样使用。成本阛阓具有高度不确信性,任何基于本瞎想的投资有瞎想齐需要自行承担风险,不组成任何投资提议。
图片
图片
学习共享
学术一样:咱们专注于阛阓的学术一样与征询包括私用瞎想抄底逃顶零滞后均线最速弧线,以及期货自动化和股票自动化学习。共享常识:田齐元戎,敬神常在,爱东谈主如己,我为东谈主东谈主,与东谈主为善,共享满足! 本站仅提供存储奇迹,扫数推行均由用户发布,如发现存害或侵权推行,请点击举报。