// ============================================================================ // © algonexta // This script is for education and research; it does not guarantee results. // Verify this source in TradingView before use. // ============================================================================ //@version=6 indicator("AlgoNexta MAC/ICE V1", "MAC/ICE V1", overlay = true, max_labels_count = 500, max_lines_count = 500) // Signals string GROUP_SIGNAL = "Signal Inputs" float source = input.source(close, "Source", group = GROUP_SIGNAL) int shortEmaPeriod = input.int(60, "Short EMA", minval = 1, group = GROUP_SIGNAL) int longEmaPeriod = input.int(240, "Long EMA", minval = 1, group = GROUP_SIGNAL) int macdFastPeriod = input.int(12, "MACD Fast", minval = 1, group = GROUP_SIGNAL) int macdSlowPeriod = input.int(26, "MACD Slow", minval = 1, group = GROUP_SIGNAL) int macdSignalPeriod = input.int(9, "MACD Signal", minval = 1, group = GROUP_SIGNAL) string signalMode = input.string("EMA trend MACD crosses", "Signal mode", options = ["Exact cTrader", "EMA trend MACD crosses"], group = GROUP_SIGNAL) // Risk management string GROUP_RISK = "Risk Management" int atrPeriod = input.int(14, "ATR Period", minval = 1, group = GROUP_RISK) float atrMultiplier = input.float(1.5, "SL ATR Multiplier", minval = 0.1, step = 0.1, group = GROUP_RISK) float riskPercent = input.float(1.0, "Account Risk %", minval = 0.1, maxval = 100, step = 0.1, group = GROUP_RISK) float accountBalance = input.float(10000.0, "Account Balance", minval = 0.0, step = 100.0, group = GROUP_RISK) float unitPointValue = input.float(1.0, "Value of 1.0 Price Move per Unit", minval = 0.000001, step = 0.01, group = GROUP_RISK, tooltip = "Set this to the cash P/L of one trading unit when price moves by 1.0. For XAUUSD, one ounce is commonly 1; verify with your broker.") int projectionBars = input.int(35, "Level Projection Bars", minval = 5, maxval = 500, group = GROUP_RISK) int historicalSetups = input.int(50, "Historical Setups", minval = 1, maxval = 65, group = GROUP_RISK, tooltip = "Number of previous signal risk boxes to keep on the chart.") // Appearance string GROUP_DISPLAY = "Appearance" bool showEma = input.bool(true, "Show EMAs", group = GROUP_DISPLAY) bool shadeTrend = input.bool(true, "Shade EMA Trend", group = GROUP_DISPLAY) bool showPriceLabels = input.bool(true, "Show Level Prices", group = GROUP_DISPLAY) color buyColor = input.color(color.rgb(0, 210, 150), "Buy Color", group = GROUP_DISPLAY) color sellColor = input.color(color.rgb(255, 72, 88), "Sell Color", group = GROUP_DISPLAY) float emaShort = ta.ema(source, shortEmaPeriod) float emaLong = ta.ema(source, longEmaPeriod) [macdLine, macdSignalLine, _] = ta.macd(source, macdFastPeriod, macdSlowPeriod, macdSignalPeriod) float atrValue = ta.atr(atrPeriod) bool bullish = emaShort > emaLong bool bearish = emaShort < emaLong bool macdCrossUp = ta.crossover(macdLine, macdSignalLine) bool macdCrossDown = ta.crossunder(macdLine, macdSignalLine) bool exactBuy = bullish and macdLine < 0 and macdCrossUp bool exactSell = bearish and macdLine > 0 and macdCrossDown bool rawBuy = signalMode == "Exact cTrader" ? exactBuy : bullish and macdCrossUp bool rawSell = signalMode == "Exact cTrader" ? exactSell : bearish and macdCrossDown color transparent = color.new(color.white, 100) shortPlot = plot(showEma ? emaShort : na, "Fast EMA", color = color.new(bullish ? buyColor : sellColor, 5), linewidth = 2) longPlot = plot(showEma ? emaLong : na, "Slow EMA", color = color.new(color.silver, 25), linewidth = 2) fill(shortPlot, longPlot, color = shadeTrend and showEma ? color.new(bullish ? buyColor : sellColor, 90) : transparent, title = "Trend Shade") // Signals must alternate: after BUY, another BUY is ignored until a valid SELL, // and vice versa. Risk levels themselves remain active until SL, TP3, or reversal. var bool tradeActive = false var int tradeDirection = 0 var int lastSignalDirection = 0 var int entryBar = na var float entryPrice = na var float stopPrice = na var float tp1Price = na var float tp2Price = na var float tp3Price = na var int reachedR = 0 var line entryLine = na var line stopLine = na var line tp1Line = na var line tp2Line = na var line tp3Line = na var linefill riskFill = na var linefill rewardFill = na var label entryLabel = na var label stopLabel = na var label tp1Label = na var label tp2Label = na var label tp3Label = na var label statusLabel = na // Keep completed setups visible. The arrays let us remove only the oldest // setup when the user-selected history limit is exceeded. var array setupLines = array.new() var array setupFills = array.new() var array