
This strategy is a multi-factor trend-following system combining Parabolic SAR, Exponential Moving Average (EMA), Relative Strength Index (RSI), and Average Directional Index (ADX). It identifies potential trend directions through the synergistic effect of multiple technical indicators and generates trading signals upon trend confirmation. The strategy also incorporates dynamic risk management based on Average True Range (ATR) to automatically calculate stop-loss and take-profit levels.
This multi-factor trend strategy excels in trending markets through indicator synergy and rigorous risk control. Its core strengths lie in multi-layered signal validation and dynamic risk management, though parameter sensitivity and lag risks require attention. Future optimizations should focus on adaptive parameter mechanisms and market regime detection to enhance robustness.
/*backtest
start: 2024-04-23 00:00:00
end: 2024-12-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("π Estrategia SAR+EMA+RSI con Alertas", overlay=true)
// ββββ PARΓMETROS ββββ
riskPerTrade = input.float(2.0, title="Riesgo por operaciΓ³n (%)", minval=0.5, step=0.5)
sarStart = input.float(0.02, title="SAR Start", minval=0.001)
sarIncrement = input.float(0.02, title="SAR Increment", minval=0.001)
sarMax = input.float(0.2, title="SAR Max", minval=0.1)
rsiLength = input.int(6, title="RSI Length", minval=3, maxval=10)
emaFastLength = input.int(2, title="EMA RΓ‘pida", minval=1, maxval=5)
adxThreshold = input.int(30, title="ADX mΓnimo", minval=20, maxval=50)
atrMultiplier = input.float(1.5, title="Multiplicador ATR para SL", step=0.1)
// ββββ INDICADORES ββββ
sar = ta.sar(sarStart, sarIncrement, sarMax)
emaFast = ta.ema(close, emaFastLength)
rsi = ta.rsi(close, rsiLength)
[diplus, diminus, adx] = ta.dmi(14, 14) // Ahora pasamos length y adxSmoothing
atr = ta.atr(14)
// ββββ CONDICIONES ββββ
longCondition = ta.crossover(close, sar) and close > emaFast and rsi > 60 and adx >= adxThreshold
shortCondition = ta.crossunder(close, sar) and close < emaFast and rsi < 40 and adx >= adxThreshold
// ββββ FUNCIΓN MENSAJE ALERTA ββββ
getAlertMessage(isLong) =>
slPoints = atr * atrMultiplier
message = (isLong ? "π COMPRA " : "π» VENTA ") + syminfo.ticker + "\n" +
"Precio: " + str.tostring(math.round(close, 2)) + "\n" +
"SL: " + str.tostring(math.round(isLong ? (close - slPoints) : (close + slPoints), 2)) + "\n" +
"TP: " + str.tostring(math.round(isLong ? (close + slPoints * 2) : (close - slPoints * 2), 2)) + "\n" +
"RSI: " + str.tostring(math.round(rsi, 1)) + "\n" +
"ADX: " + str.tostring(math.round(adx, 1))
message
// ββββ ALERTAS ββββ
if (longCondition)
alert(getAlertMessage(true), alert.freq_once_per_bar_close)
if (shortCondition)
alert(getAlertMessage(false), alert.freq_once_per_bar_close)
if (longCondition)
alert(getAlertMessage(true), alert.freq_once_per_bar_close)
if (shortCondition)
alert(getAlertMessage(false), alert.freq_once_per_bar_close)
// ββββ ENTRADAS DE ESTRATEGIA ββββ
riskAmount = strategy.equity * (riskPerTrade / 100)
slPoints = atr * atrMultiplier
qty = riskAmount / close
if (longCondition)
strategy.entry("Long", strategy.long, qty=qty)
strategy.exit("Exit Long", "Long", stop=close - slPoints, limit=close + slPoints * 2)
if (shortCondition)
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Exit Short", "Short", stop=close + slPoints, limit=close - slPoints * 2)
// ββββ VISUALIZACIΓN ββββ
plot(sar, title="SAR", color=color.red, style=plot.style_cross)
plot(emaFast, title="EMA RΓ‘pida", color=color.blue)
bgcolor(longCondition ? color.new(color.green, 90) : shortCondition ? color.new(color.red, 90) : na)