Variáveis e cálculos próprios
Calcule a amplitude e o ponto médio com os dados dos candles e exiba os resultados.
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.
Um pouco de história: de onde vêm os candles japoneses?
As origens dessa representação estão nos mercados de arroz japoneses do século 18. As técnicas de análise de preços desenvolvidas ali deram origem aos gráficos de candles no século 19. Steve Nison os apresentou a um público ocidental mais amplo com o livro Japanese Candlestick Charting Techniques, publicado em 1991.
O “corpo”, a parte mais grossa do candle, mostra o intervalo entre abertura e fechamento. Os “pavios”, mais finos, indicam a máxima e a mínima do intervalo.
Contexto histórico e ilustrações: AAII Journal (em inglês).
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 - lowhigh - 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.
Por que usamos nomes em inglês e sem acentos?
As palavras-chave da linguagem e os nomes da biblioteca Pyne também se baseiam em palavras inglesas, como def, close e plot. Nomes de variáveis em inglês combinam com esses termos e facilitam a leitura por pessoas que não falam português. Isso ajuda quando você compartilha o programa ou trabalha nele com outras pessoas.
Pyne code também permite letras acentuadas e outros caracteres além do alfabeto inglês nos nomes das variáveis. Portanto, usar nomes em inglês sem acentos é uma recomendação de nomenclatura. É mais fácil digitá-los em teclados de outros idiomas e compartilhar o código em um contexto internacional. Por isso, o livro adota esse padrão de forma consistente.
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.

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:
- Calcula
candle_rangecom os valoreshighelowdaquele candle. plotexibe esse valor na posição do candle correspondente.
Por exemplo:
- Primeiro candle:
high= 108,low= 101, portantocandle_range= 7. - Segundo candle:
high= 110,low= 106, portantocandle_range= 4. - Terceiro candle:
high= 109,low= 103, portantocandle_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) / 2Primeiro 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.

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 / 2A 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.
- O nome do arquivo deve ser
candle_change.py. - O título do indicador deve ser
"Candle Change", exibido em um painel separado. - O resultado do cálculo deve se chamar
candle_change. - 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.