ar
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

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام CryptoHub

تُعد قناة CryptoHub (@cryptohub_withn) في القطاع اللغوي الإنكليزية لاعباً نشطاً. يضم المجتمع حالياً 12 034 مشتركاً، محتلاً المرتبة 8 726 في فئة العملات المشفرة والمرتبة 1 455 في منطقة Nigeria.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 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)