
This strategy is an advanced adaptive scalping system that combines Exponential Moving Averages (EMA), supply/demand zones, and volume analysis. It identifies market trends through multiple technical indicator confirmations and executes trades near key supply/demand zones. The strategy employs dynamic stop-loss and take-profit targets using the ATR indicator to adapt to market volatility.
The core logic is based on several key elements: 1. Using 9-period and 15-period EMA trend directions as primary trading signals 2. Identifying important price levels through supply/demand zones from a higher timeframe (15 minutes) 3. Utilizing volume confirmation to validate trend strength 4. Implementing ATR-based dynamic stop-loss and take-profit targets for risk management 5. Executing trades only when multiple conditions are simultaneously met
Specifically, a long signal is generated when the 9-period EMA rises for 3 consecutive periods, the 15-period EMA shows an upward trend, price is above the demand zone, and the 20-period volume SMA is greater than the 50-period volume SMA. Short signals follow the opposite logic.
Risk control measures: - Using dynamic ATR stops to adapt to market volatility - Filtering false signals through volume confirmation - Implementing strict risk-reward ratio control - Trading near key price zones
This is a comprehensive trading system that integrates multiple technical analysis tools and enhances trade reliability through multiple confirmation mechanisms. The strategy’s strengths lie in its adaptability and risk management capabilities, but attention must be paid to performance variations in different market environments. Through the suggested optimization directions, there is room for further improvement of this strategy.
/*backtest
start: 2024-02-08 00:00:00
end: 2025-02-06 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Optimized Scalping Strategy with EMA & Supply/Demand Zones", overlay=true)
// Inputs
ema9_length = input(9, title="EMA 9 Length")
ema15_length = input(15, title="EMA 15 Length")
higher_tf = input.timeframe("15", title="Higher Timeframe for Zones")
atr_mult = input(1.5, title="ATR Multiplier for Stop Loss")
risk_reward = input.float(1.2, title="Risk-Reward Ratio", options=[1.2, 1.3, 1.4])
// Calculating EMAs
ema9 = ta.ema(close, ema9_length)
ema15 = ta.ema(close, ema15_length)
// Function to detect supply & demand zones
get_zone(tf) =>
high_tf_high = request.security(syminfo.tickerid, tf, ta.highest(high, 50))
high_tf_low = request.security(syminfo.tickerid, tf, ta.lowest(low, 50))
[high_tf_high, high_tf_low]
[supply_zone, demand_zone] = get_zone(higher_tf)
// ATR-based Stop Loss and Take Profit
atr = ta.atr(14)
long_sl = close - (atr * atr_mult)
long_tp = close + (atr * atr_mult * risk_reward)
short_sl = close + (atr * atr_mult)
short_tp = close - (atr * atr_mult * risk_reward)
// Entry conditions with volume and trend confirmation
longCondition = ta.rising(ema9, 3) and ta.rising(ema15, 3) and close > demand_zone and ta.sma(volume, 20) > ta.sma(volume, 50)
shortCondition = ta.falling(ema9, 3) and ta.falling(ema15, 3) and close < supply_zone and ta.sma(volume, 20) > ta.sma(volume, 50)
// Exit conditions using ATR-based SL/TP with additional trend confirmation
exitLong = (close >= long_tp or close <= long_sl) and ta.falling(ema9, 2)
exitShort = (close <= short_tp or close >= short_sl) and ta.rising(ema9, 2)
// Executing trades with improved risk management
if longCondition
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", from_entry="Long", stop=long_sl, limit=long_tp)
if shortCondition
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", from_entry="Short", stop=short_sl, limit=short_tp)
// Plotting
plot(ema9, color=color.blue, title="EMA 9")
plot(ema15, color=color.red, title="EMA 15")
plot(supply_zone, color=color.orange, title="Supply Zone")
plot(demand_zone, color=color.green, title="Demand Zone")