Condições e marcações
Use comparações para escolher cores e marcar apenas os candles que atendem à condição.
Agora você vai criar um programa que distingue candles de alta e de baixa. Ele verifica a relação entre abertura e fechamento e mostra o resultado com uma cor e uma marcação.
Verdadeiro ou falso
O resultado da comparação close > open é True se o fechamento for maior que a abertura; caso contrário, é False. Esse é um valor lógico, de tipo bool.
A comparação não altera nenhum dos preços. Apenas responde a uma pergunta.
| Sinal | Significado | Exemplo |
|---|---|---|
> | Maior | close > open |
< | Menor | close < open |
>= | Maior ou igual | close >= open |
<= | Menor ou igual | close <= open |
== | Igual | close == open |
!= | Diferente | close != open |
= atribui um valor a uma variável; == compara dois valores. A linha bullish = close > open coloca o resultado da comparação na variável bullish.
Se abertura e fechamento forem iguais, nem close > open nem close < open será verdadeiro. Para completar a decisão, também vamos tratar esse caso.
if, elif e else
A condição depois de if determina se o bloco indentado será executado:
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.grayPrimeiro, verificamos a condição de if. Se for verdadeira, escolhemos verde e ignoramos os demais ramos. Se for falsa, passamos a elif. O bloco de else é executado quando nenhuma condição anterior foi verdadeira.
Cada ramo termina com dois-pontos. Seu conteúdo recebe mais quatro espaços de indentação. Dentro de main(), portanto, a linha de if começa com quatro espaços; a atribuição dentro dela, com oito.
O programa completo
Crie o arquivo 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)Execute com os dados de demonstração. A cor da linha de fechamento muda de um candle para outro. Triângulos verdes aparecem abaixo dos candles de alta.

O primeiro argumento de plotshape informa quando a marcação deve aparecer. style controla seu formato; location, sua posição em relação ao candle. Aqui, o candle marcado simplesmente fechou acima da própria abertura. A marcação não implica uma ordem de compra.
Também não é preciso decorar os parâmetros: passe o mouse sobre o nome plotshape no código e consulte a ajuda. Os passos estão no capítulo Ajuda enquanto você escreve código, junto com a opção de ir para a definição.
O lugar do cálculo importa
plot e plotshape são executados em todos os candles. Alteramos o valor, a cor ou a condição a desenhar. Assim, a exibição recebe um resultado para cada candle.
A mesma ordem é adequada para a média móvel:
average = ta.sma(close, 20)
above_average = close > averagePrimeiro, calculamos a média a cada candle. A condição a usa depois. Não coloque a chamada ta.sma dentro do ramo if bullish:, pois ela só seria executada nos candles de alta.
Enquanto o valor inicial da SMA estiver ausente, a condição close > average não produz um sinal verdadeiro. Se o código precisar reagir especificamente à ausência, use a verificação na(average). average == na não é uma forma adequada de verificar valores ausentes.
Combine várias condições
and é verdadeiro quando os dois lados são verdadeiros. or é verdadeiro quando pelo menos um deles é verdadeiro. not inverte o valor lógico.
strong_bullish = close > open and close > close[1]Essa condição exige duas coisas ao mesmo tempo: que o candle seja de alta e que seu fechamento esteja acima do fechamento anterior. Um candle de alta ainda pode fechar abaixo do fechamento do candle anterior; por isso, são duas condições diferentes.
and e or usam avaliação de curto-circuito: se a primeira parte já determina o resultado, a segunda não é avaliada. Com and, isso ocorre quando a primeira parte é falsa; com or, quando a primeira é verdadeira. Por isso, execute cálculos que usam estado em linhas separadas e combine os valores lógicos obtidos.
Escolha de valor em uma expressão
Você também pode escolher entre dois valores em uma única expressão:
line_color = color.green if bullish else color.redEla escolhe verde se bullish for verdadeiro; caso contrário, vermelho. Também escolheria vermelho quando abertura e fechamento fossem iguais. Se quiser marcar esse caso com cinza, mantenha a decisão completa com três ramos.
Tente por conta própria
Desenhe um triângulo vermelho voltado para baixo acima dos candles de baixa. Preserve a marcação verde. Depois, torne as condições das duas marcações mais restritivas, comparando também com o fechamento anterior.
Solução do exercício
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)Substitua a chamada original de plotshape verde pelas duas novas chamadas. A escolha da cor continua usando apenas abertura e fechamento do candle. As marcações também passam a comparar com o fechamento anterior.
Encontre um candle sem marcação
Procure um candle de alta que ficou sem marcação verde na versão mais restritiva. Confira sua abertura e o fechamento anterior. Explique em qual parte de and a condição falhou.