Condiciones y marcas
Elige colores mediante comparaciones y marca solo las velas que cumplen una condición.
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.
| Signo | Significado | Ejemplo |
|---|---|---|
> | Mayor que | close > open |
< | Menor que | close < open |
>= | Mayor o igual | close >= open |
<= | Menor o igual | close <= open |
== | Igual | close == open |
!= | Distinto | close != 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.grayPrimero 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 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 > averagePrimero 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.redElige 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.