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 069 مشتركاً، محتلاً المرتبة 8 775 في فئة العملات المشفرة والمرتبة 1 457 في منطقة Nigeria.

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

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 12 069 مشتركاً.

بحسب آخر البيانات بتاريخ 28 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -196، وفي آخر 24 ساعة بمقدار -6، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 8.35‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 3.21‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 1 008 مشاهدة. وخلال اليوم الأول يجمع عادةً 388 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 8.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل 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

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 29 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة العملات المشفرة.

12 069
المشتركون
-624 ساعات
-547 أيام
-19630 أيام

جاري تحميل البيانات...

سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
يونيو '26
يونيو '26
+96
في 1 قنوات
مايو '26
+8
في 0 قنوات
Get PRO
أبريل '26
+4
في 0 قنوات
Get PRO
مارس '26
+10
في 0 قنوات
Get PRO
فبراير '26
+2
في 0 قنوات
Get PRO
يناير '26
+3
في 0 قنوات
Get PRO
ديسمبر '25
+15
في 0 قنوات
Get PRO
نوفمبر '25
+31
في 0 قنوات
Get PRO
أكتوبر '25
+22
في 0 قنوات
Get PRO
سبتمبر '25
+138
في 2 قنوات
Get PRO
أغسطس '25
+44
في 0 قنوات
Get PRO
يوليو '25
+206
في 1 قنوات
Get PRO
يونيو '25
+17
في 0 قنوات
Get PRO
مايو '25
+240
في 2 قنوات
Get PRO
أبريل '25
+45
في 1 قنوات
Get PRO
مارس '25
+153
في 1 قنوات
Get PRO
فبراير '25
+204
في 0 قنوات
Get PRO
يناير '25
+1 269
في 0 قنوات
Get PRO
ديسمبر '24
+932
في 0 قنوات
Get PRO
نوفمبر '24
+5 069
في 0 قنوات
Get PRO
أكتوبر '24
+1 232
في 0 قنوات
Get PRO
سبتمبر '24
+3 511
في 0 قنوات
Get PRO
أغسطس '24
+6 275
في 1 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
29 يونيو0
28 يونيو0
27 يونيو0
26 يونيو0
25 يونيو0
24 يونيو0
23 يونيو0
22 يونيو0
21 يونيو0
20 يونيو0
19 يونيو0
18 يونيو0
17 يونيو0
16 يونيو+4
15 يونيو0
14 يونيو0
13 يونيو+5
12 يونيو+87
11 يونيو0
10 يونيو0
09 يونيو0
08 يونيو0
07 يونيو0
06 يونيو0
05 يونيو0
04 يونيو0
03 يونيو0
02 يونيو0
01 يونيو0
منشورات القناة

2
I just uploaded one of my best leverage strategy For Nojai bot 🤖 https://vt.tiktok.com/ZSCRq9Ahs/
784
3
Day3 | AI Trading automation and strategy tutorial https://youtu.be/0glERNJ0oUU
924
4
Day2 Trading automation and strategy tutorial https://youtu.be/gpyOUuiehhA
848
5
Can anyone hear me?
874
6
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 💰
943
7
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.
972
8
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? 🤭
1 089
9
If you live in Abuja and would like to attend Rain Conference with me I just created a WhatsApp community for communication h
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
1 469
10
4. tv_health_check
1 322
11
3. (Tradingview app location)
1 295
12
2. /path/to/Tradingview.app/Contents/Mac0S/Tradingview --remote-debugging-port=9222
1 300
13
1. https://github.com/LewisWJackson/tradingview-mcp-jackson2.
1 348
14
// ══════════════════════════════════════════════════════════════════════════════ // ░░ 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")
1 389
15
// ══════════════════════════════════════════════════════════════════════════════ 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))
591
16
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
344
17
// ── 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)
324
18
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
338
19
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
406
20
//@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)
475