MNO_2Step_Strategy_MOU_KAKU (Publish-Clear)//@version=5
strategy("MNO_2Step_Strategy_MOU_KAKU (Publish-Clear)", overlay=true, pyramiding=0,
max_labels_count=500, max_lines_count=500,
initial_capital=100000,
default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// =========================
// Inputs
// =========================
emaSLen = input.int(5, "EMA Short (5)")
emaMLen = input.int(13, "EMA Mid (13)")
emaLLen = input.int(26, "EMA Long (26)")
macdFast = input.int(12, "MACD Fast")
macdSlow = input.int(26, "MACD Slow")
macdSignal = input.int(9, "MACD Signal")
macdZeroTh = input.float(0.2, "MOU: MACD near-zero threshold", step=0.05)
volLookback = input.int(5, "Volume MA days", minval=1)
volMinRatio = input.float(1.3, "MOU: Volume ratio min", step=0.1)
volStrong = input.float(1.5, "Strong volume ratio (Breakout/KAKU)", step=0.1)
volMaxRatio = input.float(3.0, "Volume ratio max (filter)", step=0.1)
wickBodyMult = input.float(2.0, "Pinbar: lowerWick >= body*x", step=0.1)
pivotLen = input.int(20, "Resistance lookback", minval=5)
pullMinPct = input.float(5.0, "Pullback min (%)", step=0.1)
pullMaxPct = input.float(15.0, "Pullback max (%)", step=0.1)
breakLookbackBars = input.int(5, "Pullback route: valid bars after break", minval=1)
// --- Breakout route (押し目なし初動ブレイク) ---
useBreakoutRoute = input.bool(true, "Enable MOU Breakout Route (no pullback)")
breakConfirmPct = input.float(0.3, "Break confirm: close > R*(1+%)", step=0.1)
bigBodyLookback = input.int(20, "Break candle body MA length", minval=5)
bigBodyMult = input.float(1.2, "Break candle: body >= MA*mult", step=0.1)
requireCloseNearHigh = input.bool(true, "Break candle: close near high")
closeNearHighPct = input.float(25.0, "Close near high threshold (% of range)", step=1.0)
allowMACDAboveZeroInstead = input.bool(true, "Breakout route: allow MACD GC above zero instead")
// 表示
showEMA = input.bool(true, "Plot EMAs")
showMouLabels = input.bool(true, "Show MOU/MOU-B labels")
showKakuLabels = input.bool(true, "Show KAKU labels")
showDebugTbl = input.bool(true, "Show debug table (last bar)")
showStatusLbl = input.bool(true, "Show status label (last bar always)")
locChoice = input.string("Below Bar", "Label location", options= )
lblLoc = locChoice == "Below Bar" ? location.belowbar : location.abovebar
// =========================
// 必ず決済が起きる設定(投稿クリア用)
// =========================
enableTPSL = input.bool(true, "Enable TP/SL")
tpPct = input.float(2.0, "Take Profit (%)", step=0.1, minval=0.1) // ←投稿クリア向けに近め
slPct = input.float(1.0, "Stop Loss (%)", step=0.1, minval=0.1) // ←投稿クリア向けに近め
maxHoldBars = input.int(30, "Max bars in trade (force close)", minval=1)
entryMode = input.string("MOU or KAKU", "Entry trigger", options= )
// ✅ 保険:トレード0件を避ける(投稿クリア用)
// 1回でもクローズトレードができたら自動で沈黙
publishAssist = input.bool(true, "Publish Assist (safety entry if 0 trades)")
// =========================
// EMA
// =========================
emaS = ta.ema(close, emaSLen)
emaM = ta.ema(close, emaMLen)
emaL = ta.ema(close, emaLLen)
plot(showEMA ? emaS : na, color=color.new(color.yellow, 0), title="EMA 5")
plot(showEMA ? emaM : na, color=color.new(color.blue, 0), title="EMA 13")
plot(showEMA ? emaL : na, color=color.new(color.orange, 0), title="EMA 26")
emaUpS = emaS > emaS
emaUpM = emaM > emaM
emaUpL = emaL > emaL
goldenOrder = emaS > emaM and emaM > emaL
above26_2days = close > emaL and close > emaL
baseTrendOK = (emaUpS and emaUpM and emaUpL) and goldenOrder and above26_2days
// =========================
// MACD
// =========================
= ta.macd(close, macdFast, macdSlow, macdSignal)
macdGC = ta.crossover(macdLine, macdSig)
macdUp = macdLine > macdLine
macdNearZero = math.abs(macdLine) <= macdZeroTh
macdGCAboveZero = macdGC and macdLine > 0 and macdSig > 0
macdMouOK = macdGC and macdNearZero and macdUp
macdBreakOK = allowMACDAboveZeroInstead ? (macdMouOK or macdGCAboveZero) : macdMouOK
// =========================
// Volume
// =========================
volMA = ta.sma(volume, volLookback)
volRatio = volMA > 0 ? (volume / volMA) : na
volumeMouOK = volRatio >= volMinRatio and volRatio <= volMaxRatio
volumeStrongOK = volRatio >= volStrong and volRatio <= volMaxRatio
// =========================
// Candle patterns
// =========================
body = math.abs(close - open)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
pinbar = (lowerWick >= wickBodyMult * body) and (lowerWick > upperWick) and (close >= open)
bullEngulf = close > open and close < open and close >= open and open <= close
bigBull = close > open and open < emaM and close > emaS and (body > ta.sma(body, 20))
candleOK = pinbar or bullEngulf or bigBull
// =========================
// Resistance / Pullback route
// =========================
res = ta.highest(high, pivotLen)
pullbackPct = res > 0 ? (res - close) / res * 100.0 : na
pullbackOK = pullbackPct >= pullMinPct and pullbackPct <= pullMaxPct
brokeRes = ta.crossover(close, res )
barsSinceBreak = ta.barssince(brokeRes)
afterBreakZone = (barsSinceBreak >= 0) and (barsSinceBreak <= breakLookbackBars)
pullbackRouteOK = afterBreakZone and pullbackOK
// =========================
// Breakout route (押し目なし初動ブレイク)
// =========================
breakConfirm = close > res * (1.0 + breakConfirmPct / 100.0)
bullBreak = close > open
bodyMA = ta.sma(body, bigBodyLookback)
bigBodyOK = bodyMA > 0 ? (body >= bodyMA * bigBodyMult) : false
rng = math.max(high - low, syminfo.mintick)
closeNearHighOK = not requireCloseNearHigh ? true : ((high - close) / rng * 100.0 <= closeNearHighPct)
mou_breakout = useBreakoutRoute and baseTrendOK and breakConfirm and bullBreak and bigBodyOK and closeNearHighOK and volumeStrongOK and macdBreakOK
mou_pullback = baseTrendOK and volumeMouOK and candleOK and macdMouOK and pullbackRouteOK
mou = mou_pullback or mou_breakout
// =========================
// KAKU (Strict): 8条件 + 最終三点
// =========================
cond1 = emaUpS and emaUpM and emaUpL
cond2 = goldenOrder
cond3 = above26_2days
cond4 = macdGCAboveZero
cond5 = volumeMouOK
cond6 = candleOK
cond7 = pullbackOK
cond8 = pullbackRouteOK
all8_strict = cond1 and cond2 and cond3 and cond4 and cond5 and cond6 and cond7 and cond8
final3 = pinbar and macdGCAboveZero and volumeStrongOK
kaku = all8_strict and final3
// =========================
// Entry (strategy)
// =========================
entrySignal = entryMode == "KAKU only" ? kaku : (mou or kaku)
canEnter = strategy.position_size == 0
newEntryKaku = canEnter and kaku and entrySignal
newEntryMouB = canEnter and (not kaku) and mou_breakout and entrySignal
newEntryMou = canEnter and (not kaku) and mou_pullback and entrySignal
// --- Publish Assist(保険エントリー) ---
// 条件が厳しすぎて「トレード0件」だと投稿時に警告が出る。
// closedtradesが0の間だけ、軽いEMAクロスで1回だけ拾う(その後は沈黙)。
assistFast = ta.ema(close, 5)
assistSlow = ta.ema(close, 20)
assistEntry = publishAssist and strategy.closedtrades == 0 and canEnter and ta.crossover(assistFast, assistSlow)
// 実エントリー
if newEntryKaku or newEntryMouB or newEntryMou or assistEntry
strategy.entry("LONG", strategy.long)
// ラベル(視認)
if showMouLabels and newEntryMou
label.new(bar_index, low, "猛(IN)", style=label.style_label_up, color=color.new(color.lime, 0), textcolor=color.black)
if showMouLabels and newEntryMouB
label.new(bar_index, low, "猛B(IN)", style=label.style_label_up, color=color.new(color.lime, 0), textcolor=color.black)
if showKakuLabels and newEntryKaku
label.new(bar_index, low, "確(IN)", style=label.style_label_up, color=color.new(color.yellow, 0), textcolor=color.black)
if assistEntry
label.new(bar_index, low, "ASSIST(IN)", style=label.style_label_up, color=color.new(color.aqua, 0), textcolor=color.black)
// =========================
// Exit (TP/SL + 強制クローズ)
// =========================
inPos = strategy.position_size > 0
tpPx = inPos ? strategy.position_avg_price * (1.0 + tpPct/100.0) : na
slPx = inPos ? strategy.position_avg_price * (1.0 - slPct/100.0) : na
if enableTPSL
strategy.exit("TP/SL", from_entry="LONG", limit=tpPx, stop=slPx)
// 最大保有バーで強制決済(これが「レポート無し」回避の最後の保険)
var int entryBar = na
if strategy.position_size > 0 and strategy.position_size == 0
entryBar := bar_index
if strategy.position_size == 0
entryBar := na
forceClose = inPos and not na(entryBar) and (bar_index - entryBar >= maxHoldBars)
if forceClose
strategy.close("LONG")
// =========================
// 利確/損切/強制クローズのラベル
// =========================
closedThisBar = (strategy.position_size > 0) and (strategy.position_size == 0)
avgPrev = strategy.position_avg_price
tpPrev = avgPrev * (1.0 + tpPct/100.0)
slPrev = avgPrev * (1.0 - slPct/100.0)
hitTP = closedThisBar and high >= tpPrev
hitSL = closedThisBar and low <= slPrev
// 同一足TP/SL両方は厳密に判断できないので、表示は「TP優先」で簡略(投稿ギリギリ版)
if hitTP
label.new(bar_index, high, "利確", style=label.style_label_down, color=color.new(color.lime, 0), textcolor=color.black)
else if hitSL
label.new(bar_index, low, "損切", style=label.style_label_up, color=color.new(color.red, 0), textcolor=color.white)
else if closedThisBar and forceClose
label.new(bar_index, close, "時間決済", style=label.style_label_left, color=color.new(color.gray, 0), textcolor=color.white)
// =========================
// Signals (猛/猛B/確)
// =========================
plotshape(showMouLabels and mou_pullback and not kaku, title="MOU_PULLBACK", style=shape.labelup, text="猛",
color=color.new(color.lime, 0), textcolor=color.black, location=lblLoc, size=size.tiny)
plotshape(showMouLabels and mou_breakout and not kaku, title="MOU_BREAKOUT", style=shape.labelup, text="猛B",
color=color.new(color.lime, 0), textcolor=color.black, location=lblLoc, size=size.tiny)
plotshape(showKakuLabels and kaku, title="KAKU", style=shape.labelup, text="確",
color=color.new(color.yellow, 0), textcolor=color.black, location=lblLoc, size=size.small)
// =========================
// Alerts
// =========================
alertcondition(mou, title="MNO_MOU", message="MNO: MOU triggered")
alertcondition(mou_breakout, title="MNO_MOU_BREAKOUT", message="MNO: MOU Breakout triggered")
alertcondition(mou_pullback, title="MNO_MOU_PULLBACK", message="MNO: MOU Pullback triggered")
alertcondition(kaku, title="MNO_KAKU", message="MNO: KAKU triggered")
alertcondition(assistEntry, title="MNO_ASSIST_ENTRY", message="MNO: ASSIST ENTRY (publish safety)")
// =========================
// Status label(最終足に必ず表示)
// =========================
var label status = na
if showStatusLbl and barstate.islast
label.delete(status)
statusTxt =
"MNO RUNNING " +
"ClosedTrades: " + str.tostring(strategy.closedtrades) + " " +
"BaseTrend: " + (baseTrendOK ? "OK" : "NO") + " " +
"MOU: " + (mou ? "YES" : "no") + " (猛=" + (mou_pullback ? "Y" : "n") + " / 猛B=" + (mou_breakout ? "Y" : "n") + ") " +
"KAKU: " + (kaku ? "YES" : "no") + " " +
"VolRatio: " + (na(volRatio) ? "na" : str.tostring(volRatio, format.mintick)) + " " +
"Pull%: " + (na(pullbackPct) ? "na" : str.tostring(pullbackPct, format.mintick)) + " " +
"Pos: " + (inPos ? "IN" : "OUT")
status := label.new(bar_index, high, statusTxt, style=label.style_label_left, textcolor=color.white, color=color.new(color.black, 0))
// =========================
// Debug table(最終足のみ)
// =========================
var table t = table.new(position.top_right, 2, 14, border_width=1, border_color=color.new(color.white, 60))
fRow(_name, _cond, _r) =>
bg = _cond ? color.new(color.lime, 70) : color.new(color.red, 80)
tx = _cond ? "OK" : "NO"
table.cell(t, 0, _r, _name, text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(t, 1, _r, tx, text_color=color.white, bgcolor=bg)
if showDebugTbl and barstate.islast
table.cell(t, 0, 0, "MNO Debug", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(t, 1, 0, "", text_color=color.white, bgcolor=color.new(color.black, 0))
fRow("BaseTrend", baseTrendOK, 1)
fRow("MOU Pullback", mou_pullback, 2)
fRow("MOU Breakout", mou_breakout, 3)
fRow("Break confirm", breakConfirm, 4)
fRow("Break big body", bigBodyOK, 5)
fRow("Break close high", closeNearHighOK, 6)
fRow("Break vol strong", volumeStrongOK, 7)
fRow("Break MACD", macdBreakOK, 8)
fRow("KAKU all8", all8_strict, 9)
fRow("KAKU final3", final3, 10)
fRow("AssistEntry", assistEntry, 11)
fRow("ClosedTrades>0", strategy.closedtrades > 0, 12)
Indicadores y estrategias
Day of WeekDay of Week is an indicator that runs in a separate panel and colors the panel background according to the day of the week.
Main Features
Colors the background of the lower panel based on the day of the week
Includes all days, from Monday to Sunday
Customizable colors
Time Offset Correction
TradingView calculates the day of the week using the exchange’s timezone, which can cause visual inconsistencies on certain symbols.
To address this, the indicator includes a configurable time offset that allows the user to synchronize the calculated day with the day displayed on the chart.
By simply adjusting the Time Offset (hours) parameter, the background will align correctly with the visible chart calendar.
just takesi TimeMNO_2Step_Strategy_MOU_KAKU (Publish-Clear)//@version=5
strategy("MNO_2Step_Strategy_MOU_KAKU (Publish-Clear)", overlay=true, pyramiding=0,
max_labels_count=500, max_lines_count=500,
initial_capital=100000,
default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// =========================
// Inputs
// =========================
emaSLen = input.int(5, "EMA Short (5)")
emaMLen = input.int(13, "EMA Mid (13)")
emaLLen = input.int(26, "EMA Long (26)")
macdFast = input.int(12, "MACD Fast")
macdSlow = input.int(26, "MACD Slow")
macdSignal = input.int(9, "MACD Signal")
macdZeroTh = input.float(0.2, "MOU: MACD near-zero threshold", step=0.05)
volLookback = input.int(5, "Volume MA days", minval=1)
volMinRatio = input.float(1.3, "MOU: Volume ratio min", step=0.1)
volStrong = input.float(1.5, "Strong volume ratio (Breakout/KAKU)", step=0.1)
volMaxRatio = input.float(3.0, "Volume ratio max (filter)", step=0.1)
wickBodyMult = input.float(2.0, "Pinbar: lowerWick >= body*x", step=0.1)
pivotLen = input.int(20, "Resistance lookback", minval=5)
pullMinPct = input.float(5.0, "Pullback min (%)", step=0.1)
pullMaxPct = input.float(15.0, "Pullback max (%)", step=0.1)
breakLookbackBars = input.int(5, "Pullback route: valid bars after break", minval=1)
// --- Breakout route (押し目なし初動ブレイク) ---
useBreakoutRoute = input.bool(true, "Enable MOU Breakout Route (no pullback)")
breakConfirmPct = input.float(0.3, "Break confirm: close > R*(1+%)", step=0.1)
bigBodyLookback = input.int(20, "Break candle body MA length", minval=5)
bigBodyMult = input.float(1.2, "Break candle: body >= MA*mult", step=0.1)
requireCloseNearHigh = input.bool(true, "Break candle: close near high")
closeNearHighPct = input.float(25.0, "Close near high threshold (% of range)", step=1.0)
allowMACDAboveZeroInstead = input.bool(true, "Breakout route: allow MACD GC above zero instead")
// 表示
showEMA = input.bool(true, "Plot EMAs")
showMouLabels = input.bool(true, "Show MOU/MOU-B labels")
showKakuLabels = input.bool(true, "Show KAKU labels")
showDebugTbl = input.bool(true, "Show debug table (last bar)")
showStatusLbl = input.bool(true, "Show status label (last bar always)")
locChoice = input.string("Below Bar", "Label location", options= )
lblLoc = locChoice == "Below Bar" ? location.belowbar : location.abovebar
// =========================
// 必ず決済が起きる設定(投稿クリア用)
// =========================
enableTPSL = input.bool(true, "Enable TP/SL")
tpPct = input.float(2.0, "Take Profit (%)", step=0.1, minval=0.1) // ←投稿クリア向けに近め
slPct = input.float(1.0, "Stop Loss (%)", step=0.1, minval=0.1) // ←投稿クリア向けに近め
maxHoldBars = input.int(30, "Max bars in trade (force close)", minval=1)
entryMode = input.string("MOU or KAKU", "Entry trigger", options= )
// ✅ 保険:トレード0件を避ける(投稿クリア用)
// 1回でもクローズトレードができたら自動で沈黙
publishAssist = input.bool(true, "Publish Assist (safety entry if 0 trades)")
// =========================
// EMA
// =========================
emaS = ta.ema(close, emaSLen)
emaM = ta.ema(close, emaMLen)
emaL = ta.ema(close, emaLLen)
plot(showEMA ? emaS : na, color=color.new(color.yellow, 0), title="EMA 5")
plot(showEMA ? emaM : na, color=color.new(color.blue, 0), title="EMA 13")
plot(showEMA ? emaL : na, color=color.new(color.orange, 0), title="EMA 26")
emaUpS = emaS > emaS
emaUpM = emaM > emaM
emaUpL = emaL > emaL
goldenOrder = emaS > emaM and emaM > emaL
above26_2days = close > emaL and close > emaL
baseTrendOK = (emaUpS and emaUpM and emaUpL) and goldenOrder and above26_2days
// =========================
// MACD
// =========================
= ta.macd(close, macdFast, macdSlow, macdSignal)
macdGC = ta.crossover(macdLine, macdSig)
macdUp = macdLine > macdLine
macdNearZero = math.abs(macdLine) <= macdZeroTh
macdGCAboveZero = macdGC and macdLine > 0 and macdSig > 0
macdMouOK = macdGC and macdNearZero and macdUp
macdBreakOK = allowMACDAboveZeroInstead ? (macdMouOK or macdGCAboveZero) : macdMouOK
// =========================
// Volume
// =========================
volMA = ta.sma(volume, volLookback)
volRatio = volMA > 0 ? (volume / volMA) : na
volumeMouOK = volRatio >= volMinRatio and volRatio <= volMaxRatio
volumeStrongOK = volRatio >= volStrong and volRatio <= volMaxRatio
// =========================
// Candle patterns
// =========================
body = math.abs(close - open)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
pinbar = (lowerWick >= wickBodyMult * body) and (lowerWick > upperWick) and (close >= open)
bullEngulf = close > open and close < open and close >= open and open <= close
bigBull = close > open and open < emaM and close > emaS and (body > ta.sma(body, 20))
candleOK = pinbar or bullEngulf or bigBull
// =========================
// Resistance / Pullback route
// =========================
res = ta.highest(high, pivotLen)
pullbackPct = res > 0 ? (res - close) / res * 100.0 : na
pullbackOK = pullbackPct >= pullMinPct and pullbackPct <= pullMaxPct
brokeRes = ta.crossover(close, res )
barsSinceBreak = ta.barssince(brokeRes)
afterBreakZone = (barsSinceBreak >= 0) and (barsSinceBreak <= breakLookbackBars)
pullbackRouteOK = afterBreakZone and pullbackOK
// =========================
// Breakout route (押し目なし初動ブレイク)
// =========================
breakConfirm = close > res * (1.0 + breakConfirmPct / 100.0)
bullBreak = close > open
bodyMA = ta.sma(body, bigBodyLookback)
bigBodyOK = bodyMA > 0 ? (body >= bodyMA * bigBodyMult) : false
rng = math.max(high - low, syminfo.mintick)
closeNearHighOK = not requireCloseNearHigh ? true : ((high - close) / rng * 100.0 <= closeNearHighPct)
mou_breakout = useBreakoutRoute and baseTrendOK and breakConfirm and bullBreak and bigBodyOK and closeNearHighOK and volumeStrongOK and macdBreakOK
mou_pullback = baseTrendOK and volumeMouOK and candleOK and macdMouOK and pullbackRouteOK
mou = mou_pullback or mou_breakout
// =========================
// KAKU (Strict): 8条件 + 最終三点
// =========================
cond1 = emaUpS and emaUpM and emaUpL
cond2 = goldenOrder
cond3 = above26_2days
cond4 = macdGCAboveZero
cond5 = volumeMouOK
cond6 = candleOK
cond7 = pullbackOK
cond8 = pullbackRouteOK
all8_strict = cond1 and cond2 and cond3 and cond4 and cond5 and cond6 and cond7 and cond8
final3 = pinbar and macdGCAboveZero and volumeStrongOK
kaku = all8_strict and final3
// =========================
// Entry (strategy)
// =========================
entrySignal = entryMode == "KAKU only" ? kaku : (mou or kaku)
canEnter = strategy.position_size == 0
newEntryKaku = canEnter and kaku and entrySignal
newEntryMouB = canEnter and (not kaku) and mou_breakout and entrySignal
newEntryMou = canEnter and (not kaku) and mou_pullback and entrySignal
// --- Publish Assist(保険エントリー) ---
// 条件が厳しすぎて「トレード0件」だと投稿時に警告が出る。
// closedtradesが0の間だけ、軽いEMAクロスで1回だけ拾う(その後は沈黙)。
assistFast = ta.ema(close, 5)
assistSlow = ta.ema(close, 20)
assistEntry = publishAssist and strategy.closedtrades == 0 and canEnter and ta.crossover(assistFast, assistSlow)
// 実エントリー
if newEntryKaku or newEntryMouB or newEntryMou or assistEntry
strategy.entry("LONG", strategy.long)
// ラベル(視認)
if showMouLabels and newEntryMou
label.new(bar_index, low, "猛(IN)", style=label.style_label_up, color=color.new(color.lime, 0), textcolor=color.black)
if showMouLabels and newEntryMouB
label.new(bar_index, low, "猛B(IN)", style=label.style_label_up, color=color.new(color.lime, 0), textcolor=color.black)
if showKakuLabels and newEntryKaku
label.new(bar_index, low, "確(IN)", style=label.style_label_up, color=color.new(color.yellow, 0), textcolor=color.black)
if assistEntry
label.new(bar_index, low, "ASSIST(IN)", style=label.style_label_up, color=color.new(color.aqua, 0), textcolor=color.black)
// =========================
// Exit (TP/SL + 強制クローズ)
// =========================
inPos = strategy.position_size > 0
tpPx = inPos ? strategy.position_avg_price * (1.0 + tpPct/100.0) : na
slPx = inPos ? strategy.position_avg_price * (1.0 - slPct/100.0) : na
if enableTPSL
strategy.exit("TP/SL", from_entry="LONG", limit=tpPx, stop=slPx)
// 最大保有バーで強制決済(これが「レポート無し」回避の最後の保険)
var int entryBar = na
if strategy.position_size > 0 and strategy.position_size == 0
entryBar := bar_index
if strategy.position_size == 0
entryBar := na
forceClose = inPos and not na(entryBar) and (bar_index - entryBar >= maxHoldBars)
if forceClose
strategy.close("LONG")
// =========================
// 利確/損切/強制クローズのラベル
// =========================
closedThisBar = (strategy.position_size > 0) and (strategy.position_size == 0)
avgPrev = strategy.position_avg_price
tpPrev = avgPrev * (1.0 + tpPct/100.0)
slPrev = avgPrev * (1.0 - slPct/100.0)
hitTP = closedThisBar and high >= tpPrev
hitSL = closedThisBar and low <= slPrev
// 同一足TP/SL両方は厳密に判断できないので、表示は「TP優先」で簡略(投稿ギリギリ版)
if hitTP
label.new(bar_index, high, "利確", style=label.style_label_down, color=color.new(color.lime, 0), textcolor=color.black)
else if hitSL
label.new(bar_index, low, "損切", style=label.style_label_up, color=color.new(color.red, 0), textcolor=color.white)
else if closedThisBar and forceClose
label.new(bar_index, close, "時間決済", style=label.style_label_left, color=color.new(color.gray, 0), textcolor=color.white)
// =========================
// Signals (猛/猛B/確)
// =========================
plotshape(showMouLabels and mou_pullback and not kaku, title="MOU_PULLBACK", style=shape.labelup, text="猛",
color=color.new(color.lime, 0), textcolor=color.black, location=lblLoc, size=size.tiny)
plotshape(showMouLabels and mou_breakout and not kaku, title="MOU_BREAKOUT", style=shape.labelup, text="猛B",
color=color.new(color.lime, 0), textcolor=color.black, location=lblLoc, size=size.tiny)
plotshape(showKakuLabels and kaku, title="KAKU", style=shape.labelup, text="確",
color=color.new(color.yellow, 0), textcolor=color.black, location=lblLoc, size=size.small)
// =========================
// Alerts
// =========================
alertcondition(mou, title="MNO_MOU", message="MNO: MOU triggered")
alertcondition(mou_breakout, title="MNO_MOU_BREAKOUT", message="MNO: MOU Breakout triggered")
alertcondition(mou_pullback, title="MNO_MOU_PULLBACK", message="MNO: MOU Pullback triggered")
alertcondition(kaku, title="MNO_KAKU", message="MNO: KAKU triggered")
alertcondition(assistEntry, title="MNO_ASSIST_ENTRY", message="MNO: ASSIST ENTRY (publish safety)")
// =========================
// Status label(最終足に必ず表示)
// =========================
var label status = na
if showStatusLbl and barstate.islast
label.delete(status)
statusTxt =
"MNO RUNNING " +
"ClosedTrades: " + str.tostring(strategy.closedtrades) + " " +
"BaseTrend: " + (baseTrendOK ? "OK" : "NO") + " " +
"MOU: " + (mou ? "YES" : "no") + " (猛=" + (mou_pullback ? "Y" : "n") + " / 猛B=" + (mou_breakout ? "Y" : "n") + ") " +
"KAKU: " + (kaku ? "YES" : "no") + " " +
"VolRatio: " + (na(volRatio) ? "na" : str.tostring(volRatio, format.mintick)) + " " +
"Pull%: " + (na(pullbackPct) ? "na" : str.tostring(pullbackPct, format.mintick)) + " " +
"Pos: " + (inPos ? "IN" : "OUT")
status := label.new(bar_index, high, statusTxt, style=label.style_label_left, textcolor=color.white, color=color.new(color.black, 0))
// =========================
// Debug table(最終足のみ)
// =========================
var table t = table.new(position.top_right, 2, 14, border_width=1, border_color=color.new(color.white, 60))
fRow(_name, _cond, _r) =>
bg = _cond ? color.new(color.lime, 70) : color.new(color.red, 80)
tx = _cond ? "OK" : "NO"
table.cell(t, 0, _r, _name, text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(t, 1, _r, tx, text_color=color.white, bgcolor=bg)
if showDebugTbl and barstate.islast
table.cell(t, 0, 0, "MNO Debug", text_color=color.white, bgcolor=color.new(color.black, 0))
table.cell(t, 1, 0, "", text_color=color.white, bgcolor=color.new(color.black, 0))
fRow("BaseTrend", baseTrendOK, 1)
fRow("MOU Pullback", mou_pullback, 2)
fRow("MOU Breakout", mou_breakout, 3)
fRow("Break confirm", breakConfirm, 4)
fRow("Break big body", bigBodyOK, 5)
fRow("Break close high", closeNearHighOK, 6)
fRow("Break vol strong", volumeStrongOK, 7)
fRow("Break MACD", macdBreakOK, 8)
fRow("KAKU all8", all8_strict, 9)
fRow("KAKU final3", final3, 10)
fRow("AssistEntry", assistEntry, 11)
fRow("ClosedTrades>0", strategy.closedtrades > 0, 12)
X-Trend Macro Command CenterX-Trend Macro Command Center (MCC) | Institutional Grade Dashboard
📝 Description Body
The Invisible Engine of the Market Revealed.
Traders often focus solely on Price Action, ignoring the massive underwater currents that actually drive trends: Global Liquidity, Inflation, and Central Bank Policy. We created X-Trend Macro Command Center (MCC) to solve this problem.
This is not just an indicator. It is a fundamental heads-up display that bridges the gap between technical charts and macroeconomic reality.
💡 The Idea & Philosophy
Markets don't move in a vacuum. Bull runs are fueled by M2 Money Supply expansion and negative real yields. Crashes are triggered by liquidity crunches and aggressive rate hikes. X-Trend MCC was built to give retail traders the same "Macro Awareness" that institutional desks possess. It aggregates fragmented economic data from Federal Reserve databases (FRED) directly onto your chart in real-time.
🚀 Application & Logic
This tool is designed for Trend Traders, Crypto Investors, and Macro Analysts.
Identify the Regime: Instantly see if the environment is "RISK ON" (High Liquidity, Low Real Rates) or "RISK OFF" (Monetary Tightening).
Validate the Trend: Don't buy the dip if Liquidity (M2) is crashing. Don't short the rally if Real Yields are negative.
Multi-Region Analysis: Switch instantly between economic powerhouses (US, China, Japan) to see where the capital is flowing.
📊 Dashboard Metrics Explained
Every row in the Command Center tells a specific story about the economy:
Interest Rate: The "Gravity" of finance. Higher rates weigh down risk assets (Stocks/Crypto).
Inflation (YoY): The erosion of purchasing power. We calculate this dynamically based on CPI data.
Real Yield (The "Golden" Metric): Calculated as Interest Rate - Inflation.
Green: Real Yield is low/negative. Cash is trash, assets fly.
Red: Real Yield is high. Cash is King, assets struggle.
US Debt & GDP: Fiscal health indicators formatted in Trillions ($T). Watch the Debt-to-GDP ratio—if it spikes >120%, expect currency debasement.
M2 Money Supply: The fuel tank of the market. Tracks the total amount of money in circulation.
↗ Trend: Liquidity is entering the system (Bullish).
↘ Trend: Liquidity is drying up (Bearish).
🧩 The X-Trend Ecosystem
X-Trend MCC is just the tip of the iceberg. This module is part of the larger X-Trend Project — a comprehensive suite of algorithmic tools being developed to quantify market chaos. While our Price Action algorithms (Lite/Pro/Ultra) handle the Micro, the MCC handles the Macro.
Technical Note:
Data Sources: Direct connection to FRED (Federal Reserve Economic Data).
Zero Repainting: Historical data is requested strictly using closed bars to ensure accuracy.
Open Source: We believe in transparency. The code is open for study under MPL 2.0.
Build by Dev0880 | X-Trend © 2025
EMA 8 / 20 / 200Created to easily use the 8/20/200 strategy.
This indicator is designed to give a clear, multi-timeframe view of trend, momentum, and structure using three exponential moving averages.
1. Trend direction (EMA 200 – pink)
The 200 EMA acts as the long-term trend filter.
Price above the 200 EMA suggests a bullish market bias.
Price below the 200 EMA suggests a bearish market bias.
Many traders avoid taking trades against this higher-timeframe direction.
2. Momentum and trade bias (EMA 20 – blue)
The 20 EMA reflects short-term momentum.
When price respects the 20 EMA in an uptrend, pullbacks often provide continuation entries.
In downtrends, the 20 EMA frequently acts as dynamic resistance.
3. Entry timing (EMA 8 – yellow)
The 8 EMA is a fast reaction line used for precise timing.
Crosses of the 8 EMA over the 20 EMA can signal momentum shifts.
Strong trends often show price holding above (or below) the 8 EMA during impulse moves.
4. Confluence and trade filtering
The indicator works best when the EMAs are aligned:
Bullish alignment: EMA 8 > EMA 20 > EMA 200
Bearish alignment: EMA 8 < EMA 20 < EMA 200
Misaligned EMAs usually indicate consolidation or low-probability conditions.
5. Risk management context
EMAs can act as dynamic support and resistance:
Stops are often placed beyond the 20 EMA or 200 EMA depending on trade horizon.
Loss of EMA structure is a warning sign that the trend may be weakening.
In short, the indicator is a trend-first, momentum-second framework that helps you decide when to trade, in which direction, and when to stay out.
Expectativa de Juros (Fed)An indicator that measures future expectations for US interest rates, measured by the difference between the Fed's interest rate and pricing on the CME.
Monthly Hotness RSI (Auto-Calibrated)Indicator of the previous months volatility/vol compared to averages over the last 3-5 years. helps show trend and if the market is 'hot'. indicator is good for showing favourable market conditions.
Pivot Trend [ChartPrime]The Pivot Trend indicator is a tool designed to identify potential trend reversals based on pivot points in the price action. It helps traders spot shifts in market sentiment and anticipate changes in price direction.
◈ User Inputs:
Left Bars: Specifies the number of bars to the left of the current bar to consider when calculating pivot points.
Right Bars: Specifies the number of bars to the right of the current bar to consider when calculating pivot points.
Offset: Adjusts the sensitivity of pivot point detection.
◈ Indicator Calculation:
The indicator calculates pivot points based on the highest and lowest prices within a specified range of bars. It then determines the trend direction based on whether the current price crossed above upper band or crossed below lower band.
Upper and Lower Bands
◈ Visualization:
Trend direction is indicated by the color of the plotted lines, with blue representing an upward trend and red representing a downward trend.
Buy and sell signals are marked on the chart with corresponding symbols (🅑 for buy signals and 🅢 for sell signals).
Buy and sell signals generated by the indicator can be used in conjunction with other technical analysis tools to confirm trading decisions and manage risk.
Overall, the Pivot Trend indicator offers traders a simple yet effective method for identifying potential trend changes and capturing trading opportunities in the market. Adjusting the input parameters allows for customization according to individual trading preferences and market conditions.
Trend Prediction Meter [PointAlgo]The Trend Prediction Meter & Levels is a composite market-bias and volatility visualization tool designed to summarize trend strength, momentum, price positioning, and volatility into a single normalized score.
It provides a structured framework to interpret directional bias and probable price expansion zones during active market conditions.
Concept Overview
Markets often reflect multiple conditions simultaneously—trend direction, momentum strength, price location within a range, and volatility.
This indicator combines these elements into a unified Bullish Score (0–100), displayed as a meter and supported by projected ATR-based levels.
Rather than focusing on a single signal, the script aims to present context about current market conditions.
Bullish Score Composition (0–100)
The meter represents a weighted blend of multiple market factors:
1. Trend Strength (EMA Structure)
Uses a fast and slow EMA to assess directional bias.
The distance between EMAs is normalized into a trend strength score.
Strong separation indicates directional conviction; compression suggests balance.
2. Momentum Strength (RSI Blend)
Combines a short-term and mid-term RSI.
Helps capture both immediate momentum and broader directional stability.
Higher readings indicate sustained bullish pressure, lower readings indicate bearish pressure.
3. Position Within Recent Range
Measures where price is trading relative to its recent high–low range.
Values near the top of the range reflect strength; values near the bottom reflect weakness.
Mid-range positioning indicates equilibrium.
4. Volume Participation
Compares current volume against its recent average.
Acts as a minor confidence modifier rather than a primary driver.
Each component is normalized and combined using fixed weights to produce a final Bullish Score between 0 and 100.
Bias Classification
The Bullish Score is translated into descriptive market states:
Extreme Bullish
Very Bullish
Bullish
Neutral
Bearish
Very Bearish
These labels describe current bias, not future certainty.
Meter Visualization
The meter plot dynamically changes color based on the score range.
A dashed midline at 50 represents balance.
Background shading highlights strong bullish or bearish dominance zones.
Crossovers of the 50-level indicate shifts in directional control.
ATR-Based Projection Levels:
To provide volatility context, the indicator calculates ATR-based upside and downside reference levels:
Two potential expansion levels (TP1 and TP2) are projected above and below price.
The distance of these levels adapts based on current bias strength.
These levels are contextual reference zones, not fixed targets.
Prediction Dashboard
An optional side table summarizes key readings at the most recent bar:
Symbol
Current bias label
Bullish Score
Current price
ATR value
Upside and downside projection levels
Directional comment (Upside favoured / Downside favoured / Balanced)
This dashboard is designed to provide a quick structural overview without requiring manual calculation.
Signals & Alerts
Built-in alerts are available for:
Bullish bias conditions
Bearish bias conditions
Bullish Score crossing above 50
Bullish Score crossing below 50
Alerts are informational and reflect internal state changes only.
Customization:
Users can adjust:
RSI lengths
EMA lengths
Range lookback period
ATR parameters
Display options for the meter and dashboard
This allows adaptation across different instruments and timeframes.
Usage Notes
Best suited for analytical interpretation rather than standalone decision-making.
Designed to complement price action, structure, or other indicators.
Works across multiple markets where volume and volatility data are available.
Disclaimer :
This indicator is intended for educational and analytical purposes only.
It does not provide investment, trading, or financial advice.
All signals and levels should be validated with independent analysis and appropriate risk management.
Relative Strength Index_YJ//@version=5
indicator(title="MACD_YJ", shorttitle="MACD_YJ",format=format.price, precision=2)
source = close
useCurrentRes = input.bool(true, title="Use Current Chart Resolution?")
resCustom = input.timeframe("60", title="Use Different Timeframe? Uncheck Box Above")
smd = input.bool(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input.bool(false, title="Show Dots When MacD Crosses Signal Line?")
sh = input.bool(true, title="Show Histogram?")
macd_colorChange = input.bool(true, title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input.bool(true, title="MacD Histogram 4 Colors?")
// === Divergence inputs ===
grpDiv = "Divergence"
calculateDivergence = input.bool(true, title="Calculate Divergence", group=grpDiv, tooltip="피벗 기반 정/역배 다이버전스 탐지 및 알람 사용")
lookbackRight = input.int(5, "Lookback Right", group=grpDiv, minval=1)
lookbackLeft = input.int(5, "Lookback Left", group=grpDiv, minval=1)
rangeUpper = input.int(60, "Bars Range Upper", group=grpDiv, minval=1)
rangeLower = input.int(5, "Bars Range Lower", group=grpDiv, minval=1)
bullColor = input.color(color.new(#4CAF50, 0), "Bull Color", group=grpDiv)
bearColor = input.color(color.new(#F23645, 0), "Bear Color", group=grpDiv)
textColor = color.white
noneColor = color.new(color.white, 100)
res = useCurrentRes ? timeframe.period : resCustom
fastLength = input.int(12, minval=1)
slowLength = input.int(26, minval=1)
signalLength= input.int(9, minval=1)
fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)
macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal
outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)
// 가격도 같은 res로
hi_res = request.security(syminfo.tickerid, res, high)
lo_res = request.security(syminfo.tickerid, res, low)
// ── Histogram 색
histA_IsUp = outHist > outHist and outHist > 0
histA_IsDown = outHist < outHist and outHist > 0
histB_IsDown = outHist < outHist and outHist <= 0
histB_IsUp = outHist > outHist and outHist <= 0
macd_IsAbove = outMacD >= outSignal
plot_color = hist_colorChange ? (histA_IsUp ? color.new(#00FF00, 0) :
histA_IsDown ? color.new(#006900, 0) :
histB_IsDown ? color.new(#FF0000, 0) :
histB_IsUp ? color.new(#670000, 0) : color.yellow) : color.gray
macd_color = macd_colorChange ? color.new(#00ffff, 0) : color.new(#00ffff, 0)
signal_color = color.rgb(240, 232, 166)
circleYPosition = outSignal
// 골든/데드 크로스 (경고 해결: 먼저 계산)
isBullCross = ta.crossover(outMacD, outSignal)
isBearCross = ta.crossunder(outMacD, outSignal)
cross_color = isBullCross ? color.new(#00FF00, 0) : isBearCross ? color.new(#FF0000, 0) : na
// ── 플롯
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=plot.style_histogram, linewidth=5)
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=1)
plot(smd and outSignal? outSignal: na, title="Signal Line", color=signal_color, style=plot.style_line, linewidth=1)
plot(sd and (isBullCross or isBearCross) ? circleYPosition : na,
title="Cross", style=plot.style_circles, linewidth=3, color=cross_color)
hline(0, "0 Line", linestyle=hline.style_dotted, color=color.white)
// =====================
// Divergence (정배/역배) - 피벗 비교
// =====================
_inRange(cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
plFound = false
phFound = false
bullCond = false
bearCond = false
macdLBR = outMacD
if calculateDivergence
// 정배: 가격 LL, MACD HL
plFound := not na(ta.pivotlow(outMacD, lookbackLeft, lookbackRight))
macdHL = macdLBR > ta.valuewhen(plFound, macdLBR, 1) and _inRange(plFound )
lowLBR = lo_res
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and macdHL and plFound
// 역배: 가격 HH, MACD LH
phFound := not na(ta.pivothigh(outMacD, lookbackLeft, lookbackRight))
macdLH = macdLBR < ta.valuewhen(phFound, macdLBR, 1) and _inRange(phFound )
highLBR = hi_res
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and macdLH and phFound
// 시각화 (editable 파라미터 삭제)
plot(plFound ? macdLBR : na, offset=-lookbackRight, title="Regular Bullish (MACD)",
linewidth=2, color=(bullCond ? bullColor : noneColor), display=display.pane)
plotshape(bullCond ? macdLBR : na, offset=-lookbackRight, title="Bullish Label",
text=" Bull ", style=shape.labelup, location=location.absolute, color=bullColor, textcolor=textColor, display=display.pane)
plot(phFound ? macdLBR : na, offset=-lookbackRight, title="Regular Bearish (MACD)",
linewidth=2, color=(bearCond ? bearColor : noneColor), display=display.pane)
plotshape(bearCond ? macdLBR : na, offset=-lookbackRight, title="Bearish Label",
text=" Bear ", style=shape.labeldown, location=location.absolute, color=bearColor, textcolor=textColor, display=display.pane)
// 알람
alertcondition(bullCond, title="MACD Regular Bullish Divergence",
message="MACD 정배 다이버전스 발견: 현재 봉에서 lookbackRight 만큼 좌측.")
alertcondition(bearCond, title="MACD Regular Bearish Divergence",
message="MACD 역배 다이버전스 발견: 현재 봉에서 lookbackRight 만큼 좌측.")
EMA 5/9 Angle + Candle Strength (SL=Open, TP=RR)EMA 5 / EMA 9 cross
Cross must have ~30° angle (approximated using slope → atan)
Entry candle must be bullish/bearish and also be Normal / 2nd Most / Most based on body-size percentile
Entry = close of signal candle
SL = open of signal candle
TP = 1:2 RR (editable input)
premium//@version=5
indicator("Custom Binance Premium Index + Alerts", overlay=false)
// === 1. 数据源(可修改) ===
// 永续合约价格(默认 BTCUSDT 永续)
futures = request.security("BINANCE:BTCUSDT_PERP", timeframe.period, close)
// 现货价格(默认 BTCUSDT 现货)
spot = request.security("BINANCE:BTCUSDT", timeframe.period, close)
// === 2. 计算自定义溢价指数 ===
premium = ((futures / spot) - 1) * 100
// === 3. 用户设定阈值(你给的值) ===
upper = 1.5 // 溢价 ≥ 1.5 触发告警
lower = -2.0 // 溢价 ≤ -2.0 触发告警
// === 4. 绘图 ===
plot(premium, title="Premium Index (%)", color=color.new(color.blue, 0))
hline(upper, "Upper Threshold (1.5%)", color=color.new(color.red, 0))
hline(lower, "Lower Threshold (-2.0%)", color=color.new(color.green, 0))
// === 5. 告警条件 ===
alertcondition(premium >= upper,
title="溢价 ≥ 1.5%",
message="Premium Index ≥ 1.5%(永续合约偏高,多头较强)"
)
alertcondition(premium <= lower,
title="溢价 ≤ -2.0%",
message="Premium Index ≤ -2.0%(永续合约偏低,空头压力大)"
)
// === 6. 信息显示 ===
label.new(bar_index, premium, "Premium: " + str.tostring(premium, "#.##") + "%",
style=label.style_label_left, color=color.new(color.blue, 85))
RSI + STOCH RSI - Marx_CapitalSimple RSI + STOCH RSI indicator in one pane. In addition to the standard 30/70 and 20/80 RSI levels you have three adjustable levels (eg. 0, 50, 100) to indicate STOCH RSI overbought/oversold scenarios.
Monthly DI+ & RSI StrategyOverview This strategy is designed to capture significant trend reversals and continuations on the Monthly timeframe. It combines the trend-following capability of the Directional Movement Index (DMI) with the fast momentum detection of RSI (Period 6).
Core Logic The strategy triggers a long position based on a dual-confirmation system. It looks for a specific "handshake" between Trend (DI) and Momentum (RSI).
Entry Conditions (OR Logic) A Buy signal is generated if EITHER of the following occurs:
Trend Trigger: DI+ crosses over DI- (while RSI is already bullish, trading above its SMA).
Momentum Trigger: RSI(6) crosses over RSI SMA(14) (while the trend is already bullish, with DI+ > DI-).
Exit Condition (Stop Loss)
Trend Reversal: The position is closed immediately if DI- crosses over DI+, indicating the bullish trend has been invalidated.
Default Settings
Timeframe: Optimized for 1M (Monthly) charts.
RSI: Length 6
RSI SMA: Length 14
DMI: Length 14 / Smoothing 14
Risk Warning This script is for educational purposes only. Past performance does not guarantee future results. Always backtest on your specific asset classes before trading.
RMI Valid FVG & IFVGRMI • Valid FVG & iFVG (Smart Money Concept)
RMI • Valid FVG & iFVG is a precision-focused Fair Value Gap indicator designed for traders who follow Smart Money Concepts (SMC) / ICT logic and want to filter out low-quality, random gaps.
This indicator does not plot every FVG.
It highlights only structurally relevant FVGs that form in the direction of the trend and have a high probability of being filled.
Core Features
Bullish & Bearish Fair Value Gaps
Inverse Fair Value Gaps (iFVG)
Trend-aligned FVG filtering
Automatic invalidation after mitigation
Clean background zones for clear visibility
Optimized for intraday trading
Adjustable settings for scalping, intraday & swing trading
Smart Filtering Logic
FVGs are validated using market structure context
Only FVGs that form within the active trend are displayed
Weak or low-probability gaps are ignored
Inverse FVGs appear after strong displacement and rejection
Zones are visually faded once mitigated
This helps reduce chart noise and keeps the focus on high-probability reaction zones.
Best Use Cases
Entry refinement after BOS / CHoCH
Confluence with liquidity grabs
Premium / discount zone trading
Intraday & session-based trading
Works well with ICT, SMC, price action & structure-based strategies
Recommended Timeframes
Scalping: M1 – M5
Intraday (default): M5 – M15
Swing Trading: M15 – H1
(Default settings are optimized for intraday trading.)
Important Notes
This is not a signal indicator
No repainting
No buy/sell arrows
Designed as a decision-support tool, not an automated system
Always combine with proper risk management and confirmation.
RMI • Precision over noise.
Trade structure, not randomness.
VR Volume Ratio + Divergence (Pro)成交量比率 (Volume Ratio, VR) 是一項通過分析股價上漲與下跌日的成交量,來研判市場資金氣氛的技術指標。本腳本基於傳統 VR 公式進行了優化,增加了**「趨勢變色」與「自動背離偵測」**功能,幫助交易者更精準地捕捉量價轉折點。
Introduction
Volume Ratio (VR) is a technical indicator that measures the strength of a trend by comparing the volume on up-days versus down-days. This script enhances the classic VR formula with "Trend Color Coding" and "Auto-Divergence Detection", helping traders identify volume-price reversals more accurately.
核心功能與參數
公式原理: VR = (Qu + Qf/2) / (Qd + Qf/2) * 100
Qu: 上漲日成交量 (Up volume)
Qd: 下跌日成交量 (Down volume)
Qf: 平盤日成交量 (Flat volume)
參數 (Length):預設為 26 日,這是市場公認最有效的短中線參數。
關鍵水位線 (Key Levels):
< 40% (底部區):量縮極致,市場情緒冰點,常對應股價底部,適合尋找買點。
100% (中軸):多空分界線。
> 260% (多頭警戒):進入強勢多頭行情,但需注意過熱。
> 450% (頭部區):成交量過大,市場情緒亢奮,通常為頭部訊號。
視覺優化 (Visuals):
紅漲綠跌:當 VR 數值大於前一日顯示為紅色(動能增強);小於前一日顯示為綠色(動能退潮)。
背離訊號 (Divergence):自動標記量價背離。
▲ 底背離 (Bullish):股價創新低,但 VR 指標墊高(主力吸籌)。
▼ 頂背離 (Bearish):股價創新高,但 VR 指標走弱(買氣衰竭)。
Features & Settings
Formula Logic: Calculated as VR = (Qu + Qf/2) / (Qd + Qf/2) * 100.
Default Length: 26, widely regarded as the optimal setting for short-to-medium term analysis.
Key Zones:
< 40% (Oversold/Bottom): Extreme low volume, often indicating a market bottom and potential buying opportunity.
100% (Neutral): The balance point between bulls and bears.
> 260% (Bullish Zone): Strong uptrend, volume is expanding.
> 450% (Overbought/Top): Extreme high volume, often indicating a market top and potential reversal.
Visual Enhancements:
Color Coding: Line turns Red when VR rises (Momentum Up) and Green when VR falls (Momentum Down).
Divergence Signals: Automatically marks divergence points on the chart.
▲ Bullish Divergence: Price makes a lower low, but VR makes a higher low (Accumulation).
▼ Bearish Divergence: Price makes a higher high, but VR makes a lower high (Distribution).
應用策略建議
抄底策略:當 VR 跌破 40% 後,指標線由綠翻紅,或出現「▲底背離」訊號時,為極佳的波段進場點。
逃頂策略:當 VR 衝過 450% 進入高檔區,一旦指標線由紅翻綠,或出現「▼頂背離」訊號時,建議分批獲利了結。
Strategy Guide
Bottom Fishing: Look for entries when VR drops below 40% and turns red, or when a "▲ Bullish Divergence" label appears.
Taking Profit: Consider selling when VR exceeds 450% and turns green, or when a "▼ Bearish Divergence" label appears.
Disclaimer: This tool is for informational purposes only and does not constitute financial advice. / 本腳本僅供參考,不構成投資建議。
RSI Divergence LiquidityRSI Divergence Liquidity is an indicator designed to help you catch high-probability BUY reversals by combining two powerful concepts:
OANDA:XAUUSD
Liquidity Sweep / Swing Low: automatically marks swing-low levels and tracks when price sweeps below them and reacts back.
Bullish RSI Divergence: filters noise by comparing RSI at the swing area versus RSI at the retest, favoring reversals with stronger momentum confirmation.
How it works
The script draws Swing Low lines using Pivot Lows. When a new Swing Low forms, the previous one is cut/frozen .
When price retests a Swing Low and the candle conditions are met (bar n bullish, bar n-1 bearish), the script checks:
Whether RSI at n/n-1 is higher than the RSI at the swing (bullish divergence logic)
Whether min RSI at the swing is below a threshold (default < 36) to focus on oversold swing areas
If all conditions pass, the indicator prints an upward triangle right when bar n closes → a potential BUY signal.
How to use
Enter BUY when an up triangle appears at/near the Swing Low (liquidity sweep zone).
Stop Loss idea: below the most recent swing low / below the sweep wick.
Take Profit idea: nearest supply zone, prior high, or fixed RR such as 1:2 / 1:3 depending on your system.
Recommended settings
Best on: M5–H1 (depending on your style), especially effective when price is trending down and performs a clear sweep.
For stricter filtering: lower Max minRSI at Swing (x) to only take signals from deeper RSI lows.
Smaller Pivot Lookback → more swings/signals; larger values → fewer but cleaner swings.
Note: This tool improves probability, not certainty. Combine it with market structure / key levels and proper risk management for best results.
MA20 ATR Trend Failure FilterA volatility-adaptive filter designed to identify early trend invalidation.
This indicator combines a 20-period Moving Average (MA20) with Average True Range (ATR) to dynamically define a lower volatility boundary.
When price closes below this boundary, it signals that the current trend is no longer valid and risk is increasing.
Core Concept(核心思想)
MA defines the trend baseline
ATR measures current market volatility
MA − k × ATR forms a dynamic risk threshold
A close below this threshold = trend failure
👉 中文补充:
这不是反转指标,而是趋势失效过滤器,用于避免在趋势已经被破坏后继续持仓或加仓。
How It Works
Calculate MA20 as the trend reference
Calculate ATR(14) as volatility proxy
Build adaptive bands:
Upper Band = MA20 + k × ATR
Lower Band = MA20 − k × ATR
If close < Lower Band, trend is considered failed
The ATR multiplier k automatically adjusts the tolerance based on volatility, avoiding rigid fixed-percentage rules.
Visual Elements
Yellow line: MA20
Green band: MA20 + k × ATR
Red band: MA20 − k × ATR (key risk boundary)
Red triangle + “FAIL” label: Trend failure signal
Optional background shading to highlight risk zones
Typical Use Cases
Trend-following strategies (exit / reduce exposure)
Breakout strategies (filter false continuation)
Risk management overlay (non-intrusive, no repaint)
Combine with HMA, SuperTrend, structure-based entries
👉 中文补充:
非常适合作为**“不该再拿”的客观判断条件**,而不是频繁交易信号。
Why This Indicator
Volatility-adaptive (ATR-based)
No future data, no repaint
Simple logic, strong risk control
Works across stocks, crypto, futures, indices
This tool is designed to answer one question only:
Is the current trend still valid?
Parameters
MA Length (default: 20)
ATR Length (default: 14)
ATR Multiplier k (default: 0.8)
Lower k → stricter risk control
Higher k → more tolerance, fewer false signals SSE:600595
Daily Open Shift The "Daily Open Shift" System (V2.0)
1. The Setup (Indicators & Timeframe)
• Timeframe: 15-Minute Chart (Execution).
• Key Levels: Daily Open (DO) or New York Open (NYO).
• Trend Indicators:
o 24 & 42 EMA Ribbon (Exponential Moving Averages).
o 30-Minute Supertrend.
________________________________________
2. Phase 1: Establish The Bias (The Filter)
This is the V2 upgrade. We do not trade against the day's opening momentum.
1. Mark the Open: Draw a horizontal line at the Daily Open (00:00) or Session Open.
2. The "First 2H" Rule: Observe the price action for the first 2 hours after the open.
o First 2H are Green/Bullish? → You are LONG BIAS only for the rest of the session. (Ignore all sell signals).
o First 2H are Red/Bearish? → You are SHORT BIAS only for the rest of the session. (Ignore all buy signals).
________________________________________
3. Phase 2: The Signal (The Switch)
Wait for the chart to confirm your bias technically.
1. The Switch: Price must cross and close a 15M candle on the correct side of the Daily Open.
o Longs: Price switches from below to above DO.
o Shorts: Price switches from above to below DO.
2. Indicator Confluence:
o EMAs: Must be crossed in your direction (Green for Long, Red for Short).
o 30M Supertrend: Must match your direction.
________________________________________
4. Phase 3: The Entry (The Trigger)
We never chase the breakdown. We wait for the price to come to us.
1. The Pullback: Wait for the price to retrace and touch/wick into the 24/42 EMA Ribbon.
2. The Confirmation: Watch the candle that touches the EMA.
o It must reject the EMA (wick off it) and close respecting the trend.
o Do not enter if the candle closes forcefully through the EMA, breaking structure.
3. Execution: Enter Market Order immediately on that candle close.
________________________________________
5. Phase 4: Risk Management (The Math)
This is the V2 upgrade. We aim for higher profitability.
1. Stop Loss (SL):
o Longs: Placed strictly below the lowest EMA band.
o Shorts: Placed strictly above the highest EMA band.
o Logic: If price crosses the EMA band completely, the trend is dead. Get out.
2. Take Profit (TP):
o FIXED 3R (Reward = 3x Risk).
o Example: If Risk is $100, TP is set to make $300.
o Rule: Do not move the TP. Do not close early. Let the math play out.
________________________________________
Summary Checklist (Print This)
Time: Is the First 2H bias clear? (Green=Buy / Red=Sell)
Switch: Did price close above/below the Daily Open?
Trend: Are EMAs crossed and Supertrend agreeing?
Patience: Did I wait for the price to pull back to the EMA band?
Trigger: Did the candle close respecting the EMA?
Execution: Market Entry + Stop Loss behind EMA + Fixed 3R Target.
Mindset: Am I at "2/10" emotion? Set the trade and walk away.
Session Volume Profile Sniffer: HVN & Rejection ZonesA simple tool built for traders who rely on intraday volume structure.
What this script does
This script tracks volume distribution inside a selected session and highlights two key price levels:
High Volume Nodes (HVNs) — areas where price spent time building heavy participation.
Low Volume Nodes (LVNs) — thin zones where price moved quickly with very little interest.
Instead of plotting a full profile, this tool gives you the exact rejection-level lines you usually hunt manually.
Why these levels matter
HVN → price tends to react, stall, or flip direction
LVN → price often rejects strongly since liquidity is thin
Rejection patterns around these areas give clean entry signals
Positioning trades around HVN/LVN helps filter noise in choppy sessions
This script removes the trouble of drawing profiles, counting bins, or guessing node levels. Everything is calculated inside the session you choose.
How the detection works
Inside your session window, the script:
1. Tracks each tick-based price bucket
2. Accumulates raw volume for every bucket
Identifies:
HVNs = buckets with volume above a tier
LVNs = buckets with volume below a tier
3. Prints each level as a single clean line
4. Generates:
Long signal → bounce from LVN
Short signal → rejection from HVN
Built-in exits use ATR-based conditions for quick testing.
Features
Session-based volume mapping
HVN + LVN levels drawn automatically
Entry triggers based on rejection
ATR exits for experimental backtests
Clean, minimal visual output
Best use cases
Intraday futures
Index scalping
FX sessions (London / NY)
Crypto sessions (user-timed)
Anyone who trades around volume structure
Adjustable settings
Session window
Volume bin size
HVN multiplier
LVN multiplier
Enable/disable zone lines
This keeps it flexible enough for both scalpers and slow-paced intraday setups.
Important note
This script is built for study + idea testing.
It is not intended as a final system.
Once you identify how price behaves around these nodes, you can blend this tool into your own setup.






















