//@version=4 //@author=LucemAnb study(title="MACD CLUSTER SCORE MEAN", overlay=false) // Define Fractal Length fractalLength = 2 // Detect Bullish Fractal (Higher Low) bullishFractal = low[fractalLength] > low[fractalLength + 1] and low[fractalLength] > low[fractalLength - 1] // Detect Bearish Fractal (Lower High) bearishFractal = high[fractalLength] < high[fractalLength + 1] and high[fractalLength] < high[fractalLength - 1] src = input(title="Source", type=input.source, defval=close) fastMA1 = input(title="Fast MA 1", type = input.integer, defval = 12, minval = 7) slowMA1 = input(title="Slow MA 1", type = input.integer, defval = 26, minval = 7) fastMA2 = input(title="Fast MA 2", type = input.integer, defval = 24, minval = 7) slowMA2 = input(title="Slow MA 2", type = input.integer, defval = 52, minval = 7) signalLength = input(9, "Signal Length", minval=1) // First MACD calculation [currMacd1,_,_] = macd(close[0], fastMA1, slowMA1, 9) [prevMacd1,_,_] = macd(close[1], fastMA1, slowMA1, 9) signal1 = sma(currMacd1, signalLength) // Second MACD calculation (faithfully keeping structure from previous step) [currMacd2,_,_] = macd(close[0], fastMA2, slowMA2, 9) [prevMacd2,_,_] = macd(close[1], fastMA2, slowMA2, 9) signal2 = sma(currMacd2, signalLength) nATRPeriod1 = 14 nATRMultip1 = 2 xATR1 = atr(nATRPeriod1) nATRPeriod11 = 10 nATRMultip11 = 3 xATR11 = atr(nATRPeriod11) // Detect Crossover Condition atrCross = crossover(xATR11, xATR1) or crossover(close,xATR1) or crossover(close,xATR11) // Define `jjj` logic (only valid immediately after crossover) jjj = atrCross ? 1 : 0 // Plot ATR values //plot(xATR1, color=color.blue, title="ATR (14)") //plot(xATR11, color=color.red, title="ATR (3)") // Visual Confirmation for `jjj` //plotshape(jjj, location=location.abovebar, color=color.green, style=shape.labeldown, title="jjj Trigger") // Parabolic SAR Calculation start = 0.02 increment = 0.02 maximum = 0.2 sarValue = sar(start, increment, maximum) // 🔹 **User Inputs for Three ATRs** atrPeriod1 = input(5, title="ATR Period 1") atrMultip1 = input(1.5, title="ATR Multiplier 1") atrPeriod2 = input(10, title="ATR Period 2") atrMultip2 = input(2.0, title="ATR Multiplier 2") atrPeriod3 = input(20, title="ATR Period 3") atrMultip3 = input(2.5, title="ATR Multiplier 3") // 🔹 **Calculate ATR Values** atr1 = atr(atrPeriod1) atr2 = atr(atrPeriod2) atr3 = atr(atrPeriod3) loss1 = atrMultip1 * atr1 loss2 = atrMultip2 * atr2 loss3 = atrMultip3 * atr3 // 🔹 **Trailing Stop Logic for Each ATR** atrTrailingStop1 = float(na) atrTrailingStop1 := close > nz(atrTrailingStop1[1], na) and close[1] > nz(atrTrailingStop1[1], na) ? max(nz(atrTrailingStop1[1], na), close - loss1) : close < nz(atrTrailingStop1[1], na) and close[1] < nz(atrTrailingStop1[1], na) ? min(nz(atrTrailingStop1[1], na), close + loss1) : close > nz(atrTrailingStop1[1], na) ? close - loss1 : close + loss1 atrTrailingStop2 = float(na) atrTrailingStop2 := close > nz(atrTrailingStop2[1], na) and close[1] > nz(atrTrailingStop2[1], na) ? max(nz(atrTrailingStop2[1], na), close - loss2) : close < nz(atrTrailingStop2[1], na) and close[1] < nz(atrTrailingStop2[1], na) ? min(nz(atrTrailingStop2[1], na), close + loss2) : close > nz(atrTrailingStop2[1], na) ? close - loss2 : close + loss2 atrTrailingStop3 = float(na) atrTrailingStop3 := close > nz(atrTrailingStop3[1], na) and close[1] > nz(atrTrailingStop3[1], na) ? max(nz(atrTrailingStop3[1], na), close - loss3) : close < nz(atrTrailingStop3[1], na) and close[1] < nz(atrTrailingStop3[1], na) ? min(nz(atrTrailingStop3[1], na), close + loss3) : close > nz(atrTrailingStop3[1], na) ? close - loss3 : close + loss3 // 🔹 **Plot ATR Trailing Stops** // underATR = close < atrTrailingStop1 or close < atrTrailingStop2 or close < atrTrailingStop3 barcolor(underATR ? color.red : na) plot(atrTrailingStop1, color=color.blue, linewidth=2, title="ATR Stop 1") plot(atrTrailingStop2, color=color.green, linewidth=2, title="ATR Stop 2") plot(atrTrailingStop3, color=color.red, linewidth=2, title="ATR Stop 3") // Moving averages //sma20 = sma(close, 20) //sma40 = sma(close, 40) //ema40 = ema(close, 40) //ema144 = ema(close,144) // Slope calculations //changeSMA20 = change(sma20, 1) //changeSMA40 = change(sma40, 1) //slopeSMA20 = changeSMA20 / 1 //slopeSMA40 = changeSMA40 / 1 //rad2degree = 180 / 3.14159265359 // Pi constant //slopeSMA20Degree = rad2degree * atan(slopeSMA20) //slopeSMA40Degree = rad2degree * atan(slopeSMA40) // Bars Back Calculation //iBarsBack = input(defval=2, title="Bars Back", type=input.integer) //sma2sample = sma(close, 20) //slopeD20 = rad2degree * atan((sma2sample[1] - nz(sma2sample[iBarsBack])) / iBarsBack) // CCI Condition //cci5 = cci(close, 20) //cci55=cci(close,5) //cciCondition1 = (cci5[0] <= -99 or cci5[0] >= 99) or (cci5[1] <= -99 or cci5[1] >= 99) //cciCondition2 = (cci55[0] <= -99 or cci55[0] >= 99) or (cci55[1] <= -99 or cci55[1] >= 99) //cciCondition22= (cciCondition1 or cciCondition2) // Touch Conditions //touchConditionBottom1 = (low[1] <= sma20[1] or high[1] <= sma20[1]) or (low[0] <= sma20[0] or high[0] <= sma20[0]) ///touchConditionBottom2 = close[1] >= sma40[1] // SMA and slope conditions //smaSCondition = sma20[1] >= sma40[1] //slopeSMA20Condition = slopeSMA20Degree > 0 //slopeSMA40Condition = slopeSMA40Degree > 0 // Final condition //inalResult = cciCondition22 and touchConditionBottom1 and touchConditionBottom2 and smaSCondition and slopeSMA20Condition and slopeSMA40Condition and (bullishFractal and bearishFractal) //x = finalResult ? 1 : 0 //plot(x, title="BULLISH", color=color.green, linewidth=4) //validSignal = x // Alerts //alertcondition(x, title='PDP Alert', message='PUMP DETECTION PROGRAM') //plot(x, title="BULLISH", color=color.green, linewidth=4) // Plot First MACD (faithfully structured) plotColor1 = currMacd1 > 0 ? currMacd1 > prevMacd1 ? color.lime : color.green : currMacd1 < prevMacd1 ? color.maroon : color.red plot(currMacd1, style=plot.style_columns, transp=20, color=plotColor1, linewidth=3, title="MACD Bars 1") plot(signal1, color=color.white, transp=0, title="MACD Signal 1") // Plot Second MACD (faithfully structured) plotColor2 = currMacd2 > 0 ? currMacd2 > prevMacd2 ? color.blue : color.aqua : currMacd2 < prevMacd2 ? color.purple : color.fuchsia plot(currMacd2, style=plot.style_columns, transp=20, color=plotColor2, linewidth=3, title="MACD Bars 2") plot(signal2, color=color.yellow, transp=0, title="MACD Signal 2") //one=x and ((currMacd20 and prevMacd2>0 ) and (currMacd1>prevMacd1 and currMacd1>0 and prevMacd1>0)) //two = x and ((currMacd1 > prevMacd1) and (currMacd2 > prevMacd2) and (currMacd2[1] < prevMacd2[1])) //three = x and (currMacd2>prevMacd2 and currMacd2[1] 0 and prevMacd1 > 0 and currMacd2 > 0 and prevMacd2 > 0) and (currMacd2 > prevMacd2) //four1 = (currMacd1 > prevMacd1) and (currMacd1[1] < prevMacd1[1]) //fourth = x and (four and four1) //fifth = (currMacd2 > 0 and prevMacd2 > 0 and currMacd1<0 and prevMacd1<0) //fifth1= (currMacd1>prevMacd1) and (currMacd1[1] prevMacd1) and (currMacd2 > prevMacd2) and (currMacd2[1] < prevMacd2[1]) and(currMacd1[1] < prevMacd1[1])) //f3 = (currMacd1>prevMacd1 and currMacd2prevMacd2[1] ) //f34 = (currMacd2>0 and prevMacd2>0 and currMacd2[1]>0 and prevMacd2[1] >0) //f35 = (currMacd1<0 and prevMacd1<0) //fff = (f3 and f33 and f34 and f35 ) //sixth = (x and fff) //god = (x and currMacd2<0 ) //sixth = x and ((currMacd1>prevMacd1 and currMacd2prevMacd1 //currMacd20 //currMacd1>prevMacd1<0 // 📌 **MACD Input Parameters** //fastMA1 = input(12, title="Fast MA 1") //slowMA1 = input(26, title="Slow MA 1") //fastMA2 = input(24, title="Fast MA 2") //slowMA2 = input(52, title="Slow MA 2") //signalLength = input(9, title="Signal Length", minval=1) meanBars = input(10, title="MACD Mean Bars", minval=1) // User-defined mean MACD period // 🔹 **MACD Calculations** //[currMacd1, _, _] = macd(close, fastMA1, slowMA1, 9) //signal1 = sma(currMacd1, signalLength) // Second MACD calculation //[currMacd2, _, _] = macd(close, fastMA2, slowMA2, 9) //signal2 = sma(currMacd2, signalLength) // 🔹 **Mean MACD Calculations** meanMacd1 = sma(currMacd1, meanBars) // Mean MACD for first MACD meanMacd2 = sma(currMacd2, meanBars) // Mean MACD for second MACD // 🔹 **Define Colors Based on Zero Level** //plotColor1 = currMacd1 > 0 ? color.green : color.red //plotColor2 = currMacd2 > 0 ? color.blue : color.purple meanColor1 = meanMacd1 > 0 ? color.lime : color.orange meanColor2 = meanMacd2 > 0 ? color.aqua : color.fuchsia // 🔹 **Visualizations** plot(currMacd1, style=plot.style_columns, transp=20, color=plotColor1, linewidth=3, title="MACD 1 Bars") plot(currMacd2, style=plot.style_columns, transp=20, color=plotColor2, linewidth=3, title="MACD 2 Bars") // **Mean MACD Lines for Better Trend Identification** plot(meanMacd1, color=meanColor1, linewidth=2, style=plot.style_stepline, title="Mean MACD 1") plot(meanMacd2, color=meanColor2, linewidth=2, style=plot.style_stepline, title="Mean MACD 2") // 🔹 **Signal Lines** plot(signal1, color=color.white, transp=0, title="MACD Signal 1") plot(signal2, color=color.yellow, transp=0, title="MACD Signal 2") // 🔹 **Crossover Conditions for Alerts** cross_macd1_macd2 = cross(meanMacd1, meanMacd2) // 1. MACD1 Mean crosses MACD2 Mean cross_macd1_zero = crossover(meanMacd1, 0) // 2. MACD1 Mean crosses Zero Line cross_macd2_zero = crossover(meanMacd2, 0) // 3. MACD2 Mean crosses Zero Line cross_macd1_bar = crossover(meanMacd1, currMacd1) // 4. MACD1 Mean crosses MACD1 Bar cross_macd2_bar = crossover(meanMacd2, currMacd2) // 5. MACD2 Mean crosses MACD2 Bar // Background Coloring bgcolor(cross_macd1_macd2 ? color.new(color.orange, 85) : na, title="MACD1 crosses MACD2") plotshape(cross_macd1_macd2, location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.small, title="MEAN CROSS") bgcolor(cross_macd1_zero ? color.new(color.green, 85) : na, title="MACD1 crosses Zero") bgcolor(cross_macd2_zero ? color.new(color.blue, 85) : na, title="MACD2 crosses Zero") bgcolor(cross_macd1_bar ? color.new(color.purple, 85) : na, title="MACD1 crosses MACD1 Bar") bgcolor(cross_macd2_bar ? color.new(color.red, 85) : na, title="MACD2 crosses MACD2 Bar") // 🔹 **Combine All Alerts into One Condition** combinedAlert = (cross_macd1_macd2 or cross_macd1_zero or cross_macd2_zero or cross_macd1_bar or cross_macd2_bar) plot(combinedAlert ? 1 : na, title="BULLISHfractal", color=color.green, linewidth=4) //alertcondition(combinedAlert, title="MACD Combined Alert", message="MACD crossover detected with fractal confirmation!") alertcondition(combinedAlert, title='X MACD FRACTAL PDP&MEANCROSS', message='X MACD FRACTAL PDP&MEAN CROSS') alertcondition(cross_macd1_macd2 or cross_macd1_zero or cross_macd2_zero , title='X2 MEANC FRACTAL PDP&MEANCROSS', message='X2 MACDC FRACTAL PDP&MEAN CROSS') // 🔹 **Visualization** plot(meanMacd1, color=color.lime, linewidth=2, title="Mean MACD 1") plot(meanMacd2, color=color.orange, linewidth=2, title="Mean MACD 2") plot(currMacd1, style=plot.style_columns, color=color.green, title="MACD Bars 1") plot(currMacd2, style=plot.style_columns, color=color.blue, title="MACD Bars 2") macdScore = 0 macdScore := meanMacd1 > meanMacd2 ? macdScore + 1 : macdScore macdScore := meanMacd1 > 0 ? macdScore + 1 : macdScore macdScore := currMacd1 > meanMacd1 ? macdScore + 1 : macdScore macdSignal = macdScore >= 2 atrBiasScore = 0 atrBiasScore := close > atrTrailingStop1 ? atrBiasScore + 1 : atrBiasScore atrBiasScore := close > atrTrailingStop2 ? atrBiasScore + 1 : atrBiasScore atrBiasScore := close > atrTrailingStop3 ? atrBiasScore + 1 : atrBiasScore atrSignal = atrBiasScore >= 2 emaTrendUp = ema(close, 21) > ema(close, 55) fractalScore = 0 fractalScore := bullishFractal and emaTrendUp ? fractalScore + 2 : fractalScore fractalSignal = fractalScore >= 2 sarFlip = sarValue > close and sarValue[1] < close[1] volatilityGate = atr(14) > sma(atr(14), 20) sarScore = sarFlip and volatilityGate ? 2 : 0 sarSignal = sarScore >= 2 metaScore = macdScore + atrBiasScore + fractalScore + sarScore metaSignal = metaScore >= 5 plotshape(metaSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="MetaSignal") bgcolor(metaSignal ? color.new(color.green, 85) : na, title="MetaSignal Background") alertcondition(metaSignal, title="MetaSignal Alert", message="High-conviction confluence detected") // 🔹 Detect First Bar of MetaSignal Activation (Background Change Trigger) metaSignalChange = metaSignal and not metaSignal[1] // 🔹 Alert for First Background Color Activation alertcondition(metaSignalChange, title="MetaSignal Background Flip", message="MACD MEAN1 metasignal background just activated!") // 🔹 MetaSignal Persistence Tracker metaSignalPersistence = 0 metaSignalPersistence := metaSignal ? nz(metaSignalPersistence[1]) + 1 : 0 // 🔹 Optional: Smoothed MetaSignal metaSignalSmoothed = sma(metaSignal ? 1 : 0, 3) >= 0.66 // 🔹 Optional Visuals plot(metaSignalPersistence, title="MetaSignal Persistence", color=color.orange, linewidth=2) bgcolor(metaSignalPersistence >= 3 ? color.new(color.green, 85) : na, title="Persistent MetaSignal Background") alertcondition(metaSignalPersistence >= 3, title="Persistent MetaSignal Alert", message="MACD MEAN1 metasignal has held for 3+ bars. High-conviction zone confirmed.") //metaSignalPersistence = metaSignal ? nz(metaSignalPersistence[1]) + 1 : 0 //metaSignalSmoothed = sma(metaSignal ? 1 : 0, 3) >= 0.66