Filter
Exclude
Time range
-
Near
FirstClose launches disclosure automation, integrates with LOS - FirstClose has unveiled SmartDocs, a disclosure intelligence capability that figures out when disclosure obligations start and begins the proper workflow based on lender rules. Source: bit.ly/4nPe27n

1
2
55
============================================================================ // BTC CYCLE ALPHA V3 — Anti-Chop Edition (LIVE SIGNALS) // 2-DAY TIMEFRAME | // ============================================================================ // LIVE MODE: Signals fire MID-CANDLE as soon as conditions are met. // ⚠ WARNING: Signals may REPAINT — a green bar can appear and disappear // before the candle closes. Use the alert system to catch signals in // real-time, but be aware the signal is not confirmed until close. // ============================================================================ //@version=5 strategy( "BTC Cycle Alpha V3 LIVE [2D]", overlay = true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1, slippage = 2, pyramiding = 0, calc_on_every_tick = true, process_orders_on_close = false) // ────────────────────────────────────────────────────────────────────────────── // INPUTS // ────────────────────────────────────────────────────────────────────────────── grp1 = "═══ Trend Factors ═══" fastLen = input.int(11, "Fast EMA", minval=3, group=grp1) slowLen = input.int(28, "Slow EMA", minval=5, group=grp1) trendLen = input.int(100, "Trend SMA", minval=25, group=grp1) macdFast = input.int(6, "MACD Fast", minval=2, group=grp1) macdSlow = input.int(13, "MACD Slow", minval=3, group=grp1) macdSig = input.int(5, "MACD Signal", minval=2, group=grp1) grp2 = "═══ Anti-Chop Filters ═══" adxLen = input.int(14, "ADX Period", minval=5, group=grp2) adxThresh = input.int(20, "ADX Threshold", minval=10, group=grp2, tooltip="Minimum ADX to allow entries. Higher = more selective, fewer trades in ranges.") donchLen = input.int(30, "Donchian Length", minval=10, group=grp2) donchMult = input.float(0.98, "Donchian Mult", minval=0.90, maxval=1.0, step=0.01, group=grp2, tooltip="Price must be within this % of the Donchian high to enter. 0.98 = within 2%.") grp3 = "═══ Trade Management ═══" entryTh = input.int(2, "Entry Score (≥)", minval=1, maxval=3, group=grp3, tooltip="Minimum bullish factors to ENTER (with ADX Donchian confirmation).") exitTh = input.int(0, "Exit Score (≤)", minval=0, maxval=2, group=grp3, tooltip="Score at or below which the strategy EXITS. 0 = all factors must turn bearish.") minHold = input.int(10, "Min Hold (bars)", minval=0, group=grp3, tooltip="Minimum bars to hold before exit is allowed. 10 bars = 20 days on 2D chart.") cooldown = input.int(8, "Cooldown (bars)", minval=0, group=grp3, tooltip="Bars to wait after exit before re-entry. Prevents whipsaw in ranges. 8 bars = 16 days.") grp4 = "═══ Visuals ═══" showMAs = input.bool(true, "Show Moving Averages", group=grp4) showBG = input.bool(true, "Show Background Color", group=grp4) showADX = input.bool(false, "Show ADX Panel", group=grp4) showTable = input.bool(true, "Show Performance Table", group=grp4) // ────────────────────────────────────────────────────────────────────────────── // FACTOR CALCULATIONS // ────────────────────────────────────────────────────────────────────────────── // Factor 1: Dual EMA Crossover fastEMA = ta.ema(close, fastLen) slowEMA = ta.ema(close, slowLen) f1_bull = fastEMA > slowEMA // Factor 2: Price above long-term trend trendSMA = ta.sma(close, trendLen) f2_bull = close > trendSMA // Factor 3: MACD histogram positive [macdLine, signalLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSig) f3_bull = histLine > 0 // Composite score (0–3) score = (f1_bull ? 1 : 0) (f2_bull ? 1 : 0) (f3_bull ? 1 : 0) // ────────────────────────────────────────────────────────────────────────────── // ANTI-CHOP FILTERS // ────────────────────────────────────────────────────────────────────────────── // ADX — trend strength (direction-agnostic) [diPlus, diMinus, adxValue] = ta.dmi(adxLen, adxLen) isTrending = adxValue >= adxThresh // Donchian Channel — breakout confirmation donchHigh = ta.highest(high, donchLen) nearBreakout = close >= donchHigh * donchMult // ────────────────────────────────────────────────────────────────────────────── // STATE MACHINE WITH ANTI-CHOP LOGIC // ────────────────────────────────────────────────────────────────────────────── var bool isLong = false var int barsInTrade = 0 var int barsSinceExit = 999 if isLong barsInTrade = 1 // Exit: score collapsed AND minimum hold period met if score <= exitTh and barsInTrade >= minHold isLong := false barsSinceExit := 0 barsInTrade := 0 else barsSinceExit = 1 // Entry: score threshold AND ADX trending AND Donchian breakout AND cooldown passed cooldownOK = barsSinceExit >= cooldown if score >= entryTh and isTrending and nearBreakout and cooldownOK isLong := true barsInTrade := 1 // ────────────────────────────────────────────────────────────────────────────── // STRATEGY EXECUTION // ────────────────────────────────────────────────────────────────────────────── longEntry = isLong and strategy.position_size == 0 longExit = not isLong and strategy.position_size > 0 if longEntry strategy.entry("Long", strategy.long) if longExit strategy.close("Long", comment="Exit") // ────────────────────────────────────────────────────────────────────────────── // VISUAL LAYER // ────────────────────────────────────────────────────────────────────────────── // Bar coloring barcolor(isLong ? #00C853 : #FF1744) // Background: green = in position, red = in cash bgcolor(showBG ? (isLong ? color.new(#00C853, 88) : color.new(#FF1744, 92)) : na) // Moving averages plot(showMAs ? fastEMA : na, "Fast EMA", color=#2196F3, linewidth=2) plot(showMAs ? slowEMA : na, "Slow EMA", color=#FF9800, linewidth=2) plot(showMAs ? trendSMA : na, "100 SMA", color=#9E9E9E, linewidth=1, style=plot.style_cross) // Donchian high (dashed) plot(showMAs ? donchHigh * donchMult : na, "Donchian Entry", color=color.new(#AB47BC, 50), linewidth=1, style=plot.style_stepline) // Entry / Exit markers plotshape(longEntry, "BUY", shape.triangleup, location.belowbar, #00C853, size=size.normal, text="IN") plotshape(longExit, "SELL", shape.triangledown, location.abovebar, #FF1744, size=size.normal, text="OUT") // Cooldown indicator (small dots below price when in cooldown) inCooldown = not isLong and barsSinceExit < cooldown plotshape(inCooldown, "Cooldown", shape.circle, location.belowbar, color.new(#FFC107, 40), size=size.tiny) // LIVE MODE INDICATOR — persistent reminder this version repaints var label liveLabel = na if barstate.islast if not na(liveLabel) label.delete(liveLabel) liveLabel := label.new(bar_index, high * 1.02, "⚡ LIVE", color=color.new(#FFC107, 20), textcolor=#000000, style=label.style_label_down, size=size.small) // ADX panel (optional) plot(showADX ? adxValue : na, "ADX", color=#7E57C2, linewidth=2) hline(showADX ? adxThresh : na, "ADX Threshold", color=color.gray, linestyle=hline.style_dashed) // ────────────────────────────────────────────────────────────────────────────── // PERFORMANCE TABLE // ────────────────────────────────────────────────────────────────────────────── if showTable and barstate.islastconfirmedhistory stratReturn = (strategy.equity / strategy.initial_capital - 1) * 100 firstClose = ta.valuewhen(bar_index == 0, close, 0) bhReturn = firstClose > 0 ? (close / firstClose - 1) * 100 : 0 mult = bhReturn != 0 ? stratReturn / bhReturn : 0 var float peakEquity = 0.0 var float maxDD = 0.0 peakEquity := math.max(peakEquity, strategy.equity) currDD = (strategy.equity - peakEquity) / peakEquity * 100 maxDD := math.min(maxDD, currDD) totalTrades = strategy.closedtrades var table perfTable = table.new(position.top_right, 2, 8, bgcolor=color.new(#1a1a2e, 10), border_color=color.new(#e0e0e0, 60), border_width=1) table.cell(perfTable, 0, 0, "CYCLE ALPHA V3 ⚡LIVE", text_color=#FFC107, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 1, 0, "ANTI-CHOP", text_color=#AB47BC, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 0, 1, "Strategy Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 1, str.tostring(stratReturn, "#,##0.0") "%", text_color=stratReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 2, "Buy & Hold Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 2, str.tostring(bhReturn, "#,##0.0") "%", text_color=bhReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 3, "Outperformance (×)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 3, str.tostring(mult, "#0.0") "×", text_color=mult >= 5 ? #00E676 : (mult >= 3 ? #FFC107 : #FF1744), text_size=size.small) table.cell(perfTable, 0, 4, "Max Drawdown", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 4, str.tostring(maxDD, "#0.0") "%", text_color=#FF9800, text_size=size.small) table.cell(perfTable, 0, 5, "Total Trades", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 5, str.tostring(totalTrades), text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 0, 6, "ADX (trend)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 6, str.tostring(adxValue, "#0.0") (isTrending ? " TREND" : " RANGE"), text_color=isTrending ? #7E57C2 : #9E9E9E, text_size=size.small) table.cell(perfTable, 0, 7, "Current Signal", text_color=#e0e0e0, text_size=size.small) signalText = isLong ? "● FULLY IN" : (inCooldown ? "● COOLDOWN" : "● FULLY OUT") signalColor = isLong ? #00C853 : (inCooldown ? #FFC107 : #FF1744) table.cell(perfTable, 1, 7, signalText, text_color=signalColor, text_size=size.small) // ────────────────────────────────────────────────────────────────────────────── // ALERTS // ────────────────────────────────────────────────────────────────────────────── alertcondition(longEntry, "Cycle Alpha V3 LIVE — BUY", "⚡ BTC Cycle Alpha V3 LIVE: GO LONG — Signal fired mid-candle. Confirm at close or act now.") alertcondition(longExit, "Cycle Alpha V3 LIVE — SELL", "⚡ BTC Cycle Alpha V3 LIVE: EXIT — Signal fired mid-candle. Confirm at close or act now.") alertcondition(inCooldown, "Cycle Alpha V3 — COOLDOWN", "BTC Cycle Alpha V3: In cooldown period, no re-entry allowed.")

