//@version=5 strategy("Operator Psychology Trading Strategy with Heikin-Ashi (Auto Risk-Reward)", overlay=true, pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=1) // Check for the 3-minute timeframe if (not (timeframe.isintraday and timeframe.period == "3")) runtime.error("This strategy can only be run on the 3-minute timeframe.") // Parameters for ATR, Stop-Loss, Risk Percentage, and Sideways Market Threshold atrLength = input.int(3, title="ATR Length") // ATR length set to 3 riskMultiplier = input.float(3, title="Risk Multiplier for Stop-Loss") // Updated Risk Multiplier to 3 capitalRiskPercent = input.float(2, title="Capital Risk Percentage per Trade", minval=0.1, maxval=100) // Capital Risk set to 2% sidewaysThreshold = input.float(1.6, title="Sideways ATR Threshold", minval=0.1) // Updated Sideways ATR Threshold to 1.6 // Moving Average for Trend Detection maLength = input.int(6, title="Moving Average Length") // Updated Moving Average length to 6 ma = ta.sma(close, maLength) // Heikin-Ashi Candle Calculation haClose = (open + high + low + close) / 4 var haOpen = (open + close) / 2 haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2 haHigh = math.max(high, math.max(haOpen, haClose)) haLow = math.min(low, math.min(haOpen, haClose)) // Calculate ATR based on Heikin-Ashi candles atrValue = ta.atr(atrLength) // Define the previous and current Heikin-Ashi candle values prevHaClose = haClose[1] prevHaHigh = haHigh[1] prevHaLow = haLow[1] prevHaOpen = haOpen[1] currHaClose = haClose currHaHigh = haHigh currHaLow = haLow currHaOpen = haOpen // Calculate buy and sell volumes using Heikin-Ashi candles prevBuyVolume = prevHaClose > prevHaOpen ? volume : 0 currBuyVolume = currHaClose > currHaOpen ? volume : 0 prevSellVolume = prevHaClose < prevHaOpen ? volume : 0 currSellVolume = currHaClose < currHaOpen ? volume : 0 // Sideways Market Condition: Check if ATR is below threshold (low volatility) sidewaysMarket = atrValue < sidewaysThreshold // Define Buy Signal conditions based on operator psychology using Heikin-Ashi candles and trend confirmation buyCondition1 = currHaClose > prevHaHigh // Heikin-Ashi close breaks previous Heikin-Ashi high buyCondition2 = currBuyVolume > prevBuyVolume // Current buying volume exceeds previous buyCondition3 = prevHaClose < currHaOpen // Previous Heikin-Ashi candle closes lower than current open buyCondition4 = haClose > ma // Close price is above moving average (trend confirmation) buySignal = buyCondition1 and buyCondition2 and buyCondition3 and buyCondition4 and not sidewaysMarket // Avoid sideways zones // Define Sell Signal conditions based on operator psychology using Heikin-Ashi candles and trend confirmation sellCondition1 = currHaClose < prevHaLow // Heikin-Ashi close breaks previous Heikin-Ashi low sellCondition2 = currSellVolume > prevSellVolume // Current selling volume exceeds previous sellCondition3 = prevHaClose > currHaOpen // Previous Heikin-Ashi candle closes higher than current open sellCondition4 = haClose < ma // Close price is below moving average (trend confirmation) sellSignal = sellCondition1 and sellCondition2 and sellCondition3 and sellCondition4 and not sidewaysMarket // Avoid sideways zones // Calculate Stop-Loss and Target Levels for Long and Short Positions longStopLoss = currHaClose - (atrValue * riskMultiplier) // Stop-loss for long position shortStopLoss = currHaClose + (atrValue * riskMultiplier) // Stop-loss for short position // **Auto Risk-Reward Ratio**: The Reward (Target) is dynamically calculated based on the risk rewardRatio = input.float(6, title="Default Risk-Reward Ratio") // Updated Risk-Reward Ratio to 6 longTarget = currHaClose + (currHaClose - longStopLoss) * rewardRatio // Target for long position shortTarget = currHaClose - (shortStopLoss - currHaClose) * rewardRatio // Target for short position // Calculate position size based on capital risk and set to auto trade 0.01 lot for XAUUSD capital = strategy.equity riskPerTrade = capitalRiskPercent / 100 * capital longPositionSize = math.max(riskPerTrade / (currHaClose - longStopLoss), 0.01) // Minimum 0.01 lot for long position shortPositionSize = math.max(riskPerTrade / (shortStopLoss - currHaClose), 0.01) // Minimum 0.01 lot for short position // Strategy Execution: Long Trades if (buySignal) strategy.entry("Long", strategy.long, qty=longPositionSize) strategy.exit("Take Profit", "Long", limit=longTarget, stop=longStopLoss) // Strategy Execution: Short Trades if (sellSignal) strategy.entry("Short", strategy.short, qty=shortPositionSize) strategy.exit("Take Profit", "Short", limit=shortTarget, stop=shortStopLoss) // Plot shapes for buy and sell signals plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.blue, style=shape.labelup, text="LONG") plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT") // Alert conditions for buy and sell signals alertcondition(buySignal, title="Buy Alert", message="Buy Signal Triggered!") alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Triggered!") // Plot the Heikin-Ashi Close price for reference plot(haClose, color=color.gray, linewidth=1, title="Heikin-Ashi Close") // Plot moving average for trend reference plot(ma, color=color.orange, linewidth=1, title="Moving Average (Trend Filter)")