uk
Feedback
CryptoHub

CryptoHub

Відкрити в Telegram

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

Показати більше

📈 Аналітичний огляд Telegram-каналу CryptoHub

Канал CryptoHub (@cryptohub_withn) у мовному сегменті Англійська є активним учасником. На даний момент спільнота об'єднує 12 034 підписників, посідаючи 8 726 місце в категорії Криптовалюти та 1 455 місце у регіоні Нігерія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 12 034 підписників.

За останніми даними від 04 липня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -183, а за останні 24 години на -7, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 8.38%. Протягом перших 24 годин після публікації контент зазвичай збирає N/A% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 009 переглядів. Протягом першої доби публікація в середньому набирає 0 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 4.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як analyst, moonshot, script, uniusdt.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
Welcome to the most loved crypto Community in Africa Admin - https://t.me/niels_official Admin will never Message you first

Завдяки високій частоті оновлень (останні дані отримано 05 липня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Криптовалюти.

12 034
Підписники
-724 години
-507 днів
-18330 день
Архів дописів
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)