
Esta estrategia es un sistema de negociación basado en análisis de múltiples períodos de tiempo, que utiliza principalmente el intervalo de precios centrales (CPR), el promedio móvil del índice (EMA) y el indicador de fuerza relativa (RSI). La estrategia identifica las tendencias del mercado y los puntos de resistencia de soporte clave a través de los niveles de CPR de la línea diaria, el precio de apertura semanal y el EMA de 20 períodos, y combina la confirmación de volumen de negocios para ejecutar operaciones.
El núcleo de la estrategia es buscar oportunidades de negociación mediante el análisis de la relación entre el precio y el nivel de CPR. La CPR se compone de un punto central central (Pivot), una línea central inferior (BC) y una línea central superior (TC). Cuando el precio supera el TC y el mercado se encuentra en una fase de varios puntos, el sistema emite una señal múltiple; cuando el precio baja el BC y el mercado se encuentra en una fase de vacío, el sistema emite una señal de vacío.
Se trata de una estrategia de seguimiento de tendencias estructurada y con claridad lógica, que controla eficazmente el riesgo de negociación mediante el uso combinado de múltiples indicadores técnicos. La principal ventaja de la estrategia reside en su configuración de parámetros flexibles y su mecanismo de gestión de riesgos completo, pero al mismo tiempo requiere que los operadores estén atentos a los cambios en el entorno del mercado y ajusten los parámetros de la estrategia a tiempo.
//@version=5
strategy("Ahmad Ali Khan CPR Strategy", overlay=true, margin_long=100, margin_short=100)
// ———— Inputs ————
use_daily_cpr = input.bool(true, "Use Daily CPR Levels")
ema_length = input.int(20, "EMA Trend Filter Length")
show_week_open = input.bool(true, "Show Weekly Open Price")
enable_divergence = input.bool(true, "Enable RSI Divergence Check")
// ———— Daily CPR Calculation ————
daily_high = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
daily_low = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
daily_close = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
pivot = (daily_high + daily_low + daily_close) / 3
bc = (daily_high + daily_low) / 2
tc = pivot + (pivot - bc)
// ———— Weekly Open Price ————
weekly_open = request.security(syminfo.tickerid, "W", open, lookahead=barmerge.lookahead_on)
// ———— Trend Analysis ————
ema_trend = ta.ema(close, ema_length)
market_phase = close > ema_trend ? "Bullish" : "Bearish"
// ———— Momentum Confirmation ————
rsi_length = 14
rsi = ta.rsi(close, rsi_length)
bullish_div = ta.valuewhen(ta.crossover(rsi, 30), low, 0) > ta.valuewhen(ta.crossover(rsi, 30), low, 1)
bearish_div = ta.valuewhen(ta.crossunder(rsi, 70), high, 0) < ta.valuewhen(ta.crossunder(rsi, 70), high, 1)
// ———— Plotting ————
// CPR Levels
plot(pivot, "Pivot", color=color.blue, linewidth=2)
plot(bc, "BC", color=color.red, linewidth=2)
plot(tc, "TC", color=color.green, linewidth=2)
fill(plot(bc), plot(tc), color=color.new(color.purple, 90))
// Weekly Open
plot(show_week_open ? weekly_open : na, "Weekly Open", color=color.orange, linewidth=2)
// EMA Trend
plot(ema_trend, "EMA Trend", color=color.white, linewidth=2)
// ———— Strategy Logic ————
long_condition =
close > tc and
market_phase == "Bullish" and
(not enable_divergence or bullish_div) and
volume > ta.sma(volume, 20)
short_condition =
close < bc and
market_phase == "Bearish" and
(not enable_divergence or bearish_div) and
volume > ta.sma(volume, 20)
// ———— Risk Management ————
cpr_width = tc - bc
stop_loss_long = bc - (0.5 * cpr_width)
take_profit_long = tc + (1.5 * cpr_width)
stop_loss_short = tc + (0.5 * cpr_width)
take_profit_short = bc - (1.5 * cpr_width)
// ———— Execute Orders ————
if long_condition
strategy.entry("Long", strategy.long)
strategy.exit("XL", "Long", stop=stop_loss_long, limit=take_profit_long)
if short_condition
strategy.entry("Short", strategy.short)
strategy.exit("XS", "Short", stop=stop_loss_short, limit=take_profit_short)
// ———— Signal Plotting ————
plotshape(long_condition, "Buy", shape.labelup, location.belowbar, color=color.green, text="BUY", textcolor=color.white)
plotshape(short_condition, "Sell", shape.labeldown, location.abovebar, color=color.red, text="SELL", textcolor=color.white)