1
2
84
Replying to @Garneau_Capital
// ============================================================================ // BTC CYCLE ALPHA V3 — Anti-Chop Edition (LIVE SIGNALS) // 2-DAY TIMEFRAME | // ============================================================================ // LIVE MODE: Signals fire MID-CANDLE as soon as conditions are met. // ⚠ WARNING: Signals may REPAINT — a green bar can appear and disappear // before the candle closes. Use the alert system to catch signals in // real-time, but be aware the signal is not confirmed until close. // ============================================================================ //@version=5 strategy( "BTC Cycle Alpha V3 LIVE [2D]", overlay = true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1, slippage = 2, pyramiding = 0, calc_on_every_tick = true, process_orders_on_close = false) // ────────────────────────────────────────────────────────────────────────────── // INPUTS // ────────────────────────────────────────────────────────────────────────────── grp1 = "═══ Trend Factors ═══" fastLen = input.int(11, "Fast EMA", minval=3, group=grp1) slowLen = input.int(28, "Slow EMA", minval=5, group=grp1) trendLen = input.int(100, "Trend SMA", minval=25, group=grp1) macdFast = input.int(6, "MACD Fast", minval=2, group=grp1) macdSlow = input.int(13, "MACD Slow", minval=3, group=grp1) macdSig = input.int(5, "MACD Signal", minval=2, group=grp1) grp2 = "═══ Anti-Chop Filters ═══" adxLen = input.int(14, "ADX Period", minval=5, group=grp2) adxThresh = input.int(20, "ADX Threshold", minval=10, group=grp2, tooltip="Minimum ADX to allow entries. Higher = more selective, fewer trades in ranges.") donchLen = input.int(30, "Donchian Length", minval=10, group=grp2) donchMult = input.float(0.98, "Donchian Mult", minval=0.90, maxval=1.0, step=0.01, group=grp2, tooltip="Price must be within this % of the Donchian high to enter. 0.98 = within 2%.") grp3 = "═══ Trade Management ═══" entryTh = input.int(2, "Entry Score (≥)", minval=1, maxval=3, group=grp3, tooltip="Minimum bullish factors to ENTER (with ADX Donchian confirmation).") exitTh = input.int(0, "Exit Score (≤)", minval=0, maxval=2, group=grp3, tooltip="Score at or below which the strategy EXITS. 0 = all factors must turn bearish.") minHold = input.int(10, "Min Hold (bars)", minval=0, group=grp3, tooltip="Minimum bars to hold before exit is allowed. 10 bars = 20 days on 2D chart.") cooldown = input.int(8, "Cooldown (bars)", minval=0, group=grp3, tooltip="Bars to wait after exit before re-entry. Prevents whipsaw in ranges. 8 bars = 16 days.") grp4 = "═══ Visuals ═══" showMAs = input.bool(true, "Show Moving Averages", group=grp4) showBG = input.bool(true, "Show Background Color", group=grp4) showADX = input.bool(false, "Show ADX Panel", group=grp4) showTable = input.bool(true, "Show Performance Table", group=grp4) // ────────────────────────────────────────────────────────────────────────────── // FACTOR CALCULATIONS // ────────────────────────────────────────────────────────────────────────────── // Factor 1: Dual EMA Crossover fastEMA = ta.ema(close, fastLen) slowEMA = ta.ema(close, slowLen) f1_bull = fastEMA > slowEMA // Factor 2: Price above long-term trend trendSMA = ta.sma(close, trendLen) f2_bull = close > trendSMA // Factor 3: MACD histogram positive [macdLine, signalLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSig) f3_bull = histLine > 0 // Composite score (0–3) score = (f1_bull ? 1 : 0) (f2_bull ? 1 : 0) (f3_bull ? 1 : 0) // ────────────────────────────────────────────────────────────────────────────── // ANTI-CHOP FILTERS // ────────────────────────────────────────────────────────────────────────────── // ADX — trend strength (direction-agnostic) [diPlus, diMinus, adxValue] = ta.dmi(adxLen, adxLen) isTrending = adxValue >= adxThresh // Donchian Channel — breakout confirmation donchHigh = ta.highest(high, donchLen) nearBreakout = close >= donchHigh * donchMult // ────────────────────────────────────────────────────────────────────────────── // STATE MACHINE WITH ANTI-CHOP LOGIC // ────────────────────────────────────────────────────────────────────────────── var bool isLong = false var int barsInTrade = 0 var int barsSinceExit = 999 if isLong barsInTrade = 1 // Exit: score collapsed AND minimum hold period met if score <= exitTh and barsInTrade >= minHold isLong := false barsSinceExit := 0 barsInTrade := 0 else barsSinceExit = 1 // Entry: score threshold AND ADX trending AND Donchian breakout AND cooldown passed cooldownOK = barsSinceExit >= cooldown if score >= entryTh and isTrending and nearBreakout and cooldownOK isLong := true barsInTrade := 1 // ────────────────────────────────────────────────────────────────────────────── // STRATEGY EXECUTION // ────────────────────────────────────────────────────────────────────────────── longEntry = isLong and strategy.position_size == 0 longExit = not isLong and strategy.position_size > 0 if longEntry strategy.entry("Long", strategy.long) if longExit strategy.close("Long", comment="Exit") // ────────────────────────────────────────────────────────────────────────────── // VISUAL LAYER // ────────────────────────────────────────────────────────────────────────────── // Bar coloring barcolor(isLong ? #00C853 : #FF1744) // Background: green = in position, red = in cash bgcolor(showBG ? (isLong ? color.new(#00C853, 88) : color.new(#FF1744, 92)) : na) // Moving averages plot(showMAs ? fastEMA : na, "Fast EMA", color=#2196F3, linewidth=2) plot(showMAs ? slowEMA : na, "Slow EMA", color=#FF9800, linewidth=2) plot(showMAs ? trendSMA : na, "100 SMA", color=#9E9E9E, linewidth=1, style=plot.style_cross) // Donchian high (dashed) plot(showMAs ? donchHigh * donchMult : na, "Donchian Entry", color=color.new(#AB47BC, 50), linewidth=1, style=plot.style_stepline) // Entry / Exit markers plotshape(longEntry, "BUY", shape.triangleup, location.belowbar, #00C853, size=size.normal, text="IN") plotshape(longExit, "SELL", shape.triangledown, location.abovebar, #FF1744, size=size.normal, text="OUT") // Cooldown indicator (small dots below price when in cooldown) inCooldown = not isLong and barsSinceExit < cooldown plotshape(inCooldown, "Cooldown", shape.circle, location.belowbar, color.new(#FFC107, 40), size=size.tiny) // LIVE MODE INDICATOR — persistent reminder this version repaints var label liveLabel = na if barstate.islast if not na(liveLabel) label.delete(liveLabel) liveLabel := label.new(bar_index, high * 1.02, "⚡ LIVE", color=color.new(#FFC107, 20), textcolor=#000000, style=label.style_label_down, size=size.small) // ADX panel (optional) plot(showADX ? adxValue : na, "ADX", color=#7E57C2, linewidth=2) hline(showADX ? adxThresh : na, "ADX Threshold", color=color.gray, linestyle=hline.style_dashed) // ────────────────────────────────────────────────────────────────────────────── // PERFORMANCE TABLE // ────────────────────────────────────────────────────────────────────────────── if showTable and barstate.islastconfirmedhistory stratReturn = (strategy.equity / strategy.initial_capital - 1) * 100 firstClose = ta.valuewhen(bar_index == 0, close, 0) bhReturn = firstClose > 0 ? (close / firstClose - 1) * 100 : 0 mult = bhReturn != 0 ? stratReturn / bhReturn : 0 var float peakEquity = 0.0 var float maxDD = 0.0 peakEquity := math.max(peakEquity, strategy.equity) currDD = (strategy.equity - peakEquity) / peakEquity * 100 maxDD := math.min(maxDD, currDD) totalTrades = strategy.closedtrades var table perfTable = table.new(position.top_right, 2, 8, bgcolor=color.new(#1a1a2e, 10), border_color=color.new(#e0e0e0, 60), border_width=1) table.cell(perfTable, 0, 0, "CYCLE ALPHA V3 ⚡LIVE", text_color=#FFC107, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 1, 0, "ANTI-CHOP", text_color=#AB47BC, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 0, 1, "Strategy Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 1, str.tostring(stratReturn, "#,##0.0") "%", text_color=stratReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 2, "Buy & Hold Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 2, str.tostring(bhReturn, "#,##0.0") "%", text_color=bhReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 3, "Outperformance (×)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 3, str.tostring(mult, "#0.0") "×", text_color=mult >= 5 ? #00E676 : (mult >= 3 ? #FFC107 : #FF1744), text_size=size.small) table.cell(perfTable, 0, 4, "Max Drawdown", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 4, str.tostring(maxDD, "#0.0") "%", text_color=#FF9800, text_size=size.small) table.cell(perfTable, 0, 5, "Total Trades", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 5, str.tostring(totalTrades), text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 0, 6, "ADX (trend)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 6, str.tostring(adxValue, "#0.0") (isTrending ? " TREND" : " RANGE"), text_color=isTrending ? #7E57C2 : #9E9E9E, text_size=size.small) table.cell(perfTable, 0, 7, "Current Signal", text_color=#e0e0e0, text_size=size.small) signalText = isLong ? "● FULLY IN" : (inCooldown ? "● COOLDOWN" : "● FULLY OUT") signalColor = isLong ? #00C853 : (inCooldown ? #FFC107 : #FF1744) table.cell(perfTable, 1, 7, signalText, text_color=signalColor, text_size=size.small) // ────────────────────────────────────────────────────────────────────────────── // ALERTS // ────────────────────────────────────────────────────────────────────────────── alertcondition(longEntry, "Cycle Alpha V3 LIVE — BUY", "⚡ BTC Cycle Alpha V3 LIVE: GO LONG — Signal fired mid-candle. Confirm at close or act now.") alertcondition(longExit, "Cycle Alpha V3 LIVE — SELL", "⚡ BTC Cycle Alpha V3 LIVE: EXIT — Signal fired mid-candle. Confirm at close or act now.") alertcondition(inCooldown, "Cycle Alpha V3 — COOLDOWN", "BTC Cycle Alpha V3: In cooldown period, no re-entry allowed.")

