Se a máxima de um candle for 108 e a mínima for 101, a diferença entre elas é 7. Vamos calcular e desenhar essa amplitude de preços para cada candle.

O segundo programa calcula o ponto médio entre esses dois preços. Nos dois exemplos, vamos trabalhar com variáveis e operações aritméticas simples.

O que representa um candle?

Um candle resume os dados de um intervalo de tempo. O período gráfico determina a duração desse intervalo. Em dados de uma hora, por exemplo, cada candle corresponde a uma hora.

Você encontrará cinco dados básicos:

  • open: o preço de abertura do intervalo;
  • high: o maior preço do intervalo;
  • low: o menor preço do intervalo;
  • close: o preço de fechamento do intervalo;
  • volume: o volume do intervalo, na unidade usada pela fonte dos dados.

As iniciais desses nomes em inglês formam a sigla OHLCV. Nos primeiros exemplos do livro, usamos dados de demonstração com candles já encerrados.

close sempre representa o preço de fechamento do candle que o programa está processando. No próximo candle, passa a representar o fechamento dele. O mesmo vale para os outros dados básicos.

Calcule a amplitude

Se a máxima for 108 e a mínima for 101, o preço percorreu uma amplitude de 7 unidades:

108 − 101 = 7

No código, escrevemos assim:

candle_range = high - low

high - low é uma expressão: o programa a avalia e produz um resultado. O sinal - representa subtração.

candle_range é o nome de uma variável. O sinal = atribui a ela o resultado da expressão à direita. Chamamos essa operação de atribuição.

Leia a linha assim: “Calcule a diferença entre high e low e dê ao resultado o nome candle_range.” Depois, você pode usar esse nome nas outras linhas do programa para acessar o valor.

Escolha um nome claro

candle_range informa que o valor é a amplitude de um candle. Um nome como x ajuda menos na leitura do código.

No livro, usamos nomes de variáveis em inglês, com letras minúsculas e palavras separadas por sublinhados. O nome não deve começar com um número nem conter espaços. candle_range e Candle_range seriam nomes diferentes.

Crie um indicador em um painel separado

Crie um arquivo chamado candle_range.py na pasta scripts e escreva este programa:

"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script


@script.indicator("Candle Range", overlay=False)
def main():
    candle_range = high - low
    plot(candle_range, "Range", color=color.orange, linewidth=2)

A primeira linha de main() calcula o valor; a segunda o passa a plot pelo nome candle_range. A atribuição precisa acontecer antes de o valor ser usado.

overlay=False solicita um painel separado. Assim, você vê a amplitude em sua própria escala: uma amplitude de 7 unidades e um preço próximo de 100, por exemplo, têm ordens de grandeza diferentes.

Salve e execute o programa com os mesmos dados de demonstração.

Ao lado do código de candle_range.py, há um painel Range separado abaixo dos candles.
A linha Range mostra a diferença entre high e low em um painel separado. Um valor maior indica uma amplitude de preços maior dentro do candle.

Como interpretar o resultado?

Pontos mais altos correspondem a diferenças de preço maiores. Pontos mais baixos indicam amplitudes menores. O cálculo usa toda a máxima e a mínima do candle, incluindo os pavios.

Candles de alta e de baixa podem ter a mesma amplitude, por isso esse valor não informa a direção do movimento. high é pelo menos igual a low; com dados de candles corretos, o resultado não é negativo.

O que acontece com a variável no próximo candle?

O programa repete estes dois passos em cada candle processado:

  1. Calcula candle_range com os valores high e low daquele candle.
  2. plot exibe esse valor na posição do candle correspondente.

Por exemplo:

  • Primeiro candle: high = 108, low = 101, portanto candle_range = 7.
  • Segundo candle: high = 110, low = 106, portanto candle_range = 4.
  • Terceiro candle: high = 109, low = 103, portanto candle_range = 6.

Isso produz no gráfico três pontos correspondentes aos valores 7, 4 e 6. A variável recebe o resultado do cálculo atual a cada candle.

Veremos mais adiante como acessar valores de candles anteriores e preservar estado.

Adição, multiplicação e divisão

No código, usamos estes sinais para fazer cálculos simples:

  • +: adição;
  • -: subtração;
  • *: multiplicação;
  • /: divisão.

A multiplicação e a divisão acontecem antes da adição e da subtração. Os parênteses indicam o que deve ser calculado primeiro.

O ponto médio da amplitude de preços:

midpoint = (high + low) / 2

Primeiro somamos os dois preços e depois dividimos o resultado por dois. Se high = 108 e low = 101, o ponto médio é 104,5.

Observe o separador decimal: no código, escrevemos 104.5, mesmo que em um texto em português brasileiro usemos 104,5. A vírgula tem outro papel no código, como separar os parâmetros de uma função.

Desenhe o ponto médio

Crie um arquivo chamado candle_midpoint.py:

"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script


@script.indicator("Candle Midpoint", overlay=True)
def main():
    midpoint = (high + low) / 2
    plot(midpoint, "Midpoint", color=color.purple, linewidth=2)

Aqui, usamos novamente overlay=True. Queremos ver o ponto médio na mesma escala de preços dos candles.

Ao lado de candle_midpoint.py, o gráfico mostra a linha Midpoint conectando os pontos médios dos candles.
A linha Midpoint indica o ponto médio entre high e low em cada candle.

Depois de executar, escolha um candle e observe o ponto da linha na posição dele. Esse ponto fica no meio da amplitude total do candle, incluindo os pavios. Ele pode ser diferente do centro do corpo, que é determinado pelos preços de abertura e fechamento.

Por que os parênteses são importantes?

Estas duas expressões descrevem cálculos diferentes:

(high + low) / 2
high + low / 2

A segunda linha primeiro divide apenas low por dois e depois soma high. Com os valores 108 e 101 usados acima, o resultado seria 158,5. Esse valor já não é o ponto médio entre os dois preços.

As duas expressões são sintaticamente corretas, mas produzem resultados diferentes. Um exemplo que você consiga calcular à mão permite conferir rapidamente se o código descreve o cálculo desejado.

Tente por conta própria

Desenhe a variação com sinal do corpo do candle: subtraia a abertura do fechamento.

  1. O nome do arquivo deve ser candle_change.py.
  2. O título do indicador deve ser "Candle Change", exibido em um painel separado.
  3. O resultado do cálculo deve se chamar candle_change.
  4. O nome do desenho deve ser "Change".

Antes de executar, calcule o resultado esperado nestes três casos:

  • open = 100, close = 104;
  • open = 100, close = 97;
  • open = 100, close = 100.
Solução do exercício

Os três resultados são 4, −3 e 0. Um valor positivo indica fechamento acima da abertura; um negativo, fechamento abaixo da abertura; zero indica preços iguais de abertura e fechamento.

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


@script.indicator("Candle Change", overlay=False)
def main():
    candle_change = close - open
    plot(candle_change, "Change", color=color.blue, linewidth=2)

Compare os três programas

Abra, um após o outro, os programas que calculam a amplitude, o ponto médio e a variação. Cada um calcula uma variável com os dados OHLC e a desenha na linha seguinte. O programa processa os dados candle a candle. As diferenças estão no cálculo e na configuração de overlay.

No próximo capítulo, vamos comparar valores de dois candles e ver como acessar os dados do candle anterior.