en
Feedback
CryptoHub

CryptoHub

Open in Telegram

Welcome to the most loved crypto Community in Africa Admin - https://t.me/niels_official Admin will never Message you first

Show more

πŸ“ˆ Analytical overview of Telegram channel CryptoHub

Channel CryptoHub (@cryptohub_withn) in the English language segment is an active participant. Currently, the community unites 12 034 subscribers, ranking 8 726 in the Cryptocurrencies category and 1 455 in the Nigeria region.

πŸ“Š Audience metrics and dynamics

Since its creation on Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 12 034 subscribers.

According to the latest data from 04 July, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -183 over the last 30 days and by -7 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 8.38%. Within the first 24 hours after publication, content typically collects N/A% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 009 views. Within the first day, a publication typically gains 0 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as analyst, moonshot, script, uniusdt.

πŸ“ Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
β€œWelcome to the most loved crypto Community in Africa Admin - https://t.me/niels_official Admin will never Message you first”

Thanks to the high frequency of updates (latest data received on 05 July, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Cryptocurrencies category.

12 034
Subscribers
-724 hours
-507 days
-18330 days
Posts Archive
CryptoHub
12 031

CryptoHub
12 031
I just uploaded one of my best leverage strategy For Nojai bot πŸ€– https://vt.tiktok.com/ZSCRq9Ahs/

CryptoHub
12 031
Day3 | AI Trading automation and strategy tutorial https://youtu.be/0glERNJ0oUU

CryptoHub
12 031
Day2 Trading automation and strategy tutorial https://youtu.be/gpyOUuiehhA

CryptoHub
12 031
Can anyone hear me?

CryptoHub
12 031
If you had issues connecting https://www.nojai.io/ with MT5 last week The bug has been fixed Write to me today @niels_official if you have any pending complain We hope for a good week πŸ’°

CryptoHub
12 031
Good evening everyone We are having our Day3 and final class on automation and strategy scripting this evening 9pm WAT Don’t miss it Day1 | Trading Automation & Strategy Tutorial https://youtu.be/K_XsPia5-CE Day2 will be posted tonight.

CryptoHub
12 031
There’s a strategy I’m trying out For $BTCUSD and $XAUUSD on Nojai bot I will upload it for you guys on TradingView before Mo
There’s a strategy I’m trying out For $BTCUSD and $XAUUSD on Nojai bot I will upload it for you guys on TradingView before Monday If you haven’t signup on nojai.io what are you waiting for? 🀭

CryptoHub
12 031
If you live in Abuja and would like to attend Rain Conference with me I just created a WhatsApp community for communication https://chat.whatsapp.com/IJACmtbXpm30MmjHxmgUjv Transportation will be 100% taken care of

CryptoHub
12 031
4. tv_health_check

CryptoHub
12 031
3. (Tradingview app location)

CryptoHub
12 031
2. /path/to/Tradingview.app/Contents/Mac0S/Tradingview --remote-debugging-port=9222

CryptoHub
12 031
// ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ BACKGROUND β€” ACTIVE RETEST ZONE // ══════════════════════════════════════════════════════════════════════════════ inRetestBull = awaitBull and priceExtBull and not na(fvgTop) and high >= fvgBot and low <= fvgTop inRetestBear = awaitBear and priceExtBear and not na(fvgTop) and high >= fvgBot and low <= fvgTop bgcolor(inRetestBull ? color.new(color.green, 88) : na, title="Bull Retest Zone") bgcolor(inRetestBear ? color.new(color.red, 88) : na, title="Bear Retest Zone")

CryptoHub
12 031
// ══════════════════════════════════════════════════════════════════════════════ if strategy.position_size != 0 and not na(l_entry) line.set_x2(l_entry, bar_index + 1) line.set_x2(l_sl, bar_index + 1) line.set_x2(l_tp1, bar_index + 1) line.set_x2(l_tp2, bar_index + 1) label.set_x(lb_entry, bar_index + 1) label.set_x(lb_sl, bar_index + 1) label.set_x(lb_tp1, bar_index + 1) label.set_x(lb_tp2, bar_index + 1) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ BREAKEVEN MANAGEMENT // ══════════════════════════════════════════════════════════════════════════════ if i_be and not tp1Done if strategy.position_size > 0 and strategy.position_size < strategy.position_size[1] tp1Done := true strategy.cancel("Long TP2") strategy.exit("Long TP2 BE", from_entry="Long", qty_percent=100, limit=activeTP2, stop=entryPx, comment="TP2 BE") if strategy.position_size < 0 and strategy.position_size > strategy.position_size[1] tp1Done := true strategy.cancel("Short TP2") strategy.exit("Short TP2 BE", from_entry="Short", qty_percent=100, limit=activeTP2, stop=entryPx, comment="TP2 BE") // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ LIVE TRADE DASHBOARD // ══════════════════════════════════════════════════════════════════════════════ var table dash = table.new(position.top_right, 2, 9, bgcolor = color.new(#0D1117, 15), border_color= color.new(color.gray, 60), border_width= 1, frame_color = color.new(color.gray, 40), frame_width = 1) tCell(col, row, txt, bg, tc) => table.cell(dash, col, row, txt, bgcolor=bg, text_color=tc, text_size=size.small) if i_showTable and barstate.islast inLong = strategy.position_size > 0 inShort = strategy.position_size < 0 inTrade = inLong or inShort dirTxt = inLong ? "β–² LONG" : inShort ? "β–Ό SHORT" : "── FLAT ──" dirCol = inLong ? color.new(color.lime, 20) : inShort ? color.new(color.red, 20) : color.new(color.gray, 60) hdrCol = color.new(#1A237E, 20) valCol = color.new(#0D1117, 40) tCell(0, 0, "FVG STRATEGY v4", hdrCol, color.white) tCell(1, 0, dirTxt, dirCol, color.white) tCell(0, 1, "Entry", valCol, color.gray) tCell(1, 1, inTrade ? "$" + str.tostring(math.round(strategy.position_avg_price, 2)) : "β€”", valCol, color.white) tCell(0, 2, "Stop Loss", valCol, color.gray) tCell(1, 2, inTrade ? "$" + str.tostring(math.round(activeSL, 2)) : "β€”", valCol, color.new(color.red, 20)) tCell(0, 3, "TP 1", valCol, color.gray) tCell(1, 3, inTrade ? "$" + str.tostring(math.round(activeTP1, 2)) : "β€”", valCol, color.new(color.lime, 20)) tCell(0, 4, "TP 2", valCol, color.gray) tCell(1, 4, inTrade ? "$" + str.tostring(math.round(activeTP2, 2)) : "β€”", valCol, color.new(color.lime, 0)) tCell(0, 5, "Setup Score", valCol, color.gray) tCell(1, 5, inTrade ? str.tostring(setupScore) + " / 7" : "β€”", valCol, color.white) tCell(0, 6, "Next Setup", valCol, color.gray) tCell(1, 6, qActive ? (qIsBull ? "β–² Bull queued" : "β–Ό Bear queued") : "None", valCol, qActive ? color.new(color.yellow, 20) : color.new(color.gray, 50)) openPnl = inTrade ? strategy.openprofit : 0.0 pnlCol = openPnl >= 0 ? color.new(color.lime, 20) : color.new(color.red, 20) tCell(0, 7, "Open P&L", valCol, color.gray) tCell(1, 7, inTrade ? "$" + str.tostring(math.round(openPnl, 2)) : "β€”", valCol, pnlCol) wr = strategy.wintrades + strategy.losstrades > 0 ? math.round(strategy.wintrades / (strategy.wintrades + strategy.losstrades) * 100, 1) : 0.0 tCell(0, 8, "Win Rate", valCol, color.gray) tCell(1, 8, str.tostring(wr) + " %", valCol, wr >= 50 ? color.new(color.lime, 20) : color.new(color.orange, 20))

CryptoHub
12 031
l_tp2 := line.new(bar_index, tp2Px, bar_index + 1, tp2Px, color=color.new(#00C853, 0), width=2) lb_entry := label.new(bar_index + 1, close, " Entry $" + str.tostring(math.round(close, 2)), style=label.style_label_right, color=color.new(#1565C0, 10), textcolor=color.white, size=size.small) lb_sl := label.new(bar_index + 1, slPx, " SL $" + str.tostring(math.round(slPx, 2)), style=label.style_label_right, color=color.new(color.red, 10), textcolor=color.white, size=size.small) lb_tp1 := label.new(bar_index + 1, tp1Px, " TP1 (" + str.tostring(i_rr1) + "R) $" + str.tostring(math.round(tp1Px, 2)), style=label.style_label_right, color=color.new(#00C853, 30), textcolor=color.white, size=size.small) lb_tp2 := label.new(bar_index + 1, tp2Px, " TP2 (" + str.tostring(i_rr2) + "R) $" + str.tostring(math.round(tp2Px, 2)), style=label.style_label_right, color=color.new(#00C853, 10), textcolor=color.white, size=size.small) awaitBull := false fvgTop := na fvgBot := na cePx := na // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ SHORT EXECUTION + LEVEL VISUALISATION // ══════════════════════════════════════════════════════════════════════════════ if shortEntry slPx = fvgTop + i_slAtrMult * atr14 risk = slPx - close tp1Px = close - risk * i_rr1 tp2Px = close - risk * i_rr2 entryPx := close activeSL := slPx activeTP1:= tp1Px activeTP2:= tp2Px strategy.entry("Short", strategy.short, comment="FVG Short (" + str.tostring(setupScore) + "/7)") strategy.exit("Short TP1", from_entry="Short", qty_percent=i_tp1Pct, limit=tp1Px, stop=slPx, comment="TP1 $" + str.tostring(math.round(tp1Px, 2))) strategy.exit("Short TP2", from_entry="Short", qty_percent=100, limit=tp2Px, stop=slPx, comment="TP2 $" + str.tostring(math.round(tp2Px, 2))) if i_showLevels line.delete(l_entry) line.delete(l_sl) line.delete(l_tp1) line.delete(l_tp2) label.delete(lb_entry) label.delete(lb_sl) label.delete(lb_tp1) label.delete(lb_tp2) l_entry := line.new(bar_index, close, bar_index + 1, close, color=#1565C0, width=2) l_sl := line.new(bar_index, slPx, bar_index + 1, slPx, color=color.red, width=1, style=line.style_dashed) l_tp1 := line.new(bar_index, tp1Px, bar_index + 1, tp1Px, color=color.new(#00C853, 0), width=1, style=line.style_dashed) l_tp2 := line.new(bar_index, tp2Px, bar_index + 1, tp2Px, color=color.new(#00C853, 0), width=2) lb_entry := label.new(bar_index + 1, close, " Entry $" + str.tostring(math.round(close, 2)), style=label.style_label_right, color=color.new(#1565C0, 10), textcolor=color.white, size=size.small) lb_sl := label.new(bar_index + 1, slPx, " SL $" + str.tostring(math.round(slPx, 2)), style=label.style_label_right, color=color.new(color.red, 10), textcolor=color.white, size=size.small) lb_tp1 := label.new(bar_index + 1, tp1Px, " TP1 (" + str.tostring(i_rr1) + "R) $" + str.tostring(math.round(tp1Px, 2)), style=label.style_label_right, color=color.new(#00C853, 30), textcolor=color.white, size=size.small) lb_tp2 := label.new(bar_index + 1, tp2Px, " TP2 (" + str.tostring(i_rr2) + "R) $" + str.tostring(math.round(tp2Px, 2)), style=label.style_label_right, color=color.new(#00C853, 10), textcolor=color.white, size=size.small) awaitBear := false fvgTop := na fvgBot := na cePx := na // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ EXTEND LEVEL LINES WHILE TRADE IS LIVE

CryptoHub
12 031
// ── Flush queue the bar a trade closes ─────────────────────────────────────── if strategy.position_size == 0 and strategy.position_size[1] != 0 and qActive fvgTop := qFvgTop fvgBot := qFvgBot cePx := (qFvgTop + qFvgBot) / 2 awaitBull := qIsBull awaitBear := not qIsBull setupBar := bar_index setupScore := qScore maxExtBull := qIsBull ? high : na minExtBear := not qIsBull ? low : na drawSetupBox(qFvgTop, qFvgBot, qIsBull, qScore) qFvgTop := na qFvgBot := na qActive := false // ── Continuous FVG refresh (first 8 bars post-breakout) ────────────────────── if awaitBull and not na(setupBar) and (bar_index - setupBar) <= 8 and strategy.position_size == 0 [newGt, newGb] = getBullFVG(3) if not na(newGt) and (newGt - newGb) > (fvgTop - fvgBot) fvgTop := newGt fvgBot := newGb cePx := (newGt + newGb) / 2 if awaitBear and not na(setupBar) and (bar_index - setupBar) <= 8 and strategy.position_size == 0 [newGt, newGb] = getBearFVG(3) if not na(newGt) and (newGt - newGb) > (fvgTop - fvgBot) fvgTop := newGt fvgBot := newGb cePx := (newGt + newGb) / 2 // ── Track post-breakout extension ───────────────────────────────────────────── if awaitBull and not na(maxExtBull) maxExtBull := math.max(maxExtBull, high) if awaitBear and not na(minExtBear) minExtBear := math.min(minExtBear, low) // ── Expire stale setups ──────────────────────────────────────────────────────── if (awaitBull or awaitBear) and not na(setupBar) and (bar_index - setupBar) >= i_boExpiry and strategy.position_size == 0 awaitBull := false awaitBear := false fvgTop := na fvgBot := na cePx := na if strategy.position_size == 0 tp1Done := false // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ ENTRY CONDITIONS // ══════════════════════════════════════════════════════════════════════════════ priceExtBull = not na(maxExtBull) and (maxExtBull - fvgTop) >= i_extMult * atr14 priceExtBear = not na(minExtBear) and (fvgBot - minExtBear) >= i_extMult * atr14 bullEntry = awaitBull and strategy.position_size == 0 and priceExtBull and low <= cePx and close >= fvgBot and close > open shortEntry = awaitBear and strategy.position_size == 0 and priceExtBear and high >= cePx and close <= fvgTop and close < open // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ LONG EXECUTION + LEVEL VISUALISATION // ══════════════════════════════════════════════════════════════════════════════ if bullEntry slPx = fvgBot - i_slAtrMult * atr14 risk = close - slPx tp1Px = close + risk * i_rr1 tp2Px = close + risk * i_rr2 entryPx := close activeSL := slPx activeTP1:= tp1Px activeTP2:= tp2Px strategy.entry("Long", strategy.long, comment="FVG Long (" + str.tostring(setupScore) + "/7)") strategy.exit("Long TP1", from_entry="Long", qty_percent=i_tp1Pct, limit=tp1Px, stop=slPx, comment="TP1 $" + str.tostring(math.round(tp1Px, 2))) strategy.exit("Long TP2", from_entry="Long", qty_percent=100, limit=tp2Px, stop=slPx, comment="TP2 $" + str.tostring(math.round(tp2Px, 2))) if i_showLevels line.delete(l_entry) line.delete(l_sl) line.delete(l_tp1) line.delete(l_tp2) label.delete(lb_entry) label.delete(lb_sl) label.delete(lb_tp1) label.delete(lb_tp2) l_entry := line.new(bar_index, close, bar_index + 1, close, color=#1565C0, width=2) l_sl := line.new(bar_index, slPx, bar_index + 1, slPx, color=color.red, width=1, style=line.style_dashed) l_tp1 := line.new(bar_index, tp1Px, bar_index + 1, tp1Px, color=color.new(#00C853, 0), width=1, style=line.style_dashed)

CryptoHub
12 031
var bool awaitBear = false var int setupBar = na var int setupScore = 0 var float maxExtBull = na var float minExtBear = na var float qFvgTop = na var float qFvgBot = na var bool qIsBull = false var int qScore = 0 var bool qActive = false var float entryPx = na var float activeSL = na var float activeTP1 = na var float activeTP2 = na var bool tp1Done = false var line l_entry = na var line l_sl = na var line l_tp1 = na var line l_tp2 = na var label lb_entry = na var label lb_sl = na var label lb_tp1 = na var label lb_tp2 = na // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ INLINE HELPER β€” draw FVG box + score label // Pure display, no global var writes β€” safe inside a UDF. // ══════════════════════════════════════════════════════════════════════════════ drawSetupBox(gt, gb, isBull, score) => if i_showFVG if isBull box.new(bar_index, gt, bar_index + i_boExpiry, gb, bgcolor=i_bullCol, border_color=color.new(color.lime, 20), border_width=1) label.new(bar_index, gt, "BOβ–² " + str.tostring(score) + "/7", style=label.style_label_down, color=color.new(color.lime, 10), textcolor=color.white, size=size.small) else box.new(bar_index, gb, bar_index + i_boExpiry, gt, bgcolor=i_bearCol, border_color=color.new(color.red, 20), border_width=1) label.new(bar_index, gb, "BOβ–Ό " + str.tostring(score) + "/7", style=label.style_label_up, color=color.new(color.red, 10), textcolor=color.white, size=size.small) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ SETUP ACTIVATION // βœ… All global var writes are in the main scope β€” no UDF involved. // ══════════════════════════════════════════════════════════════════════════════ // ── Bullish breakout ───────────────────────────────────────────────────────── if bullBO and goodVol and inSession score = calcScore(true) if score >= i_minScore [gt, gb] = getBullFVG(i_fvgLB) if not na(gt) if strategy.position_size == 0 and not awaitBull and not awaitBear // Activate immediately fvgTop := gt fvgBot := gb cePx := (gt + gb) / 2 awaitBull := true awaitBear := false setupBar := bar_index setupScore := score maxExtBull := high minExtBear := na drawSetupBox(gt, gb, true, score) else if strategy.position_size != 0 // Queue for instant activation on trade close qFvgTop := gt qFvgBot := gb qIsBull := true qScore := score qActive := true // ── Bearish breakout ───────────────────────────────────────────────────────── if bearBO and goodVol and inSession score = calcScore(false) if score >= i_minScore [gt, gb] = getBearFVG(i_fvgLB) if not na(gt) if strategy.position_size == 0 and not awaitBull and not awaitBear // Activate immediately fvgTop := gt fvgBot := gb cePx := (gt + gb) / 2 awaitBear := true awaitBull := false setupBar := bar_index setupScore := score minExtBear := low maxExtBull := na drawSetupBox(gt, gb, false, score) else if strategy.position_size != 0 // Queue qFvgTop := gt qFvgBot := gb qIsBull := false qScore := score qActive := true

CryptoHub
12 031
ema50_4H = request.security(syminfo.tickerid, "240", ta.ema(close, 50), lookahead=barmerge.lookahead_off) atrRank = ta.percentrank(atr14, 100) goodVol = i_atrPct ? (atrRank >= 30 and atrRank <= 80) : true plot(ema200D, "Daily EMA 200", color.new(color.orange, 40), 2) plot(ema50, "EMA 50", color.new(color.yellow, 50), 1) plot(ema50_4H, "4H EMA 50", color.new(#FF6D00, 50), 1) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ SETUP QUALITY SCORE (max 7 pts) // ══════════════════════════════════════════════════════════════════════════════ calcScore(isBull) => s = 0 s += i_htf ? (isBull ? close > ema200D : close < ema200D) ? 2 : 0 : 0 s += i_htf4h ? (isBull ? close > ema50_4H : close < ema50_4H) ? 2 : 0 : 0 s += i_ema50 ? (isBull ? close > ema50 : close < ema50) ? 1 : 0 : 0 s += i_adx ? adxVal > 18 ? 1 : 0 : 0 s += i_rsiFilter? (rsi14 >= 30 and rsi14 <= 70) ? 1 : 0 : 0 s // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ FVG SCANNER // ══════════════════════════════════════════════════════════════════════════════ getBullFVG(lb) => float gTop = na float gBot = na for i = 0 to lb - 1 bot = high[i + 2] top = low[i] if top > bot and (top - bot) >= i_fvgMinAtr * atr14 gTop := top gBot := bot break [gTop, gBot] getBearFVG(lb) => float gTop = na float gBot = na for i = 0 to lb - 1 top = low[i + 2] bot = high[i] if top > bot and (top - bot) >= i_fvgMinAtr * atr14 gTop := top gBot := bot break [gTop, gBot] // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ SWING HIGH / LOW β€” three levels // ══════════════════════════════════════════════════════════════════════════════ ph = ta.pivothigh(high, i_swingLen, i_swingLen) pl = ta.pivotlow(low, i_swingLen, i_swingLen) var float swingH1 = na var float swingH2 = na var float swingH3 = na var float swingL1 = na var float swingL2 = na var float swingL3 = na if not na(ph) swingH3 := swingH2 swingH2 := swingH1 swingH1 := ph if not na(pl) swingL3 := swingL2 swingL2 := swingL1 swingL1 := pl if i_showBO and not na(ph) line.new(bar_index - i_swingLen, ph, bar_index + 6, ph, color=color.new(#1E90FF, 40), style=line.style_dotted, width=2) if i_showBO and not na(pl) line.new(bar_index - i_swingLen, pl, bar_index + 6, pl, color=color.new(color.fuchsia, 40), style=line.style_dotted, width=2) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ BREAKOUT DETECTION β€” six unconditional crossover calls // ══════════════════════════════════════════════════════════════════════════════ xoH1 = ta.crossover(close, swingH1) xoH2 = ta.crossover(close, swingH2) xoH3 = ta.crossover(close, swingH3) xuL1 = ta.crossunder(close, swingL1) xuL2 = ta.crossunder(close, swingL2) xuL3 = ta.crossunder(close, swingL3) candleRange = high - low candleBody = math.abs(close - open) strongCandle = candleRange > 0 and (candleBody / candleRange) >= i_bodyRatio isBullBO(level, xo) => not na(level) and xo and strongCandle and (close - level) >= i_boStrength * atr14 isBearBO(level, xu) => not na(level) and xu and strongCandle and (level - close) >= i_boStrength * atr14 bullBO = isBullBO(swingH1, xoH1) or isBullBO(swingH2, xoH2) or isBullBO(swingH3, xoH3) bearBO = isBearBO(swingL1, xuL1) or isBearBO(swingL2, xuL2) or isBearBO(swingL3, xuL3) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ STATE VARIABLES // ══════════════════════════════════════════════════════════════════════════════ var float fvgTop = na var float fvgBot = na var float cePx = na var bool awaitBull = false

CryptoHub
12 031
//@version=6 strategy("FVG After Breakout | XAUUSD v4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 2, commission_type = strategy.commission.percent, commission_value = 0.007, slippage = 3, initial_capital = 10000, currency = currency.USD, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500) // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ INPUTS // ══════════════════════════════════════════════════════════════════════════════ i_swingLen = input.int(5, "Swing Length (bars)", group="⚑ Breakout", minval=3, maxval=20) i_boExpiry = input.int(30, "Setup Expiry (bars)", group="⚑ Breakout", minval=5, maxval=100) i_boStrength = input.float(0.1,"Min Breakout Extension (Γ— ATR)", group="⚑ Breakout", minval=0.05, step=0.05) i_bodyRatio = input.float(0.3,"Min Breakout Candle Body Ratio", group="⚑ Breakout", minval=0.1, step=0.05) i_fvgLB = input.int(15, "FVG Search Window (bars)", group="πŸ“¦ FVG", minval=2, maxval=25) i_fvgMinAtr = input.float(0.1,"Min FVG Size (Γ— ATR)", group="πŸ“¦ FVG", minval=0.05, step=0.05) i_extMult = input.float(0.1,"Min Post-BO Extension (Γ— ATR)", group="πŸ“¦ FVG", minval=0.05, step=0.05) i_rr1 = input.float(1.5,"TP1 R : R", group="πŸ’° Risk Mgmt", minval=0.5, step=0.1) i_rr2 = input.float(3.0,"TP2 R : R", group="πŸ’° Risk Mgmt", minval=1.0, step=0.1) i_tp1Pct = input.float(50, "% of Position Closed at TP1", group="πŸ’° Risk Mgmt", minval=10, maxval=90, step=5) i_be = input.bool(true,"Move SL β†’ Breakeven after TP1", group="πŸ’° Risk Mgmt") i_slAtrMult = input.float(0.5,"SL Buffer (Γ— ATR beyond FVG edge)", group="πŸ’° Risk Mgmt", minval=0.1, step=0.1) i_minScore = input.int(2, "Minimum Setup Score (0 – 7)", group="πŸ† Scoring", minval=1, maxval=7) i_htf = input.bool(true, "Daily EMA 200 Filter (+2 pts)", group="πŸ” Filters") i_htf4h = input.bool(true, "4H EMA 50 Filter (+2 pts)", group="πŸ” Filters") i_adx = input.bool(true, "ADX(14) > 18 Trending (+1 pt)", group="πŸ” Filters") i_ema50 = input.bool(true, "EMA 50 Current TF (+1 pt)", group="πŸ” Filters") i_rsiFilter = input.bool(true, "RSI(14) 30–70 Retest (+1 pt)", group="πŸ” Filters") i_atrPct = input.bool(false,"ATR Percentile Filter (30–80th)", group="πŸ” Filters") i_sessionFlt = input.bool(false,"London / NY Session Filter", group="πŸ” Filters") i_showFVG = input.bool(true, "Show FVG Boxes", group="🎨 Display") i_showBO = input.bool(true, "Show Swing Levels", group="🎨 Display") i_showLevels = input.bool(true, "Show Entry / SL / TP Lines", group="🎨 Display") i_showTable = input.bool(true, "Show Live Trade Dashboard", group="🎨 Display") i_bullCol = input.color(color.new(#00C853, 78), "Bull FVG", group="🎨 Display") i_bearCol = input.color(color.new(#D50000, 78), "Bear FVG", group="🎨 Display") // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ SESSION FILTER // ══════════════════════════════════════════════════════════════════════════════ _lon = time(timeframe.period, "0200-1200", "America/New_York") _ny = time(timeframe.period, "0700-1600", "America/New_York") inSession = i_sessionFlt ? (not na(_lon) or not na(_ny)) : true // ══════════════════════════════════════════════════════════════════════════════ // β–‘β–‘ INDICATORS // ══════════════════════════════════════════════════════════════════════════════ atr14 = ta.atr(14) rsi14 = ta.rsi(close, 14) ema50 = ta.ema(close, 50) [_, _, adxVal] = ta.dmi(14, 14) ema200D = request.security(syminfo.tickerid, "D", ta.ema(close, 200), lookahead=barmerge.lookahead_off)