CryptoHub
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) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة العملات المشفرة.
جاري تحميل البيانات...
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 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 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
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 |
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
