Prueba esto:
// Indicador de patrones de velas japonesas
// Detecta 16 patrones comunes y muestra el nombre sobre la vela correspondiente
//defparam drawonlastbaronly = true
miATR = AverageTrueRange[5](close)
// Funciones auxiliares
isBullish = close > open
isBearish = close < open
body = abs(close - open)
upperWick = high - max(open, close)
lowerWick = min(open, close) - low
fullRange = high - low
// Parámetros dinámicos
smallBody = fullRange * 0.3
largeBody = fullRange * 0.7
// Martillo
hammer = isBullish AND lowerWick > 2 * body AND upperWick < body
IF hammer THEN
drawtext("Martillo", barindex, low - miATR,dialog,standard,14) coloured("Red")
ENDIF
// Martillo Invertido
invHammer = isBullish AND upperWick > 2 * body AND lowerWick < body
IF invHammer THEN
drawtext("Mart. Inv", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
// Hombre colgado
hangman = isBearish AND lowerWick > 2 * body AND upperWick < body
IF hangman THEN
drawtext("H. Colgado", barindex, low - miATR,dialog,standard,14) coloured("Blue")
ENDIF
// Estrella fugaz
shootingStar = isBearish AND upperWick > 2 * body AND lowerWick < body
IF shootingStar THEN
drawtext("Estrella F.", barindex, high + miATR,dialog,standard,14) coloured("Blue")
ENDIF
// Envolvente alcista
bullEngulfing = close[1] < open[1] AND close > open AND open < close[1] AND close > open[1]
IF bullEngulfing THEN
drawtext("Eng. Alcista", barindex, low - miATR,dialog,standard,14) coloured("Green")
ENDIF
// Envolvente bajista
bearEngulfing = close[1] > open[1] AND close < open AND open > close[1] AND close < open[1]
IF bearEngulfing THEN
drawtext("Eng. Bajista", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
// Penetrante
penetrating = close[1] > open[1] AND open < close[1] AND (close > ((open[1] + abs(close[1] - open[1]) / 2))) AND close < open[1] //Midpont
IF penetrating THEN
drawtext("Penetrante", barindex, low - miATR,dialog,standard,14) coloured("Green")
ENDIF
// Nube oscura
darkCloud = close[1] < open[1] AND open > close[1] AND (close > ((open[1] + abs(close[1] - open[1]) / 2))) AND close > open[1]//, open[1]) //Midpont
IF darkCloud THEN
drawtext("N. Oscura", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
// Estrella de la mañana (requiere 3 velas)
morningStar = close[2] < open[2] AND body[1] < body[2] AND (close > ((open[2] + abs(close[2] - open[2]) / 2)))//, close[2]) //Midpont
IF morningStar THEN
drawtext("E. Mañana", barindex, low - miATR,dialog,standard,14) coloured("Green")
ENDIF
// Estrella del atardecer
eveningStar = close[2] > open[2] AND body[1] < body[2] AND (close > ((open[2] + abs(close[2] - open[2]) / 2)))//, close[2]) //Midpont
IF eveningStar THEN
drawtext("E. Atardecer", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
// Tres soldados blancos
whiteSoldiers = isBullish AND isBullish[1] AND isBullish[2] AND close > close[1] AND close[1] > close[2]
IF whiteSoldiers THEN
drawtext("3 Soldados", barindex, low - miATR,dialog,standard,14) coloured("Green")
ENDIF
// Tres cuervos negros
blackCrows = isBearish AND isBearish[1] AND isBearish[2] AND close < close[1] AND close[1] < close[2]
IF blackCrows THEN
drawtext("3 Cuervos", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
// Doji
doji = abs(close - open) <= (high - low) * 0.1
IF doji THEN
drawtext("Doji", barindex, close + miATR,dialog,standard,14) coloured("Orange")
ENDIF
// Trompo
spinningTop = body < (high - low) * 0.3 AND upperWick > body AND lowerWick > body
IF spinningTop THEN
drawtext("Trompo", barindex, close + miATR,dialog,standard,14) coloured("Orange")
ENDIF
// Triple formación alcista
threeLineStrikeUp = close[3] < close[2] AND close[2] < close[1] AND close > close[1] AND open < close[3]
IF threeLineStrikeUp THEN
drawtext("Triple Alcista", barindex, low - miATR,dialog,standard,14) coloured("Green")
ENDIF
// Triple formación bajista
threeLineStrikeDown = close[3] > close[2] AND close[2] > close[1] AND close < close[1] AND open > close[3]
IF threeLineStrikeDown THEN
drawtext("Triple Bajista", barindex, high + miATR,dialog,standard,14) coloured("Red")
ENDIF
RETURN
Espero haber interpretado correctamente el significado de MIDPOINT, que no existe en ProRealTime.
Lo pensé como el punto medio entre OPEN y CLOSE, ¿de acuerdo?