
¿La estrategia tradicional del eje central se detiene cuando se termina? Esta estrategia es diferente. Cuando se detiene en múltiples direcciones, el sistema se vuelve vacío inmediatamente; cuando se detiene en blanco, se vuelve de inmediato. Este diseño de “voltear la cara más rápido que la vuelta de los libros” permite que la estrategia pueda capturar beneficios continuos en situaciones de crisis.
No se preocupe por los números pequeños, el diseño porcentual basado en el promedio de 30 períodos es más científico que el número de puntos fijos. Un stop loss del 0.45% corresponde a una fluctuación del oro de aproximadamente 8-10 dólares, un stop loss del 0.60% de aproximadamente 12-15 dólares. El mecanismo de reingreso es más inteligente: si se opta por un reingreso después de la primera parada, el objetivo de la parada se reduce a 0.30 y el stop loss se cierra al 0.20%. Este ajuste dinámico hace que la estrategia sea más conservadora después de la ganancia.
Cuando el ATR está por debajo del umbral de 0.2, la estrategia entra en un período de enfriamiento de 10 minutos, rechazando todas las nuevas señales. Este diseño es muy importante. En un entorno de baja volatilidad, forzar una transacción es enviar dinero, no esperar.
La configuración del eje central de 4 líneas K a la izquierda y 2 líneas K a la derecha es más radical que el clásico parámetro 5-5. Esto significa que la estrategia identifica los puntos de inflexión antes, pero también asume más riesgos de falsas rupturas. La combinación funciona mejor en una situación de tendencia.
La probabilidad de reversión de la posición después de la parada es del 50% y la probabilidad de reingreso es del 50%. Este diseño es muy interesante, pero también muy peligroso. La ventaja es que se puede ajustar rápidamente al inicio de la reversión de la tendencia, la desventaja es que es posible volver a enfrentarse en una falsa ruptura.
Las estrategias más temidas son dos situaciones: el horizonte ultrabajo y el mercado unilateral ultraalto. El primero activa el mecanismo de enfriamiento para detener la negociación con frecuencia, y el segundo es fácilmente interceptado por un filtro de línea K grande. Lo más adecuado es el entorno de negociación normal de fluctuaciones diarias entre \( 15 y \) 30.
A pesar de la existencia de un mecanismo de reversión, la estrategia puede enfrentarse a pérdidas continuas en caso de que se produzca una señal de brecha falsa persistente. Especialmente después de la publicación de datos económicos importantes, las fluctuaciones de la emoción en el mercado pueden hacer que la señal del eje falle. Se recomienda un control estricto de las posiciones individuales y la suspensión manual de la estrategia antes de eventos importantes.
/*backtest
start: 2024-09-24 00:00:00
end: 2025-09-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=6
strategy("Gold By Ann v.2", overlay=true)
// --- Inputs ---
leftBars = input.int(4, "Pivot Lookback Left")
rightBars = input.int(2, "Pivot Lookback Right")
atrLength = input.int(14, "ATR Length")
atrMult = input.float(2.0, "ATR Multiplier")
atrThreshold = input.float(0.2, "ATR Threshold")
cooldownMinutes = input.int(10, "Cooldown Minutes")
// --- Pivot Calculation ---
ph = ta.pivothigh(leftBars, rightBars)
pl = ta.pivotlow(leftBars, rightBars)
ma = ta.sma(close, 50)
bullishTrend = close > ma
bearishTrend = close < ma
// --- Volatility (ATR) and Cooldown ---
atrValue = ta.atr(atrLength)
var float cooldownEnd = na
if atrValue < atrThreshold and na(cooldownEnd)
cooldownEnd := timenow + cooldownMinutes * 60 * 1000 // ms
if not na(cooldownEnd) and timenow > cooldownEnd
cooldownEnd := na
inCooldown = not na(cooldownEnd)
// --- Tall candle filter ---
rangeBar = high - low
isTall = rangeBar > ta.atr(5) * atrMult
// --- SL & TP based on % of 30-bar close ---
baseClose = ta.sma(close, 30) // 30-bar average close
slPercent = 0.0045 // 0.45%
tpPercent = 0.0060 // 0.60%
tpReEntryPercent = 0.006 // 0.30% (smaller TP after re-entry)
stopReEntryPercent = 0.005 // -0.20%
stopReEntryValue = baseClose * stopReEntryPercent
slValue = baseClose * slPercent
tpValue = baseClose * tpPercent
tpReValue = baseClose * tpReEntryPercent
// --- Re-entry state flag ---
var bool isReEntry = false
// --- Trade Logic (Only if NOT in cooldown) ---
if not inCooldown and not isTall
if strategy.position_size == 0
if not na(pl)
strategy.entry("PivExtLE", strategy.long, comment="Long")
isReEntry := false
if not na(ph)
strategy.entry("PivExtSE", strategy.short, comment="Short")
isReEntry := false
// =====================================================
// --- Take Profit / Stop Loss with auto-flip ---
// =====================================================
// LONG
if strategy.position_size > 0 and not isTall
entryPrice = strategy.position_avg_price
tpLevel = entryPrice + (isReEntry ? tpReValue : tpValue)
// Re-entry extra stop condition
if isReEntry and close <= entryPrice - stopReEntryValue
strategy.close("PivExtLE", comment="Stop Re-Entry Long (-0.20%)")
isReEntry := false
else if close >= tpLevel
strategy.close("PivExtLE", comment=isReEntry ? "TP Long (Re-Entry)" : "TP Long")
randChoice = (bar_index * 9301 + 49297) % 2
if randChoice == 0
strategy.entry("PivExtSE", strategy.short, comment="Flip to Short (TP)")
isReEntry := false
else
strategy.entry("PivExtLE", strategy.long, comment="Re-Enter Long (TP)")
isReEntry := true
else if close <= entryPrice - slValue
strategy.close("PivExtLE", comment="SL Long")
strategy.entry("PivExtSE", strategy.short, comment="Flip to Short (SL)")
isReEntry := false
// SHORT
if strategy.position_size < 0 and not isTall
entryPrice = strategy.position_avg_price
tpLevel = entryPrice - (isReEntry ? tpReValue : tpValue)
// Re-entry extra stop condition
if isReEntry and close >= entryPrice + stopReEntryValue
strategy.close("PivExtSE", comment="Stop Re-Entry Short (-0.20%)")
isReEntry := false
else if close <= tpLevel
strategy.close("PivExtSE", comment=isReEntry ? "TP Short (Re-Entry)" : "TP Short")
strategy.entry("PivExtLE", strategy.long, comment="Flip to Long (TP)")
isReEntry := true
else if close >= entryPrice + slValue
strategy.close("PivExtSE", comment="SL Short")
strategy.entry("PivExtLE", strategy.long, comment="Flip to Long (SL)")
isReEntry := false
// --- Plot reference ---
plot(slValue, title="SL Value (0.45% of 30-bar Close)", color=color.red)
plot(tpValue, title="TP Value (0.60% of 30-bar Close)", color=color.green)
plot(tpReValue, title="TP Value (Re-Entry 0.30%)", color=color.orange)