La línea del cierre sigue el movimiento de cada vela. Si calculas la media de varios cierres consecutivos, obtienes una línea menos irregular. En este capítulo crearás dos medias móviles a partir de diez velas.

Calcula la media

La media simple de tres valores es su suma dividida entre tres. Si los valores son 100, 103 y 101, la media es:

(100 + 103 + 101) / 3 = 101.333...

La ventana de una media móvil tiene un tamaño fijo, pero avanza con las velas. En la siguiente vela, una ventana de tres recibe el nuevo cierre y descarta el más antiguo.

Si el nuevo cierre es 105, la siguiente media es (103 + 101 + 105) / 3, es decir, 103. El primer cierre, 100, ya no pertenece a esa ventana.

Una media móvil simple de diez velas necesita el cierre actual y los nueve anteriores. No usamos la vela actual más diez anteriores: diez es el número total de valores incluidos.

Las funciones de ta

El espacio de nombres ta contiene cálculos ya preparados. ta.sma(close, 10) devuelve la media móvil simple de diez cierres. SMA significa «simple moving average».

La llamada tiene dos argumentos:

  • close: la fuente cuyos valores promediamos;
  • 10: el tamaño de la ventana en velas.

En las primeras nueve velas todavía no hay diez cierres disponibles. La SMA es na en ellas y su primer valor válido aparece en la décima. Esta fase inicial también se llama calentamiento.

El tamaño de la ventana no es una duración en segundos. Diez velas diarias y diez velas de una hora abarcan períodos distintos.

SMA y EMA juntas

La EMA, o media móvil exponencial, da más peso a los valores recientes. ta.ema(close, 10) también utiliza una longitud de diez velas, pero calcula con otra fórmula.

La EMA empieza con la media simple de la primera ventana completa. Con longitud diez, ambas líneas aparecen en la décima vela. Después, la EMA suma a su valor anterior una parte de la diferencia entre el nuevo precio y la EMA anterior. Esa proporción es 2 / (10 + 1).

Crea 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)

Ejecútalo con los datos de demostración. La SMA azul y la EMA naranja aparecen junto a las velas de precio. Recorre el gráfico y observa las zonas donde el precio cambia bruscamente de dirección. Las dos medias no reaccionan necesariamente al mismo ritmo.

Tras ejecutar moving_averages.py en PyneIDE, aparecen líneas SMA azul y EMA naranja sobre las velas.
Se calculan una SMA y una EMA de longitud diez con los mismos cierres.

La media es una línea calculada a partir de valores pasados. Su forma más suave no indica por sí sola hacia dónde se moverá el precio.

¿Por qué calculamos en cada vela?

ta.sma y ta.ema utilizan estado de cálculo entre ejecuciones consecutivas. En este ejemplo, ambas llamadas se ejecutan en cada vela.

Más adelante escribiremos código que realiza una operación solo en determinados casos: por ejemplo, dibujar una marca si el cierre está por encima de la media. Lo aprenderás en Condiciones y marcas.

Incluso entonces, calcula la media en cada vela y decide después cómo utilizarla. Si llamas a ta.sma solo en las velas alcistas, el cálculo se omite en las demás y el resultado puede diferir del obtenido sobre toda la secuencia. Por ahora, asegúrate de que ambos cálculos se ejecuten en cada vela.

Estas líneas no necesitan una anotación Series en tus variables: dibujamos los valores actuales y no usamos simple_average[1]. Si después quieres indexar directamente el historial de una variable propia, añade Series[float].

Ventanas más largas y más cortas

Al aumentar la longitud, más precios anteriores influyen en la media. La línea suele ser más suave y seguir los cambios con más retraso. Con una longitud menor, los movimientos recientes tienen más efecto.

Pruébalo con los mismos datos:

  1. Ejecuta ambas medias de diez y observa un giro de precio fácil de reconocer.
  2. Cambia la longitud a 30 en ambas llamadas.
  3. Cambia también los títulos a SMA 30 y EMA 30.
  4. Vuelve a ejecutar y busca el mismo momento.

Modificamos el título porque "SMA 10" es solo una etiqueta. Su número no modifica el cálculo. El segundo argumento de la llamada controla la ventana.

Pruébalo por tu cuenta

Crea dos medias móviles simples: una de cinco velas y otra de veinte. La corta debe ser azul y la larga naranja. Pon un título adecuado a cada una.

Solución del ejercicio

En el cuerpo de main(), sustituye los cálculos y dibujos 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)

Con longitud cinco faltan las cuatro primeras velas; con veinte, las primeras diecinueve. Después del calentamiento, ambas líneas usan la misma serie de cierres con tamaños de ventana distintos.

Comprueba la ventana

Puedes comprobar a mano una SMA de tres velas. Ajusta la longitud a tres, elige tres cierres consecutivos y calcula su media. En la tercera vela, el gráfico muestra el mismo valor. Las primeras dos no tienen una ventana completa.