// Número de contratos
contratos = 1
// Inicializar startPoint
startPoint = 0
// Precio de entrada
entryPrice = 0
// Encontrar mínimos
minPrice = lowest[10]
// Encontrar máximos
maxPrice = highest[10]
// Valores previos
prevMin = 0
prevMax = 0
// Contador de ondas
waveCount = 1
// Calcular ATR
ATR = AverageTrueRange[10](Close)
IF (Month = 5 AND Day = 1) OR (Month = 12 AND (Day = 24 OR Day = 25 OR Day = 26 OR Day = 30 OR Day = 31)) THEN
TradingDay = 0
ELSE
TradingDay = 1
ENDIF
// Detectar nuevo mínimo
IF minPrice <> prevMin THEN
// Actualizar valor previo
prevMin = minPrice
// Reiniciar conteo de ondas
waveCount = 1
ENDIF
// Detectar nuevo máximo
IF maxPrice <> prevMax THEN
// Actualizar valor previo
prevMax = maxPrice
// Reiniciar conteo de ondas
waveCount = 1
ENDIF
// Identificar onda 1
IF waveCount = 1 AND prevMax > startPoint THEN
wave1End = prevMax
waveCount = 2
ENDIF
// Identificar onda 2
IF waveCount = 2 AND prevMin < wave1End THEN
wave2End = prevMin
waveCount = 3
ENDIF
// Entrar en onda 3
IF waveCount = 3 AND prevMax > wave2End THEN
EntryPrice = High[1] + ATR[10] // Entrada por encima de onda 2
// Guardar precio de entrada
entryPrice = EntryPrice
stopPrecio = Low[1] - ATR[10] // Stop por debajo de onda 2
TakeProfit = EntryPrice * 1.618 // Take profit basado en extensión de Fibonacci
IF NOT LONGONMARKET AND TradingDay = 1 THEN
BUY contratos CONTRACT AT EntryPrice STOP
SET STOP PRICE stopPrecio
SET TARGET PRICE TakeProfit
ENDIF
ENDIF
// Nivel del 61.8% de onda 3
takeProfit = entryPrice * 0.618
// Una vez alcanzado el 61.8%, mover stop
IF Close >= takeProfit THEN
SET STOP PRICE entryPrice + 2 * PointValue
ENDIF