Ahora crearás un programa que distingue las velas alcistas de las bajistas. Comprueba la relación entre apertura y cierre y muestra el resultado con un color y una marca.

Verdadero o falso

close > open devuelve True si el cierre es mayor que la apertura y False en caso contrario. Es un valor lógico o booleano, de tipo bool.

La comparación no cambia los precios. Solo responde a una pregunta.

SignoSignificadoEjemplo
>Mayor queclose > open
<Menor queclose < open
>=Mayor o igualclose >= open
<=Menor o igualclose <= open
==Igualclose == open
!=Distintoclose != open

= asigna un valor a una variable; == compara dos valores. bullish = close > open guarda el resultado de la comparación en bullish.

Si apertura y cierre son iguales, ni close > open ni close < open son verdaderos. También tratamos este caso para completar la decisión.

if, elif y else

La condición después de if decide si se ejecuta el bloque sangrado:

if bullish:
    line_color = color.green
elif bearish:
    line_color = color.red
else:
    line_color = color.gray

Primero comprobamos if. Si es verdadero, elegimos verde y omitimos las demás ramas. Si es falso, seguimos con elif. else se ejecuta cuando ninguna condición anterior fue verdadera.

Cada rama comienza con una línea terminada en dos puntos. Su interior lleva otros cuatro espacios de sangría. Dentro de main(), la línea if empieza con cuatro y la asignación interior con ocho.

El programa completo

Crea candle_conditions.py:

"""
@pyne edge
"""
from pynecore.lib import close, color, location, open, plot, plotshape, script, shape


@script.indicator("Candle Conditions", overlay=True)
def main():
    bullish = close > open
    bearish = close < open
    if bullish:
        line_color = color.green
    elif bearish:
        line_color = color.red
    else:
        line_color = color.gray
    plot(close, "Close", color=line_color, linewidth=2)
    plotshape(bullish, "Bullish candle", style=shape.triangleup,
              location=location.belowbar, color=color.green)

Ejecútalo con los datos de demostración. El color de la línea del cierre cambia en cada vela. Debajo de las alcistas aparece un triángulo verde.

El gráfico de candle_conditions.py muestra una línea de cierre con colores variables y triángulos verdes.
La condición lógica elige un color y dibuja triángulos debajo de las velas alcistas.

El primer argumento de plotshape indica cuándo aparece la marca. style controla su forma; location, su posición respecto a la vela. Aquí una vela marcada simplemente cerró por encima de su apertura. La marca no implica una orden de compra.

Tampoco necesitas memorizar estos parámetros: pasa el puntero sobre plotshape en el código y consulta la ayuda. Encontrarás los pasos y el salto a la definición en Ayuda mientras escribes código.

Importa dónde calculas

plot y plotshape se ejecutan en todas las velas. Lo que cambiamos es el valor, color o condición que se representa. Así la visualización recibe un resultado para cada vela.

Este orden también es adecuado para una media móvil:

average = ta.sma(close, 20)
above_average = close > average

Primero calculamos la media en cada vela y después la usamos en la condición. No pongas ta.sma dentro de if bullish:, porque solo se ejecutaría en velas alcistas.

Cuando el valor inicial de la SMA está ausente, close > average no produce una señal verdadera. Si el código necesita reaccionar específicamente a la ausencia, utiliza na(average). average == na no comprueba correctamente si falta un valor.

Combina condiciones

and es verdadero si ambos lados son verdaderos. or lo es si al menos uno es verdadero. not invierte el valor lógico.

strong_bullish = close > open and close > close[1]

Esta condición exige dos cosas: que la vela sea alcista y que su cierre supere el anterior. Una vela alcista puede cerrar por debajo del cierre anterior; son comprobaciones distintas.

and y or evalúan en cortocircuito: si la primera parte determina el resultado, la segunda no se evalúa. Con and ocurre si la primera es falsa; con or, si es verdadera. Ejecuta los cálculos con estado en líneas separadas y combina después sus resultados lógicos.

Elige un valor con una expresión

Puedes elegir entre dos valores en una sola expresión:

line_color = color.green if bullish else color.red

Elige verde si bullish es verdadero y rojo en caso contrario. También daría rojo cuando apertura y cierre son iguales. Para representar ese caso en gris, conserva la decisión completa de tres ramas.

Pruébalo por tu cuenta

Dibuja un triángulo rojo hacia abajo encima de las velas bajistas. Conserva la marca verde. Después endurece ambas condiciones comparando también con el cierre anterior.

Solución del ejercicio
bullish_signal = bullish and close > close[1]
bearish_signal = bearish and close < close[1]
plotshape(bullish_signal, "Bullish signal", style=shape.triangleup,
          location=location.belowbar, color=color.green)
plotshape(bearish_signal, "Bearish signal", style=shape.triangledown,
          location=location.abovebar, color=color.red)

Sustituye la llamada verde original a plotshape por las dos nuevas. La elección del color sigue considerando solo la apertura y el cierre de la vela. Las marcas ya comparan también con el cierre anterior.

Busca una vela que se haya omitido

Busca una vela alcista que no reciba marca verde en la versión más estricta. Comprueba su apertura y el cierre anterior. Explica qué parte de and hizo que la condición fallara.