Médias móveis
Crie linhas de SMA e EMA e observe o efeito da janela de cálculo.
A linha de fechamento acompanha o movimento de preço de cada candle. Se você calcular a média de vários fechamentos consecutivos, obterá uma linha menos irregular. Neste capítulo, vai criar duas médias móveis com base em dez candles.
Como calcular a média
A média simples de três valores é a soma deles dividida por três. Se os valores forem 100, 103 e 101, a média será:
(100 + 103 + 101) / 3 = 101.333...O tamanho da janela de uma média móvel é constante, mas a janela avança junto com os candles. Em uma janela de três candles, o próximo candle traz um novo fechamento, enquanto o mais antigo sai.
Se o novo fechamento for 105, a próxima média já será (103 + 101 + 105) / 3, ou seja, 103. O primeiro fechamento, de 100, já não faz parte dessa janela.
Uma média móvel simples de dez candles usa o fechamento atual e os nove anteriores. Não usamos o atual mais dez anteriores: dez é o número total de valores considerados.
As funções de ta
O namespace ta contém cálculos prontos. ta.sma(close, 10) fornece a média móvel simples de dez fechamentos. SMA é a sigla de “simple moving average”.
A chamada tem dois argumentos:
close: a fonte dos valores usados para calcular a média;10: o tamanho da janela em candles.
Nos nove primeiros candles, ainda não há dez fechamentos disponíveis. Neles, a SMA é na; seu primeiro valor válido aparece no décimo candle. Esse trecho inicial também é chamado de aquecimento.
O tamanho da janela não é uma duração em segundos. Dez candles diários e dez candles de uma hora cobrem intervalos diferentes.
SMA e EMA lado a lado
A EMA, ou média móvel exponencial, dá mais peso aos valores recentes. ta.ema(close, 10) também usa um parâmetro de comprimento de dez candles, mas aplica outra fórmula.
A EMA começa com a média simples da primeira janela completa. Com comprimento dez, portanto, as duas linhas aparecem no décimo candle. Depois disso, a EMA acrescenta ao seu valor anterior uma fração da diferença entre o novo preço e a EMA anterior. Essa fração é 2 / (10 + 1).
Crie o arquivo moving_averages.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta
@script.indicator("Two Moving Averages", overlay=True)
def main():
simple_average = ta.sma(close, 10)
exponential_average = ta.ema(close, 10)
plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)Execute com os dados de demonstração. A SMA azul e a EMA laranja aparecem junto aos candles. Movimente o gráfico e observe trechos em que o preço muda de direção bruscamente. As duas médias nem sempre reagem no mesmo ritmo.

A média é uma linha calculada com valores passados. Seu formato mais suave, por si só, não informa para onde o preço vai se mover.
Por que calcular em todos os candles?
ta.sma e ta.ema usam estado de cálculo entre execuções consecutivas. No exemplo, as duas chamadas são executadas em cada candle.
Mais adiante, vamos escrever código que realiza uma operação apenas em certos casos: por exemplo, desenhar uma marcação quando o fechamento está acima da média. Você aprenderá isso no capítulo Condições e marcações.
Mesmo nesses casos, calcule a média em todos os candles e só depois decida como usá-la. Se chamar ta.sma apenas nos candles de alta, por exemplo, o cálculo será omitido nos demais candles, e o resultado poderá ser diferente da média calculada sobre a sequência completa. Por enquanto, lembre-se de executar os dois cálculos de média em cada candle.
Essas duas linhas não exigem a anotação Series nas nossas variáveis: estamos desenhando os valores atuais e não usamos uma expressão simple_average[1]. Se quiser indexar diretamente o histórico da sua variável mais adiante, use a anotação Series[float].
Janelas mais longas e mais curtas
Ao aumentar o comprimento, mais preços anteriores influenciam a média. A linha costuma ficar mais suave e acompanha as mudanças de preço com mais atraso. Com um comprimento menor, os movimentos recentes aparecem com mais força.
Experimente com os mesmos dados:
- Execute as duas médias de comprimento dez e observe uma mudança de direção bem definida no preço.
- Altere o comprimento para 30 nas duas chamadas.
- Mude também os títulos das linhas para
SMA 30eEMA 30. - Execute novamente e encontre o mesmo instante.
Mudamos o título porque "SMA 10" é apenas um rótulo. O número nele não modifica o cálculo. Quem controla a janela é o segundo argumento da chamada.
Tente por conta própria
Crie duas médias móveis simples: uma de cinco candles e outra de vinte. A curta deve ser azul; a longa, laranja. Dê a cada uma um título correspondente.
Solução do exercício
No corpo de main(), substitua os dois cálculos e as chamadas de desenho por:
fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)Na média de cinco, os quatro primeiros valores estão ausentes; na de vinte, os dezenove primeiros. Depois do aquecimento, as duas linhas usam a mesma série de fechamentos, com tamanhos de janela diferentes.
Confira a janela
Você pode conferir à mão uma SMA de três candles. Defina o comprimento como três, escolha três fechamentos consecutivos e calcule a média. No terceiro candle, o gráfico mostra esse mesmo valor. Nos dois primeiros, ainda não existe uma janela completa.