$JPY Catalyst Posts
July 07, 2026Single-day social intelligence recap and verified catalyst posts ยท โ Back to $JPY Profile ยท Market Rankings
๐ฌ Curated Viral Posts & Community Evidence
1 source posts analyzedยท 2026-07-07T23:02:01.344000+00:00Trading View Alerts Suite - Pinescript // @version= 6 // ============================================================================ // APEX ALERT SUITE v3 โ every chartable alert, now timeframe-aware. // // Each module fires only on chart timeframes where the signal means // something. Gating is ON by default (toggle "Enforce recommended // timeframes" to override). // // MODULE / RECOMMENDED CHART TF: // 1 Multi-TF RSI levels ........ fires each TF only if chart <= that TF // 2 RSI+MACD combo ............. 5m - 4H // 3 TRIPLE CONFIRM ............. 5m - D // 4a EMA fast crosses (9x20,20x50) 15m+ // 4b EMA slow crosses (x100,x200) 1H+ // 4c GOLDEN/DEATH cross .......... 1H+ (canonical on DAILY) // 5 RSI divergence ............. 15m+ // 6 Quad stochastics ........... 15m+ // 7 MTF trend alignment ........ chart <= 15m (pulls D/4H/1H/15M) // Daily trend flip ........... chart <= 4H // 8 All-time H/L ............... any TF // 9 Volume/range anomaly ....... 5m+ // 10 DXY/JPY/VIX movers ......... 15m+ // 11 Liquidity sweep / SFP ...... 5m+ // 12 Prev day/week H-L breaks ... intraday only (<= 1H) // 13 Session opens .............. <= 30m // 14 Round-number cross ......... <= 1H // 15 Squeeze fire ............... 15m+ // 16 SuperTrend flip ............ 15m+ // 17 VWAP cross ................. 5m - 30m (session VWAP is intraday) // 18 ATR spike .................. 15m+ // 19 Engulfing .................. 15m+ // 20 Close streak ............... 15m+ // 21 Gap open ................... 15m+ // 22 BB walk .................... 15m+ // 23 Correlation flip vs SPX .... 1H+ // // PRACTICAL SETUP: two alerts per symbol cover the full spectrum โ // one on a 5m chart (fast modules) + one on a 1H chart (slow modules). // Setup per chart: ONE alert -> "Any alert() function call". // ============================================================================ indicator("Apex Alert Suite v3", overlay=true, max_labels_count=500) // ------------------------------- toggles ------------------------------- useTfGate = input.bool(true, "Enforce recommended timeframes", group="Master") useRsiMTF = input.bool(true, "1 Multi-TF RSI levels", group="Modules") useRsiMacd = input.bool(true, "2 RSI+MACD combo", group="Modules") useTriple = input.bool(true, "3 Triple confirm", group="Modules") useEmaX = input.bool(true, "4 EMA crosses + golden/death", group="Modules") useDiv = input.bool(true, "5 RSI divergence", group="Modules") useQuadSto = input.bool(true, "6 Quad stochastics", group="Modules") useTrendMTF = input.bool(true, "7 MTF trend alignment", group="Modules") useATHL = input.bool(true, "8 All-time H/L", group="Modules") useAnomaly = input.bool(true, "9 Volume/range anomaly", group="Modules") useMacro = input.bool(true, "10 DXY/JPY/VIX movers", group="Modules") useSFP = input.bool(true, "11 Liquidity sweep / SFP", group="Modules") usePrevHL = input.bool(true, "12 Prev day/week H-L breaks", group="Modules") useSessions = input.bool(true, "13 London / NY session opens", group="Modules") useRound = input.bool(true, "14 Round-number cross", group="Modules") useSqueeze = input.bool(true, "15 Squeeze fire", group="Modules") useSTrend = input.bool(true, "16 SuperTrend flip", group="Modules") useVWAP = input.bool(true, "17 VWAP cross", group="Modules") useATRspike = input.bool(true, "18 ATR spike", group="Modules") useEngulf = input.bool(true, "19 Engulfing", group="Modules") useStreak = input.bool(true, "20 Close streak", group="Modules") useGap = input.bool(true, "21 Gap open", group="Modules") useBBwalk = input.bool(true, "22 BB walk", group="Modules") useCorr = input.bool(true, "23 Correlation flip vs SPX", group="Modules") comboWin = input.int(3, "Combo window (bars)", minval=1, group="Params") streakN = input.int(5, "Streak length", minval=3, group="Params") sweepLen = input.int(20, "SFP swing lookback", minval=5, group="Params") conf = barstate.isconfirmed S = syminfo.ticker atr14 = ta.atr(14) // chart timeframe in minutes + gate helper cm = timeframe.in_seconds() / 60.0 tfOK(minM, maxM) => not useTfGate or (cm >= minM and cm <= maxM) BIG = 1000000.0 // ---------------- 1. multi-TF RSI level crosses ---------------- // each requested TF only fires when the chart TF is <= it (requesting a // LOWER timeframe than the chart returns misleading data) r4h = request.security(syminfo.tickerid, "240", ta.rsi(close, 14)) r1h = request.security(syminfo.tickerid, "60", ta.rsi(close, 14)) r15 = request.security(syminfo.tickerid, "15", ta.rsi(close, 14)) r5m = request.security(syminfo.tickerid, "5", ta.rsi(close, 14)) fLvl(r, tfName, tfMin) => if conf and useRsiMTF and (not useTfGate or cm <= tfMin) if ta.crossunder(r, 30) alert(S + " " + tfName + " RSI x-DOWN 30 (" + str.tostring(r, "#.#") + ")", alert.freq_once_per_bar) if ta.crossunder(r, 25) alert(S + " " + tfName + " RSI x-DOWN 25 (" + str.tostring(r, "#.#") + ")", alert.freq_once_per_bar) if ta.crossover(r, 65) alert(S + " " + tfName + " RSI x-UP 65 (" + str.tostring(r, "#.#") + ")", alert.freq_once_per_bar) if ta.crossover(r, 70) alert(S + " " + tfName + " RSI x-UP 70 (" + str.tostring(r, "#.#") + ")", alert.freq_once_per_bar) if ta.crossover(r, 75) alert(S + " " + tfName + " RSI x-UP 75 (" + str.tostring(r, "#.#") + ")", alert.freq_once_per_bar) fLvl(r4h, "4H", 240) fLvl(r1h, "1H", 60) fLvl(r15, "15M", 15) fLvl(r5m, "5M", 5) // ---------------- 2. RSI + MACD combo (5m - 4H) ---------------- rsi14 = ta.rsi(close, 14) rsiMa = ta.sma(rsi14, 9) [macdL, macdS, macdH] = ta.macd(close, 12, 26, 9) rsiXup = ta.crossover(rsi14, rsiMa) rsiXdn = ta.crossunder(rsi14, rsiMa) macXup = ta.crossover(macdL, macdS) macXdn = ta.crossunder(macdL, macdS) recentRsiUp = math.sum(rsiXup ? 1 : 0, comboWin) > 0 recentRsiDn = math.sum(rsiXdn ? 1 : 0, comboWin) > 0 if conf and useRsiMacd and tfOK(5, 240) and macXup and recentRsiUp alert(S + " COMBO BULL: RSI x-up + MACD x-up", alert.freq_once_per_bar) if conf and useRsiMacd and tfOK(5, 240) and macXdn and recentRsiDn alert(S + " COMBO BEAR: RSI x-dn + MACD x-dn", alert.freq_once_per_bar) // ---------------- 3. triple confirm (5m - D) ---------------- [bbM, bbU, bbL] = ta.bb(close, 20, 2.0) if conf and useTriple and tfOK(5, 1440) and rsi14 < 30 and macXup and low <= bbL alert(S + " *** TRIPLE CONFIRM LONG (RSI+MACD+BB) ***", alert.freq_once_per_bar) if conf and useTriple and tfOK(5, 1440) and rsi14 > 70 and macXdn and high >= bbU alert(S + " *** TRIPLE CONFIRM SHORT (RSI+MACD+BB) ***", alert.freq_once_per_bar) // ---------------- 4. EMA crosses: fast 15m+, slow 1H+, golden 1H+ ---------------- e9 = ta.ema(close, 9) e20 = ta.ema(close, 20) e50 = ta.ema(close, 50) e100 = ta.ema(close, 100) e200 = ta.ema(close, 200) fEma(fast, slow, nm, minM) => if conf and useEmaX and tfOK(minM, BIG) if ta.crossover(fast, slow) alert(S + " EMA x-UP " + nm, alert.freq_once_per_bar) if ta.crossunder(fast, slow) alert(S + " EMA x-DOWN " + nm, alert.freq_once_per_bar) fEma(e9, e20, "9x20", 15) fEma(e20, e50, "20x50", 15) fEma(e50, e100, "50x100", 60) fEma(e100, e200, "100x200", 60) fEma(e50, e200, "50x200", 60) s50 = ta.sma(close, 50) s200 = ta.sma(close, 200) if conf and useEmaX and tfOK(60, BIG) and ta.crossover(s50, s200) alert(S + " *** GOLDEN CROSS: SMA50 above SMA200 (" + timeframe.period + ") ***", alert.freq_once_per_bar) if conf and useEmaX and tfOK(60, BIG) and ta.crossunder(s50, s200) alert(S + " *** DEATH CROSS: SMA50 below SMA200 (" + timeframe.period + ") ***", alert.freq_once_per_bar) // ---------------- 5. RSI divergence (15m+) ---------------- pl = ta.pivotlow(low, 5, 5) ph = ta.pivothigh(high, 5, 5) var float lastPL = na var float lastPLr = na var float lastPH = na var float lastPHr = na bullDiv = false bearDiv = false if not na(pl) rp = rsi14[5] if not na(lastPL) and pl < lastPL and rp > lastPLr and rp < 45 bullDiv := true lastPL := pl lastPLr := rp if not na(ph) rp = rsi14[5] if not na(lastPH) and ph > lastPH and rp < lastPHr and rp > 55 bearDiv := true lastPH := ph lastPHr := rp if conf and useDiv and tfOK(15, BIG) and bullDiv alert(S + " BULLISH DIVERGENCE (momentum turning before price)", alert.freq_once_per_bar) if conf and useDiv and tfOK(15, BIG) and bearDiv alert(S + " BEARISH DIVERGENCE", alert.freq_once_per_bar) // ---------------- 6. quad stochastics (15m+) ---------------- k9 = ta.sma(ta.stoch(close, high, low, 9), 3) k14 = ta.sma(ta.stoch(close, high, low, 14), 3) k40 = ta.sma(ta.stoch(close, high, low, 40), 3) k60 = ta.sma(ta.stoch(close, high, low, 60), 3) allLow = k9 < 20 and k14 < 20 and k40 < 20 and k60 < 20 allHigh = k9 > 80 and k14 > 80 and k40 > 80 and k60 > 80 divBullRecent = math.sum(bullDiv ? 1 : 0, 10) > 0 divBearRecent = math.sum(bearDiv ? 1 : 0, 10) > 0 if conf and useQuadSto and tfOK(15, BIG) and allLow and divBullRecent alert(S + " *** QUAD STOCH <20 + bull divergence ***", alert.freq_once_per_bar) if conf and useQuadSto and tfOK(15, BIG) and allHigh and divBearRecent alert(S + " *** QUAD STOCH >80 + bear divergence ***", alert.freq_once_per_bar) // ---------------- 7. MTF trend alignment (chart <= 15m; daily flip <= 4H) ---------------- tD = request.security(syminfo.tickerid, "D", ta.ema(close, 20) > ta.ema(close, 50) ? 1 : -1) t4 = request.security(syminfo.tickerid, "240", ta.ema(close, 20) > ta.ema(close, 50) ? 1 : -1) t1 = request.security(syminfo.tickerid, "60", ta.ema(close, 20) > ta.ema(close, 50) ? 1 : -1) t15 = request.security(syminfo.tickerid, "15", ta.ema(close, 20) > ta.ema(close, 50) ? 1 : -1) align = tD + t4 + t1 + t15 if conf and useTrendMTF and (not useTfGate or cm <= 15) and align == 4 and align[1] != 4 alert(S + " TREND ALIGNMENT: D+4H+1H+15M all UP", alert.freq_once_per_bar) if conf and useTrendMTF and (not useTfGate or cm <= 15) and align == -4 and align[1] != -4 alert(S + " TREND ALIGNMENT: D+4H+1H+15M all DOWN", alert.freq_once_per_bar) if conf and useTrendMTF and (not useTfGate or cm <= 240) and tD != tD[1] alert(S + " DAILY trend flipped " + (tD == 1 ? "UP" : "DOWN"), alert.freq_once_per_bar) // ---------------- 8. all-time H/L (any TF) ---------------- var float ath = high var float atl = low if conf and useATHL and high > ath alert(S + " *** NEW ALL-TIME HIGH " + str.tostring(high) + " ***", alert.freq_once_per_bar) if conf and useATHL and low < atl alert(S + " *** NEW ALL-TIME LOW " + str.tostring(low) + " ***", alert.freq_once_per_bar) ath := math.max(ath, high) atl := math.min(atl, low) // ---------------- 9. anomaly (5m+) ---------------- volZ = (volume - ta.sma(volume, 100)) / (ta.stdev(volume, 100) + 1e-10) rngZ = ((high - low) - ta.sma(high - low, 100)) / (ta.stdev(high - low, 100) + 1e-10) if conf and useAnomaly and tfOK(5, BIG) and volZ > 3 and rngZ > 3 alert(S + " ANOMALY vol z=" + str.tostring(volZ, "#.#") + " range z=" + str.tostring(rngZ, "#.#") + " " + (close > open ? "UP" : "DOWN"), alert.freq_once_per_bar) // ---------------- 10. macro movers (15m+) ---------------- dxyC = request.security("TVC:DXY", timeframe.period, close) jpyC = request.security("FX:USDJPY", timeframe.period, close) vixC = request.security("TVC:VIX", timeframe.period, close) fMacro(px, nm) => roc = px / px[20] - 1 z = (roc - ta.sma(roc, 100)) / (ta.stdev(roc, 100) + 1e-10) if conf and useMacro and tfOK(15, BIG) and math.abs(z) > 2.5 and math.abs(z[1]) <= 2.5 alert(nm + " BIG MOVE 20-bar ROC z=" + str.tostring(z, "#.#"), alert.freq_once_per_bar) fMacro(dxyC, "DXY") fMacro(jpyC, "USDJPY") fMacro(vixC, "VIX") // ---------------- 11. liquidity sweep / SFP (5m+) ---------------- swLow = ta.lowest(low, sweepLen)[1] swHigh = ta.highest(high, sweepLen)[1] if conf and useSFP and tfOK(5, BIG) and low < swLow and close > swLow alert(S + " LIQUIDITY SWEEP LOW: stops run below " + str.tostring(swLow) + ", closed back above (bullish SFP)", alert.freq_once_per_bar) if conf and useSFP and tfOK(5, BIG) and high > swHigh and close < swHigh alert(S + " LIQUIDITY SWEEP HIGH: stops run above " + str.tostring(swHigh) + ", closed back below (bearish SFP)", alert.freq_once_per_bar) // ---------------- 12. prev day / week H-L (intraday <= 1H) ---------------- pdh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on) pdl = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on) pwh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on) pwl = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on) if conf and usePrevHL and tfOK(0, 60) and ta.crossover(close, pdh) alert(S + " broke PREV DAY HIGH " + str.tostring(pdh), alert.freq_once_per_bar) if conf and usePrevHL and tfOK(0, 60) and ta.crossunder(close, pdl) alert(S + " broke PREV DAY LOW " + str.tostring(pdl), alert.freq_once_per_bar) if conf and usePrevHL and tfOK(0, 60) and ta.crossover(close, pwh) alert(S + " broke PREV WEEK HIGH " + str.tostring(pwh), alert.freq_once_per_bar) if conf and usePrevHL and tfOK(0, 60) and ta.crossunder(close, pwl) alert(S + " broke PREV WEEK LOW " + str.tostring(pwl), alert.freq_once_per_bar) // ---------------- 13. session opens (<= 30m) ---------------- tLon = time(timeframe.period, "0800-1630:23456", "Europe/London") tNY = time(timeframe.period, "0930-1600:23456", "America/New_York") if conf and useSessions and tfOK(0, 30) and not na(tLon) and na(tLon[1]) alert("LONDON OPEN โ expansion window begins", alert.freq_once_per_bar) if conf and useSessions and tfOK(0, 30) and not na(tNY) and na(tNY[1]) alert("NEW YORK OPEN โ expansion window begins", alert.freq_once_per_bar) // ---------------- 14. round numbers (<= 1H) ---------------- roundStep = math.pow(10, math.floor(math.log10(math.max(close, 1e-9)))) / 100 if conf and useRound and tfOK(0, 60) and math.floor(close / roundStep) != math.floor(close[1] / roundStep) lvl = math.floor(math.max(close, close[1]) / roundStep) * roundStep alert(S + " crossed round level " + str.tostring(lvl) + " going " + (close > close[1] ? "UP" : "DOWN"), alert.freq_once_per_bar) // ---------------- 15. squeeze fire (15m+) ---------------- bbW = (bbU - bbL) / (bbM + 1e-10) wRank = ta.percentrank(bbW, 100) var int sqRun = 0 sqRun := wRank < 20 ? sqRun + 1 : 0 brkHi = ta.highest(high, 20)[1] brkLo = ta.lowest(low, 20)[1] if conf and useSqueeze and tfOK(15, BIG) and sqRun[1] >= 6 and close > brkHi alert(S + " *** SQUEEZE FIRED UP: " + str.tostring(sqRun[1]) + " bars compressed, range broken ***", alert.freq_once_per_bar) if conf and useSqueeze and tfOK(15, BIG) and sqRun[1] >= 6 and close < brkLo alert(S + " *** SQUEEZE FIRED DOWN ***", alert.freq_once_per_bar) // ---------------- 16. supertrend flip (15m+) ---------------- [stLine, stDir] = ta.supertrend(3.0, 10) if conf and useSTrend and tfOK(15, BIG) and stDir != stDir[1] and not na(stDir[1]) alert(S + " SUPERTREND flip " + (stDir < 0 ? "UP" : "DOWN"), alert.freq_once_per_bar) // ---------------- 17. VWAP cross (5m - 30m) ---------------- vw = ta.vwap(hlc3) if conf and useVWAP and tfOK(5, 30) and ta.crossover(close, vw) alert(S + " crossed ABOVE session VWAP", alert.freq_once_per_bar) if conf and useVWAP and tfOK(5, 30) and ta.crossunder(close, vw) alert(S + " crossed BELOW session VWAP", alert.freq_once_per_bar) // ---------------- 18. ATR spike (15m+) ---------------- atrPct = atr14 / close atrZ = (atrPct - ta.sma(atrPct, 100)) / (ta.stdev(atrPct, 100) + 1e-10) if conf and useATRspike and tfOK(15, BIG) and atrZ > 2.5 and atrZ[1] <= 2.5 alert(S + " ATR SPIKE: volatility regime change (z=" + str.tostring(atrZ, "#.#") + ")", alert.freq_once_per_bar) // ---------------- 19. engulfing (15m+) ---------------- avgBody = ta.sma(math.abs(close - open), 20) bigBody = math.abs(close - open) > avgBody * 1.5 bullEng = close > open and close[1] < open[1] and close >= open[1] and open <= close[1] and bigBody bearEng = close < open and close[1] > open[1] and close <= open[1] and open >= close[1] and bigBody if conf and useEngulf and tfOK(15, BIG) and bullEng alert(S + " BULLISH ENGULFING (size-filtered)", alert.freq_once_per_bar) if conf and useEngulf and tfOK(15, BIG) and bearEng alert(S + " BEARISH ENGULFING (size-filtered)", alert.freq_once_per_bar) // ---------------- 20. streak (15m+) ---------------- var int streak = 0 dirNow = close > close[1] ? 1 : close < close[1] ? -1 : 0 streak := dirNow == 0 ? 0 : dirNow * (streak * dirNow > 0 ? math.abs(streak) + 1 : 1) if conf and useStreak and tfOK(15, BIG) and math.abs(streak) == streakN alert(S + " STREAK: " + str.tostring(streakN) + " consecutive " + (streak > 0 ? "UP" : "DOWN") + " closes", alert.freq_once_per_bar) // ---------------- 21. gap open (15m+) ---------------- if conf and useGap and tfOK(15, BIG) and math.abs(open - close[1]) > 0.75 * atr14 alert(S + " GAP OPEN: " + str.tostring(open - close[1]) + " (" + (open > close[1] ? "up" : "down") + " gap vs prior close)", alert.freq_once_per_bar) // ---------------- 22. BB walk (15m+) ---------------- walkUp = close > bbU and close[1] > bbU[1] and close[2] > bbU[2] walkDn = close < bbL and close[1] < bbL[1] and close[2] < bbL[2] if conf and useBBwalk and tfOK(15, BIG) and walkUp and not (close[3] > bbU[3]) alert(S + " BB WALK UP: 3 closes above upper band (strong trend, do NOT fade)", alert.freq_once_per_bar) if conf and useBBwalk and tfOK(15, BIG) and walkDn and not (close[3] < bbL[3]) alert(S + " BB WALK DOWN: 3 closes below lower band", alert.freq_once_per_bar) // ---------------- 23. correlation flip vs SPX (1H+) ---------------- spx = request.security("SP:SPX", timeframe.period, close) corr = ta.correlation(close, spx, 50) if conf and useCorr and tfOK(60, BIG) and ta.crossover(corr, 0) alert(S + " correlation vs SPX flipped POSITIVE (risk-on coupling)", alert.freq_once_per_bar) if conf and useCorr and tfOK(60, BIG) and ta.crossunder(corr, 0) alert(S + " correlation vs SPX flipped NEGATIVE (decoupled)", alert.freq_once_per_bar) // ---------------- minimal visuals ---------------- plot(e20, "EMA20", color.new(color.orange, 50)) plot(e50, "EMA50", color.new(color.blue, 50)) plot(s200, "SMA200", color.new(color.gray, 50)) plot(vw, "VWAP", color.new(color.yellow, 60))