study(title = "C-R-O-C-O-B-T PATHFINDER ", shorttitle = "C-R-O-C-O-B-PATHFINDER" , overlay = true) // ——— Source: Mean of High, Low, Close, Open src = (high + close + open) / 3 // 🎯 Indicators stochK = stoch(src, src, src, 14) rsiVal = rsi(src, 14) cci5 = cci(src, 5) cci20 = cci(src, 20) // ✅ Oversold Conditions stochCond = stochK <= 20 //and stockD<= 20 rsiCond = rsiVal <= 30 cci5Cond = cci5 <= -100 or cci5 >= 100 cci20Cond = cci20 <= -100 or cci20 >= 100 // 🧠 Previous Candle Conditions stochPrev = stochCond[1] rsiPrev = rsiCond[1] cci5Prev = cci5Cond[1] cci20Prev = cci20Cond[1] // ❌ Current Candle Rejection of All Conditions stochNow = not stochCond rsiNow = not rsiCond cci5Now = not cci5Cond cci20Now = not cci20Cond // 🔍 Transition Signal //transition = (stochPrev and rsiPrev) and (cci20Prev and cci5Now) and (stochNow and rsiNow) and (cci20Now and cci5Now) and crossover(atrTrailingStop1,atrTrailingStop2) // 🔔 Alert //alertcondition(transition, title = "Oversold Recovery Transition", message = "Previous candle met all oversold conditions, current candle rejects all. Possible momentum shift.") // 📍 Plot //plotshape(transition, title = "Transition Marker", location = location.abovebar, color = color.green, style = shape.labelup, text = "Shift") // 🔹 **User Inputs for Three ATRs** atrPeriod1 = input(14, title="ATR Period 1") atrMultip1 = input(2, title="ATR Multiplier 1") atrPeriod2 = input(10, title="ATR Period 2") atrMultip2 = input(3, title="ATR Multiplier 2") atrPeriod3 = input(26, title="ATR Period 3") atrMultip3 = input(9, title="ATR Multiplier 3") atrPeriod4 = input(22, title="ATR Period 4") atrMultip4 = input(5, title="ATR Multiplier 4") // 🔹 **Calculate ATR Values** atr1 = atr(atrPeriod1) atr2 = atr(atrPeriod2) atr3 = atr(atrPeriod3) atr4 = atr(atrPeriod4) loss1 = atrMultip1 * atr1 loss2 = atrMultip2 * atr2 loss3 = atrMultip3 * atr3 loss4 = atrMultip4 * atr4 // 🔹 **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 atrTrailingStop4 = float(na) atrTrailingStop4 := close > nz(atrTrailingStop4[1], na) and close[1] > nz(atrTrailingStop4[1], na) ? max(nz(atrTrailingStop4[1], na), close - loss4) : close < nz(atrTrailingStop4[1], na) and close[1] < nz(atrTrailingStop4[1], na) ? min(nz(atrTrailingStop4[1], na), close + loss4) : close > nz(atrTrailingStop4[1], na) ? close - loss4 : close + loss4 // underATR = close < atrTrailingStop1 or close < atrTrailingStop2 aboveATR = close > atrTrailingStop1 and close > atrTrailingStop2 barcolor(underATR ? color.rgb(255, 0, 0) : na) // 🔴 Red for below ATRs barcolor(aboveATR ? color.rgb(131, 255, 112) : na) // 🟢 Green for above ATRs plot(atrTrailingStop1, color=color.rgb(255, 255, 255), linewidth=2, title="ATR Stop 1") plot(atrTrailingStop2, color=color.rgb(0, 0, 0), linewidth=2, title="ATR Stop 2") plot(atrTrailingStop3, color=color.rgb(255, 0, 0), linewidth=2, title="ATR Stop 3") plot(atrTrailingStop4, color=color.rgb(0, 255, 21, 69), linewidth=2, title="ATR Stop 4") transition = (stochPrev and rsiPrev) and (cci20Prev or cci5Prev) and (stochNow and rsiNow) and (cci20Now or cci5Now) and ((crossover(close,atrTrailingStop2) or crossover(close,atrTrailingStop1)) or crossover(close,atrTrailingStop3) or crossover(close,atrTrailingStop4)) alertcondition(transition, title = "Oversold Recovery Transition", message = "Previous candle met all oversold conditions, current candle rejects all. Possible momentum shift.") plotshape(transition, title = "Transition Marker", location = location.abovebar, color = color.green, style = shape.triangleup , size = size.small) if (transition) label.new(bar_index, low, text = "U-TURN", style = label.style_label_up, color = color.rgb(0, 0, 0), textcolor = color.rgb(255, 0, 0), size = size.normal) if (transition) // Define rectangle bounds top = low bottom = low left = bar_index right = bar_index + 500 transition6 = (stochPrev and rsiPrev) and (stochNow and rsiNow) and (cci20Prev or cci5Prev) and (cci20Now or cci5Now)//and (crossover(close,atrTrailingStop2) or crossover(close,atrTrailingStop1) or crossover(close,atrTrailingStop3) or crossover(close,atrTrailingStop4)) plotshape(transition6, title = "Transition Marker", location = location.abovebar, color = color.green, style = shape.triangleup , size = size.small) alertcondition(transition6 or transition, title = "Oversold Recovery Transition", message = "Previous candle met all oversold conditions, current candle rejects all. Possible momentum shift.") //@version=4 //@author=LucemAnb // 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** // 🔹 **Calculate ATR Values** sma20 = sma(close, 20) sma40 = sma(close, 40) ema40 = ema(close,40) ema144 = ema (close,144) ema8 = ema(close,8) sma230=sma(close,230) sma1440=sma(close,1440) sma26=sma(close,26) //Bollinger Band settings below basis = sma(close,1144) dev2 = 2 * stdev(close,1144) upper2 = basis + dev2 lower2 = basis - dev2 //Average True Range Trailing Stops settings below changeSMA20 = change(sma20, 1) changeSMA40 = change(sma40, 1) slopeSMA20 = changeSMA20/1 slopeSMA40 = changeSMA40/1 rad2degree=180/3.14159265359 //pi slopeSMA20Degree = rad2degree*atan(slopeSMA20) slopeSMA40Degree = rad2degree*atan(slopeSMA40) iSMA20 = 20 //iBarsBack=input(defval=2,title="Bars Back",type=integer) hline(0) sma2sample=sma(close,iSMA20) //slopeD20=rad2degree*atan((sma2sample[1]-nz(sma2sample[iBarsBack]))/iBarsBack) iSMA40 = 40 hline(0) sma2sample2=sma(close,iSMA40) //slopeD40=rad2degree*atan((sma2sample2[1]-nz(sma2sample2[iBarsBack]))/iBarsBack) //cci5=cci(close, 20) cciCondition = if (cci5[1] <= -100 or cci5[1]>=100) true else false touchConditionBottom1 = if (cross(close[1],sma20) or cross(close[1],sma40) ) true else false touchConditionBottom2 = if close[1]>=sma40 true else false smaSCondition = if sma20[1] >= sma40[1] true else false slopeSMA20Condition = if slopeSMA20Degree > 0 true else false slopeSMA40Condition = if slopeSMA40Degree > 0 true else false cci55=cci(close, 100) cciCondition555 = cci55 + cci5 cciCondition55 = if (cci55[1] <= -99 or cci55[1]>=99) true else false finalResult = cciCondition555 and touchConditionBottom1 and touchConditionBottom2 and smaSCondition and slopeSMA20Condition and slopeSMA40Condition and crossover(close,atrTrailingStop3 ) or crossover(close,atrTrailingStop4 ) x = if finalResult == true 1 else 0 // ************************* // final = finalResult and ((ema40<=high and ema40>=low) or (ema144<=high and ema144>=low)) y = if final == true 2 else 0 plot(x ? 1 : na, title="x", color=color.green, linewidth=4) plot(y ? 1 : na, title="y", color=color.green, linewidth=4) alertcondition(x or y or transition6 or transition , title='X BULLISH8200', message='X BULLISH8200') 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 = crossover(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 // 🔹 **Combine All Alerts into One Condition** combinedAlert = (x or y or transition6 or transition) 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 or confirmedSignal or confirmedSignal1 or conf or godf or x , title='X MACD FRACTAL PDP&MEANCROSS', message='X MACD 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") // Bullish signal detection (Fractals + Trend Confirmation) // — Detect crossover emaCrossUp = crossover(ema40, ema144) emaCrossDown = crossunder(ema40, ema144) // — Capture crossover price var float emaCrossPrice = na emaCrossPrice := emaCrossUp or emaCrossDown ? close : emaCrossPrice[1] // — Plot crossover price line plot(emaCrossPrice, title="EMA Crossover Price", color=color.fuchsia, linewidth=2, style=plot.style_line) // =============================== bullishSignal = (x or y or transition6 or transition) //combinedAlert = bullishSignal // =============================== // 🔹 Signal Candle Low Capture & SL Alert // =============================== // =============================== // 🔻 Signal Candle Low + SL Alert // =============================== var float signalCandleLow = na signalCandleLow := bullishSignal ? high : signalCandleLow[1] plot(signalCandleLow, title="Signal Candle Low (SL Level)", color=color.red, style=plot.style_line) alertcondition(crossunder(close, signalCandleLow), title="SL Breach Alert", message="Price crossed below signal candle low.") // =============================== // 🔁 Reversed Fibonacci Retracement // Uses TrailingStop2 vs signal candle for structural pullback mapping // =============================== useStopAsFib0 = bullishSignal and atrTrailingStop2 < signalCandleLow revFibStart = useStopAsFib0 ? atrTrailingStop2 : signalCandleLow revFibEnd = useStopAsFib0 ? signalCandleLow : atrTrailingStop2 revFib100 = revFibStart revFib786 = revFibStart + (revFibEnd - revFibStart) * 0.786 revFib618 = revFibStart + (revFibEnd - revFibStart) * 0.618 revFib50 = revFibStart + (revFibEnd - revFibStart) * 0.5 revFib382 = revFibStart + (revFibEnd - revFibStart) * 0.382 revFib236 = revFibStart + (revFibEnd - revFibStart) * 0.236 revFib0 = revFibEnd plot(bullishSignal ? revFib100 : na, title="Rev Fib 0%", color=color.blue, linewidth=2) plot(bullishSignal ? revFib786 : na, title="Rev Fib 78.6%", color=color.green, linewidth=2) plot(bullishSignal ? revFib618 : na, title="Rev Fib 61.8%", color=color.orange, linewidth=2) plot(bullishSignal ? revFib50 : na, title="Rev Fib 50%", color=color.red, linewidth=2) plot(bullishSignal ? revFib382 : na, title="Rev Fib 38.2%", color=color.purple, linewidth=2) plot(bullishSignal ? revFib236 : na, title="Rev Fib 23.6%", color=color.yellow, linewidth=2) plot(bullishSignal ? revFib0 : na, title="Rev Fib 100%", color=color.white, linewidth=2) // =============================== // 🔺 Fibonacci Extension Levels (Take Profit Targets) // Now realigned to project upwards from the bullish structure // =============================== extFibStart = atrTrailingStop2 // Use candle low for bullish anchor extFibEnd = high // Use candle high for bullish move reference extFib1618 = extFibEnd + (extFibEnd - extFibStart) * 0.618 extFib2618 = extFibEnd + (extFibEnd - extFibStart) * 1.618 extFib3618 = extFibEnd + (extFibEnd - extFibStart) * 2.618 extFib4236 = extFibEnd + (extFibEnd - extFibStart) * 3.236 plot(bullishSignal ? extFib1618 : na, title="TP1 - Fib 1.618", color=color.blue, linewidth=2) plot(bullishSignal ? extFib2618 : na, title="TP2 - Fib 2.618", color=color.green, linewidth=2) plot(bullishSignal ? extFib3618 : na, title="TP3 - Fib 3.618", color=color.purple, linewidth=2) plot(bullishSignal ? extFib4236 : na, title="TP4 - Fib 4.236", color=color.orange, linewidth=2) // Inputs showImpulseZones = input(true, title="Show Impulse Fib Zones") // Impulse anchor logic var float fibStart = na var float fibEnd = na fibStart := bullishSignal ? atrTrailingStop2 : fibStart[1] fibEnd := bullishSignal ? close : fibEnd[1] // Fib reversal zone calculations fib618 = fibEnd - (fibEnd - fibStart) * 0.618 fib786 = fibEnd - (fibEnd - fibStart) * 0.786 // Plot impulse markers plotshape(showImpulseZones and bullishSignal, location=location.belowbar, color=color.green, style=shape.triangleup, title="Impulse Fib Start") plotshape(showImpulseZones and bullishSignal, location=location.abovebar, color=color.red, style=shape.triangledown, title="Impulse Fib End") // Plot fib reversal zones plot(showImpulseZones ? fib618 : na, color=color.orange, title="Impulse Fib 61.8%") plot(showImpulseZones ? fib786 : na, color=color.purple, title="Impulse Fib 78.6%") //@version=4 // — EMA Definitions //ema40 = ema(close, 40) //ema144 = ema(close, 144) fibStartEMA = emaCrossPrice fibEndEMA = close fib618EMA = fibEndEMA - (fibEndEMA - fibStartEMA) * 0.618 fib786EMA = fibEndEMA - (fibEndEMA - fibStartEMA) * 0.786 plot(showImpulseZones ? fib618EMA : na, color=color.teal, title="EMA Fib 61.8%") plot(showImpulseZones ? fib786EMA : na, color=color.navy, title="EMA Fib 78.6%")