
Esta es una estrategia de seguimiento de tendencias ATR dinámicas basadas en rupturas de soporte. La estrategia utiliza el sistema de líneas medias EMA, los indicadores de volatilidad ATR y el concepto de fondos inteligentes (SMC) para capturar las tendencias del mercado.
La estrategia se basa en los siguientes componentes centrales:
La estrategia es un sistema de seguimiento de tendencias más completo, que mejora la estabilidad de las transacciones a través de una gestión de riesgos razonable y la confirmación de múltiples señales. Aunque hay un cierto retraso, en general es un sistema de negociación confiable. Se recomienda realizar una verificación de retroalimentación adecuada antes de su uso en el mercado y optimizar los parámetros según la variedad de transacciones y el entorno del mercado.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// TradingView Pine Script strategy for Smart Money Concept (SMC)
//@version=5
strategy("Smart Money Concept Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=100)
// === Input Parameters ===
input_risk_percentage = input.float(1, title="Risk Percentage", step=0.1)
input_atr_length = input.int(14, title="ATR Length")
input_ema_short = input.int(50, title="EMA Short")
input_ema_long = input.int(200, title="EMA Long")
// === Calculations ===
atr = ta.atr(input_atr_length)
ema_short = ta.ema(close, input_ema_short)
ema_long = ta.ema(close, input_ema_long)
// === Utility Functions ===
// Identify Order Blocks
is_order_block(price, direction) =>
((high[1] > high[2] and low[1] > low[2] and direction == 1) or (high[1] < high[2] and low[1] < low[2] and direction == -1))
// Identify Imbalance Zones
is_imbalance() =>
range_high = high[1]
range_low = low[1]
range_high > close and range_low < close
// Calculate Lot Size Based on Risk
calculate_lot_size(stop_loss_points, account_balance) =>
risk_amount = account_balance * (input_risk_percentage / 100)
lot_size = risk_amount / (stop_loss_points * syminfo.pointvalue)
lot_size
// Determine if Market is Consolidating
is_consolidating() =>
(ta.highest(high, 20) - ta.lowest(low, 20)) / atr < 2
// === Visual Enhancements ===
// Plot Order Blocks
// if is_order_block(close, 1)
// line.new(x1=bar_index[1], y1=low[1], x2=bar_index, y2=low[1], color=color.green, width=2, extend=extend.right)
// if is_order_block(close, -1)
// line.new(x1=bar_index[1], y1=high[1], x2=bar_index, y2=high[1], color=color.red, width=2, extend=extend.right)
// Highlight Imbalance Zones
// if is_imbalance()
// box.new(left=bar_index[1], top=high[1], right=bar_index, bottom=low[1], bgcolor=color.new(color.orange, 80))
// === Logic for Trend Confirmation ===
is_bullish_trend = ema_short > ema_long
is_bearish_trend = ema_short < ema_long
// === Entry Logic ===
account_balance = strategy.equity
if not is_consolidating()
if is_bullish_trend
stop_loss = close - atr * 2
take_profit = close + (math.abs(close - (close - atr * 2)) * 3)
stop_loss_points = math.abs(close - stop_loss) / syminfo.pointvalue
lot_size = calculate_lot_size(stop_loss_points, account_balance)
strategy.entry("Buy", strategy.long, qty=lot_size)
strategy.exit("TP/SL", "Buy", stop=stop_loss, limit=take_profit)
if is_bearish_trend
stop_loss = close + atr * 2
take_profit = close - (math.abs(close - (close + atr * 2)) * 3)
stop_loss_points = math.abs(close - stop_loss) / syminfo.pointvalue
lot_size = calculate_lot_size(stop_loss_points, account_balance)
strategy.entry("Sell", strategy.short, qty=lot_size)
strategy.exit("TP/SL", "Sell", stop=stop_loss, limit=take_profit)
// === Plotting Indicators ===
plot(ema_short, color=color.blue, title="EMA 50")
plot(ema_long, color=color.orange, title="EMA 200")
plotshape(series=is_bullish_trend and not is_consolidating(), style=shape.triangleup, location=location.belowbar, color=color.green, text="Buy")
plotshape(series=is_bearish_trend and not is_consolidating(), style=shape.triangledown, location=location.abovebar, color=color.red, text="Sell")