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 123 名订阅者,在 加密货币 类别中位列第 8 863,并在 尼日利亚 地区排名第 1 461 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 12 123 名订阅者。
根据 22 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -213,过去 24 小时变化为 -9,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 8.09%。内容发布后 24 小时内通常能获得 3.04% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 981 次浏览,首日通常累积 369 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 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”
凭借高频更新(最新数据采集于 23 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 加密货币 类别中的关键影响点。
12 123
订阅者
-924 小时
-727 天
-21330 天
数据加载中...
吸引订阅者
六月 '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个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 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 | Day2 Trading automation and strategy tutorial
https://youtu.be/gpyOUuiehhA | 301 |
| 3 | Can anyone hear me? | 421 |
| 4 | 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 💰 | 465 |
| 5 | 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. | 518 |
| 6 | 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? 🤭 | 695 |
| 7 | 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 206 |
| 8 | 4. tv_health_check | 1 081 |
| 9 | 3. (Tradingview app location) | 1 048 |
| 10 | 2. /path/to/Tradingview.app/Contents/Mac0S/Tradingview --remote-debugging-port=9222 | 1 045 |
| 11 | 1. https://github.com/LewisWJackson/tradingview-mcp-jackson2. | 1 049 |
| 12 | // ══════════════════════════════════════════════════════════════════════════════
// ░░ 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 051 |
| 13 | // ══════════════════════════════════════════════════════════════════════════════
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 |
| 14 | 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 |
| 15 | // ── 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 |
| 16 | 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 |
| 17 | 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 |
| 18 | //@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 |
| 19 | Day1 | Trading Automation & Strategy Tutorial
https://youtu.be/K_XsPia5-CE | 777 |
| 20 | Today we start day 2 same time,
6:30pm
Don’t miss | 767 |
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