2
11
304
Replying to @OgVapor_l337
// ============================================================================ // BTC CYCLE ALPHA V3 — Anti-Chop Edition // 2-DAY TIMEFRAME | // ============================================================================ // Designed to catch MAJOR cycle swings while sitting out ranging markets. // // THREE ANTI-CHOP MECHANISMS: // 1. ADX TREND GATE — No entries when ADX < 20 (market is ranging) // 2. DONCHIAN BREAKOUT — Price must be near 30-bar highs to enter // 3. COOLDOWN TIMER — 16-day wait after exit prevents re-entry whipsaw // 4. MIN HOLD PERIOD — Must hold 20 days before exit is allowed // // Backtest: 5.2× Buy & Hold | 13 trades in 14 years | 69% win rate // ============================================================================ //@version=5 strategy( "BTC Cycle Alpha V3 [2D]", overlay = true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1, slippage = 2, pyramiding = 0, calc_on_every_tick = false, process_orders_on_close = true) // ────────────────────────────────────────────────────────────────────────────── // INPUTS // ────────────────────────────────────────────────────────────────────────────── grp1 = "═══ Trend Factors ═══" fastLen = input.int(11, "Fast EMA", minval=3, group=grp1) slowLen = input.int(28, "Slow EMA", minval=5, group=grp1) trendLen = input.int(100, "Trend SMA", minval=25, group=grp1) macdFast = input.int(6, "MACD Fast", minval=2, group=grp1) macdSlow = input.int(13, "MACD Slow", minval=3, group=grp1) macdSig = input.int(5, "MACD Signal", minval=2, group=grp1) grp2 = "═══ Anti-Chop Filters ═══" adxLen = input.int(14, "ADX Period", minval=5, group=grp2) adxThresh = input.int(20, "ADX Threshold", minval=10, group=grp2, tooltip="Minimum ADX to allow entries. Higher = more selective, fewer trades in ranges.") donchLen = input.int(30, "Donchian Length", minval=10, group=grp2) donchMult = input.float(0.98, "Donchian Mult", minval=0.90, maxval=1.0, step=0.01, group=grp2, tooltip="Price must be within this % of the Donchian high to enter. 0.98 = within 2%.") grp3 = "═══ Trade Management ═══" entryTh = input.int(2, "Entry Score (≥)", minval=1, maxval=3, group=grp3, tooltip="Minimum bullish factors to ENTER (with ADX Donchian confirmation).") exitTh = input.int(0, "Exit Score (≤)", minval=0, maxval=2, group=grp3, tooltip="Score at or below which the strategy EXITS. 0 = all factors must turn bearish.") minHold = input.int(10, "Min Hold (bars)", minval=0, group=grp3, tooltip="Minimum bars to hold before exit is allowed. 10 bars = 20 days on 2D chart.") cooldown = input.int(8, "Cooldown (bars)", minval=0, group=grp3, tooltip="Bars to wait after exit before re-entry. Prevents whipsaw in ranges. 8 bars = 16 days.") grp4 = "═══ Visuals ═══" showMAs = input.bool(true, "Show Moving Averages", group=grp4) showBG = input.bool(true, "Show Background Color", group=grp4) showADX = input.bool(false, "Show ADX Panel", group=grp4) showTable = input.bool(true, "Show Performance Table", group=grp4) // ────────────────────────────────────────────────────────────────────────────── // FACTOR CALCULATIONS // ────────────────────────────────────────────────────────────────────────────── // Factor 1: Dual EMA Crossover fastEMA = ta.ema(close, fastLen) slowEMA = ta.ema(close, slowLen) f1_bull = fastEMA > slowEMA // Factor 2: Price above long-term trend trendSMA = ta.sma(close, trendLen) f2_bull = close > trendSMA // Factor 3: MACD histogram positive [macdLine, signalLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSig) f3_bull = histLine > 0 // Composite score (0–3) score = (f1_bull ? 1 : 0) (f2_bull ? 1 : 0) (f3_bull ? 1 : 0) // ────────────────────────────────────────────────────────────────────────────── // ANTI-CHOP FILTERS // ────────────────────────────────────────────────────────────────────────────── // ADX — trend strength (direction-agnostic) [diPlus, diMinus, adxValue] = ta.dmi(adxLen, adxLen) isTrending = adxValue >= adxThresh // Donchian Channel — breakout confirmation donchHigh = ta.highest(high, donchLen) nearBreakout = close >= donchHigh * donchMult // ────────────────────────────────────────────────────────────────────────────── // STATE MACHINE WITH ANTI-CHOP LOGIC // ────────────────────────────────────────────────────────────────────────────── var bool isLong = false var int barsInTrade = 0 var int barsSinceExit = 999 if isLong barsInTrade = 1 // Exit: score collapsed AND minimum hold period met if score <= exitTh and barsInTrade >= minHold isLong := false barsSinceExit := 0 barsInTrade := 0 else barsSinceExit = 1 // Entry: score threshold AND ADX trending AND Donchian breakout AND cooldown passed cooldownOK = barsSinceExit >= cooldown if score >= entryTh and isTrending and nearBreakout and cooldownOK isLong := true barsInTrade := 1 // ────────────────────────────────────────────────────────────────────────────── // STRATEGY EXECUTION // ────────────────────────────────────────────────────────────────────────────── longEntry = isLong and strategy.position_size == 0 longExit = not isLong and strategy.position_size > 0 if longEntry strategy.entry("Long", strategy.long) if longExit strategy.close("Long", comment="Exit") // ────────────────────────────────────────────────────────────────────────────── // VISUAL LAYER // ────────────────────────────────────────────────────────────────────────────── // Bar coloring barcolor(isLong ? #00C853 : #FF1744) // Background: green = in position, red = in cash bgcolor(showBG ? (isLong ? color.new(#00C853, 88) : color.new(#FF1744, 92)) : na) // Moving averages plot(showMAs ? fastEMA : na, "Fast EMA", color=#2196F3, linewidth=2) plot(showMAs ? slowEMA : na, "Slow EMA", color=#FF9800, linewidth=2) plot(showMAs ? trendSMA : na, "100 SMA", color=#9E9E9E, linewidth=1, style=plot.style_cross) // Donchian high (dashed) plot(showMAs ? donchHigh * donchMult : na, "Donchian Entry", color=color.new(#AB47BC, 50), linewidth=1, style=plot.style_stepline) // Entry / Exit markers plotshape(longEntry, "BUY", shape.triangleup, location.belowbar, #00C853, size=size.normal, text="IN") plotshape(longExit, "SELL", shape.triangledown, location.abovebar, #FF1744, size=size.normal, text="OUT") // Cooldown indicator (small dots below price when in cooldown) inCooldown = not isLong and barsSinceExit < cooldown plotshape(inCooldown, "Cooldown", shape.circle, location.belowbar, color.new(#FFC107, 40), size=size.tiny) // ADX panel (optional) plot(showADX ? adxValue : na, "ADX", color=#7E57C2, linewidth=2) hline(showADX ? adxThresh : na, "ADX Threshold", color=color.gray, linestyle=hline.style_dashed) // ────────────────────────────────────────────────────────────────────────────── // PERFORMANCE TABLE // ────────────────────────────────────────────────────────────────────────────── if showTable and barstate.islastconfirmedhistory stratReturn = (strategy.equity / strategy.initial_capital - 1) * 100 firstClose = ta.valuewhen(bar_index == 0, close, 0) bhReturn = firstClose > 0 ? (close / firstClose - 1) * 100 : 0 mult = bhReturn != 0 ? stratReturn / bhReturn : 0 var float peakEquity = 0.0 var float maxDD = 0.0 peakEquity := math.max(peakEquity, strategy.equity) currDD = (strategy.equity - peakEquity) / peakEquity * 100 maxDD := math.min(maxDD, currDD) totalTrades = strategy.closedtrades var table perfTable = table.new(position.top_right, 2, 8, bgcolor=color.new(#1a1a2e, 10), border_color=color.new(#e0e0e0, 60), border_width=1) table.cell(perfTable, 0, 0, "CYCLE ALPHA V3 [2D]", text_color=#00C853, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 1, 0, "ANTI-CHOP", text_color=#AB47BC, text_size=size.normal, bgcolor=color.new(#0d0d1a, 0)) table.cell(perfTable, 0, 1, "Strategy Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 1, str.tostring(stratReturn, "#,##0.0") "%", text_color=stratReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 2, "Buy & Hold Return", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 2, str.tostring(bhReturn, "#,##0.0") "%", text_color=bhReturn >= 0 ? #00C853 : #FF1744, text_size=size.small) table.cell(perfTable, 0, 3, "Outperformance (×)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 3, str.tostring(mult, "#0.0") "×", text_color=mult >= 5 ? #00E676 : (mult >= 3 ? #FFC107 : #FF1744), text_size=size.small) table.cell(perfTable, 0, 4, "Max Drawdown", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 4, str.tostring(maxDD, "#0.0") "%", text_color=#FF9800, text_size=size.small) table.cell(perfTable, 0, 5, "Total Trades", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 5, str.tostring(totalTrades), text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 0, 6, "ADX (trend)", text_color=#e0e0e0, text_size=size.small) table.cell(perfTable, 1, 6, str.tostring(adxValue, "#0.0") (isTrending ? " TREND" : " RANGE"), text_color=isTrending ? #7E57C2 : #9E9E9E, text_size=size.small) table.cell(perfTable, 0, 7, "Current Signal", text_color=#e0e0e0, text_size=size.small) signalText = isLong ? "● FULLY IN" : (inCooldown ? "● COOLDOWN" : "● FULLY OUT") signalColor = isLong ? #00C853 : (inCooldown ? #FFC107 : #FF1744) table.cell(perfTable, 1, 7, signalText, text_color=signalColor, text_size=size.small) // ────────────────────────────────────────────────────────────────────────────── // ALERTS // ────────────────────────────────────────────────────────────────────────────── alertcondition(longEntry, "Cycle Alpha V3 — BUY", "BTC Cycle Alpha V3 [2D]: GO LONG — Trend confirmed, breakout, all filters passed.") alertcondition(longExit, "Cycle Alpha V3 — SELL", "BTC Cycle Alpha V3 [2D]: EXIT — Score collapsed after hold period.") alertcondition(inCooldown, "Cycle Alpha V3 — COOLDOWN", "BTC Cycle Alpha V3 [2D]: In cooldown period, no re-entry allowed.")

