La estrategia es un sistema de trading inteligente que combina el seguimiento de tendencias y el filtrado de volatilidad. Identifica las tendencias del mercado a través de la media móvil exponencial (EMA), utiliza el rango verdadero (TR) y filtros de volatilidad dinámicos para determinar el momento de entrada y gestiona el riesgo con un mecanismo dinámico de stop-profit y stop-loss basado en la volatilidad. La estrategia admite dos modos comerciales: Scalp y Swing, que se pueden cambiar de forma flexible según diferentes entornos de mercado y estilos comerciales.
La lógica central de la estrategia incluye los siguientes componentes clave:
Esta estrategia construye un sistema de trading completo combinando orgánicamente el seguimiento de tendencias, el filtrado de volatilidad y la gestión dinámica de riesgos. La ventaja de la estrategia es que es altamente adaptable y controla el riesgo, al tiempo que ofrece un gran espacio para la optimización. Al establecer parámetros de manera razonable y elegir modos comerciales apropiados, la estrategia puede mantener un rendimiento estable en diferentes entornos de mercado. Se recomienda que los traders realicen pruebas retrospectivas y optimización de parámetros suficientes antes del uso real, y que realicen los ajustes correspondientes en función de las características de los productos comerciales específicos.
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-15 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Creativ3mindz
//@version=5
strategy("Scalp Slayer (I)", overlay=true)
// Input Parameters
filterNumber = input.float(1.5, "Filter Number", minval=1.0, maxval=10.0, tooltip="Higher = More aggressive Filter, Lower = Less aggressive")
emaTrendPeriod = input.int(50, "EMA Trend Period", minval=1, tooltip="Period for the EMA used for trend filtering")
lookbackPeriod = input.int(20, "Lookback Period for Highs/Lows", minval=1, tooltip="Period for determining recent highs/lows")
colorTP = input.color(title='Take Profit Color', defval=color.orange)
colorSL = input.color(title='Stop Loss Color', defval=color.red)
// Inputs for visibility
showBuyLabels = input.bool(true, title="Show Buy Labels")
showSellLabels = input.bool(true, title="Show Sell Labels")
// Alert Options
alertOnCondition = input.bool(true, title="Alert on Condition Met", tooltip="Enable to alert when condition is met")
// Trade Mode Toggle
tradeMode = input.bool(false, title="Trade Mode (ON = Swing, OFF = Scalp)", tooltip="Swing-mode you can use your own TP/SL.")
// Calculations
tr = high - low
ema = filterNumber * ta.ema(tr, 50)
trendEma = ta.ema(close, emaTrendPeriod) // Calculate the EMA for the trend filter
// Highest and lowest high/low within lookback period for swing logic
swingHigh = ta.highest(high, lookbackPeriod)
swingLow = ta.lowest(low, lookbackPeriod)
// Variables to track the entry prices and SL/TP levels
var float entryPriceLong = na
var float entryPriceShort = na
var float targetPriceLong = na
var float targetPriceShort = na
var float stopLossLong = na
var float stopLossShort = na
var bool tradeActive = false
// Buy and Sell Conditions with Trend Filter
buyCondition = close > trendEma and // Buy only if above the trend EMA
close[2] > open[2] and close[1] > open[1] and close > open and
(math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and
(math.abs(close - open) > math.abs(close[1] - open[1])) and
close > close[1] and close[1] > close[2] and tr > ema
sellCondition = close < trendEma and // Sell only if below the trend EMA
close[2] < open[2] and close[1] < open[1] and close < open and
(math.abs(close[2] - open[2]) > math.abs(close[1] - open[1])) and
(math.abs(close - open) > math.abs(close[1] - open[1])) and
close < close[1] and close[1] < close[2] and tr > ema
// Entry Rules
if (buyCondition and not tradeActive)
entryPriceLong := close // Track entry price for long position
stopLossLong := tradeMode ? ta.lowest(low, lookbackPeriod) : swingLow // Scalping: recent low, Swing: lowest low of lookback period
targetPriceLong := tradeMode ? close + tr : swingHigh // Scalping: close + ATR, Swing: highest high of lookback period
tradeActive := true
if (sellCondition and not tradeActive)
entryPriceShort := close // Track entry price for short position
stopLossShort := tradeMode ? ta.highest(high, lookbackPeriod) : swingHigh // Scalping: recent high, Swing: highest high of lookback period
targetPriceShort := tradeMode ? close - tr : swingLow // Scalping: close - ATR, Swing: lowest low of lookback period
tradeActive := true
// Take Profit and Stop Loss Logic
signalBuyTPPrint = (not na(entryPriceLong) and close >= targetPriceLong)
signalSellTPPrint = (not na(entryPriceShort) and close <= targetPriceShort)
signalBuySLPrint = (not na(entryPriceLong) and close <= stopLossLong)
signalSellSLPrint = (not na(entryPriceShort) and close >= stopLossShort)
if (signalBuyTPPrint or signalBuySLPrint)
entryPriceLong := na // Reset entry price for long position
targetPriceLong := na // Reset target price for long position
stopLossLong := na // Reset stop-loss for long position
tradeActive := false
if (signalSellTPPrint or signalSellSLPrint)
entryPriceShort := na // Reset entry price for short position
targetPriceShort := na // Reset target price for short position
stopLossShort := na // Reset stop-loss for short position
tradeActive := false
// Plot Buy and Sell Labels with Visibility Conditions
plotshape(showBuyLabels and buyCondition, "Buy", shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and sellCondition, "Sell", shape.labeldown, location=location.abovebar, color=color.red, text="SELL", textcolor=color.white, size=size.tiny)
// Plot Take Profit Flags
plotshape(showBuyLabels and signalBuyTPPrint, title="Take Profit (buys)", text="TP", style=shape.flag, location=location.abovebar, color=colorTP, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellTPPrint, title="Take Profit (sells)", text="TP", style=shape.flag, location=location.belowbar, color=colorTP, textcolor=color.white, size=size.tiny)
// Plot Stop Loss "X" Marker
plotshape(showBuyLabels and signalBuySLPrint, title="Stop Loss (buys)", text="X", style=shape.xcross, location=location.belowbar, color=colorSL, textcolor=color.white, size=size.tiny)
plotshape(showSellLabels and signalSellSLPrint, title="Stop Loss (sells)", text="X", style=shape.xcross, location=location.abovebar, color=colorSL, textcolor=color.white, size=size.tiny)
// Alerts
alertcondition(buyCondition and alertOnCondition, title="Buy Alert", message='{"content": "Buy {{ticker}} at {{close}}"}')
alertcondition(sellCondition and alertOnCondition, title="Sell Alert", message='{"content": "Sell {{ticker}} at {{close}}"}')
alertcondition(signalBuyTPPrint and alertOnCondition, title="Buy TP Alert", message='{"content": "Buy TP {{ticker}} at {{close}}"}')
alertcondition(signalSellTPPrint and alertOnCondition, title="Sell TP Alert", message='{"content": "Sell TP {{ticker}} at {{close}}"}')
alertcondition(signalBuySLPrint and alertOnCondition, title="Buy SL Alert", message='{"content": "Buy SL {{ticker}} at {{close}}"}')
alertcondition(signalSellSLPrint and alertOnCondition, title="Sell SL Alert", message='{"content": "Sell SL {{ticker}} at {{close}}"}')
if buyCondition
strategy.entry("Enter Long", strategy.long)
else if sellCondition
strategy.entry("Enter Short", strategy.short)