This strategy calculates the 9-day and 15-day exponential moving averages (EMA) to identify buy and sell signals based on EMA crosses and candlestick direction for intraday trading. It generates buy signals when the 9EMA crosses above the 15EMA and the last candlestick is bullish, and sell signals when the 9EMA crosses below the 15EMA and the last candlestick is bearish. The strategy also incorporates an ATR-based stop loss.
The advantages of this strategy include:
The risks include:
Solutions:
Areas for optimization:
This is a simple yet effective intraday scalping strategy integrating dual EMA crossover and candlestick filtering with ATR-based dynamic stop loss. Further enhancements in parameters and multi-factor combinations can improve stability and profitability.
/*backtest start: 2023-01-17 00:00:00 end: 2024-01-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Scalping Strategy", shorttitle="EMAScalp", overlay=true) // Input parameters ema9_length = input(9, title="9 EMA Length") ema15_length = input(15, title="15 EMA Length") // Calculate EMAs ema9 = ta.ema(close, ema9_length) ema15 = ta.ema(close, ema15_length) // Plot EMAs on the chart plot(ema9, color=color.blue, title="9 EMA") plot(ema15, color=color.red, title="15 EMA") // Identify Bullish and Bearish candles bullish_candle = close > open bearish_candle = close < open // Bullish conditions for Buy Signal buy_condition = ta.crossover(close, ema9) and ema15 < ema9 and bullish_candle // Bearish conditions for Sell Signal sell_condition = ta.crossunder(close, ema9) and ema15 > ema9 and bearish_candle // Plot Buy and Sell signals plotshape(series=buy_condition, title="Buy Signal", color=color.green, style=shape.triangleup, location=location.belowbar) plotshape(series=sell_condition, title="Sell Signal", color=color.red, style=shape.triangledown, location=location.abovebar) // Optional: Add stop-loss levels atr_length = input(14, title="ATR Length for Stop Loss") atr_multiplier = input(1.5, title="ATR Multiplier for Stop Loss") atr_value = ta.atr(atr_length) stop_loss_level = strategy.position_size > 0 ? close - atr_multiplier * atr_value : close + atr_multiplier * atr_value plot(stop_loss_level, color=color.gray, title="Stop Loss Level", linewidth=2) // Strategy rules if (buy_condition) strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", from_entry="Buy", loss=stop_loss_level) if (sell_condition) strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", from_entry="Sell", loss=stop_loss_level)