1
1
18
668
CapitaLand India Trust (#CLINT) to divest 20.2% stake in three #datacentres to CapitaLand #India Data Centre Fund (#CIDCF) for S$99.73m. CIDCF raised ~S$150m in its #firstclose, anchored by a third-party global institutional investor. bit.ly/4jvBEvy
1
2
151
We are pleased to announce the first close of Synergy Capital Fund III at $715 million, surpassing 70% of its $1 billion target. This milestone, supported by existing global limited partners across Europe, North America, Asia, and the Middle East, and new investors, reflects strong confidence in our Asia-focused private credit strategy. Building on the success of Funds I and II, Fund III continues to target resilient industrial and infrastructure investments through a disciplined blend of private credit and tactical private equity. 🔗linkedin.com/feed/update/urn… #SynergyCapital #PrivateCredit #FirstClose #FundRaising #AsiaInvestment #IndiaInvestments
2
4
129
26 Mar 2025
The puppy park was a hit at #X25! Sponsored by @FirstClose, this oasis in the middle of the exhibit hall gave attendees a chance to cuddle with adoptable pups & support a great cause. Learn more @NevadaSPCA: nevadaspca.org/
3
5
798
28 Oct 2024
Replying to @TheChefGennaro
Hey thanks for being my FirstClose-minded fan boy of the day. What you said would be true if her personality was also as different as her design, But as far as we know She seems to still be the same and There's actually concept art of her wearing her original costume
1
2
24
FirstClose reveals new feature to help consumers consolidate debt faster dlvr.it/TFfYcP

1
759
17 May 2024
Whenever we get a chance to show up at a #FirstClose event in person ? No question we are in the building. Shout-out to @EdGrapeNutZimm and team for bringing together great minds and conversation.
1
3
73
FirstClose and Calyx integration looks to speed HELOC closings dlvr.it/SsjMPP

973
MeridianLink is hosting FirstClose as they discuss how to improve margins on home equity transactions. meridianlink.me/43K5yTo
1
4
132
28 Feb 2023
These conferences can be brutal. Different food and beverages than maybe you’re used to… long days… jam packed nights… stale casino air… we feel you. Stop by booth #513 for the answer - the FirstClose Survial Kit. #firstclose #EXP23 #homeequity #HEL #HELOC
2
85
7 Jul 2022
We are glad to announce first closure of our 9th fund. #Firstclose #fundraising #VentureCapital #GVFL #Gujarat #India #startup #entrepreneur #MSME
6 Jul 2022
#VentureCapital firm GVFL sees first close of 9th fund at Rs 185 cr | #Startups bit.ly/3Igw3Xk
2
3
30 Jun 2022
Following you now as #proptech which i view as part of #fintech has to catch up.
1
1
1