Si el máximo de una vela es 108 y su mínimo es 101, la diferencia es 7. Calcularemos y dibujaremos este rango de precios para cada vela.

El segundo programa calcula el punto medio entre los dos precios. Ambos ejemplos utilizan variables y operaciones aritméticas sencillas.

¿Qué representa una vela?

Una vela resume los datos de un período. La temporalidad determina su duración. Por ejemplo, en datos de una hora, cada vela corresponde a una hora.

Encontrarás cinco datos básicos:

  • open: el precio de apertura del período;
  • high: el precio más alto del período;
  • low: el precio más bajo del período;
  • close: el precio de cierre del período;
  • volume: el volumen del período, en la unidad utilizada por la fuente de datos.

Sus iniciales en inglés forman la abreviatura OHLCV. En los primeros ejemplos trabajamos con datos de ejemplo de velas ya cerradas.

close siempre representa el cierre de la vela que el programa procesa en ese momento. En la siguiente vela usará el cierre de esa otra vela. Lo mismo ocurre con los demás datos básicos.

Calcula el rango

Si el máximo es 108 y el mínimo 101, el precio ha recorrido un rango de 7 unidades:

108 − 101 = 7

En código lo escribimos así:

candle_range = high - low

high - low es una expresión: el programa la evalúa y produce un resultado. - significa resta.

candle_range es el nombre de una variable. = le asigna el resultado de la expresión de la derecha. Esta operación se llama asignación.

Lee la línea así: «Calcula la diferencia entre high y low y llama candle_range al resultado». A partir de ahí puedes utilizar ese valor con ese nombre en el resto del programa.

Elige un nombre claro

candle_range indica que el valor es el rango de una vela. Un nombre como x ayuda menos a entender el código.

En el libro usamos nombres de variables en inglés y minúsculas, con guiones bajos entre palabras. El nombre no puede empezar con un número ni contener espacios. candle_range y Candle_range serían nombres distintos.

Crea un indicador en un panel separado

Crea candle_range.py en la carpeta scripts y escribe 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)

La primera línea de main() calcula el valor; la segunda lo pasa a plot con el nombre candle_range. La asignación debe ocurrir antes de usar el valor.

overlay=False solicita un panel separado. Así ves el rango en su propia escala: por ejemplo, un rango de 7 unidades y un precio cercano a 100 tienen magnitudes distintas.

Guarda y ejecuta el programa sobre los mismos datos de demostración.

Junto al código de candle_range.py se ve un panel Range separado debajo de las velas.
La línea Range muestra la diferencia entre high y low en un panel separado. Un valor mayor significa un rango de precios más amplio dentro de la vela.

¿Cómo interpretar el resultado?

Los puntos más altos corresponden a diferencias de precio mayores. Los más bajos indican rangos menores. El cálculo utiliza el máximo y el mínimo de toda la vela, incluidas las mechas.

Una vela alcista y una bajista pueden tener el mismo rango, por lo que este valor no revela la dirección del movimiento. high es al menos igual a low, de modo que con datos correctos el resultado no es negativo.

¿Qué hace la variable en la siguiente vela?

El programa repite estos dos pasos en cada vela procesada:

  1. Calcula candle_range con los valores high y low de esa vela.
  2. plot representa ese valor en la posición de la vela.

Por ejemplo:

  • Primera vela: high = 108, low = 101, así que candle_range = 7.
  • Segunda vela: high = 110, low = 106, así que candle_range = 4.
  • Tercera vela: high = 109, low = 103, así que candle_range = 6.

De ahí salen tres puntos en el gráfico, con valores 7, 4 y 6. La variable recibe en cada vela el resultado del cálculo actual.

Más adelante veremos cómo acceder a valores de velas anteriores y conservar estado.

Suma, multiplicación y división

En el código hacemos cálculos sencillos con estos signos:

  • +: suma;
  • -: resta;
  • *: multiplicación;
  • /: división.

La multiplicación y la división se realizan antes que la suma y la resta. Los paréntesis permiten indicar qué debe calcularse primero.

El punto medio del rango de precios:

midpoint = (high + low) / 2

Primero sumamos los precios y dividimos el resultado entre dos. Si high = 108 y low = 101, el punto medio es 104,5.

Fíjate en el punto decimal: el código utiliza 104.5, aunque en un texto en español escribamos 104,5. La coma cumple otras funciones en el código, como separar los parámetros de una función.

Dibuja el punto medio

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

Volvemos a usar overlay=True. Queremos ver el punto medio en la misma escala de precios que las velas.

Junto a candle_midpoint.py, el gráfico muestra la línea Midpoint que conecta los puntos medios de las velas.
La línea Midpoint marca el punto medio entre high y low para cada vela.

Después de ejecutarlo, selecciona una vela y observa el punto de la línea en esa posición. Está en el centro de todo el rango de la vela, incluidas las mechas. Puede diferir del centro del cuerpo, determinado por la apertura y el cierre.

¿Por qué importan los paréntesis?

Estas expresiones describen cálculos distintos:

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

La segunda línea divide primero solo low entre dos y después suma high. Con 108 y 101 obtendrías 158,5. Eso ya no es el punto medio entre los precios.

Ambas expresiones tienen una sintaxis correcta, pero dan resultados distintos. Un ejemplo calculable a mano permite comprobar rápidamente si has escrito lo que querías.

Pruébalo por tu cuenta

Dibuja la variación con signo del cuerpo de la vela: resta la apertura al cierre.

  1. El archivo debe llamarse candle_change.py.
  2. El título del indicador debe ser "Candle Change" y debe aparecer en un panel separado.
  3. Llama candle_change al resultado.
  4. El dibujo debe llamarse "Change".

Antes de ejecutarlo, calcula el resultado esperado en estos casos:

  • open = 100, close = 104;
  • open = 100, close = 97;
  • open = 100, close = 100.
Solución del ejercicio

Los resultados son 4, −3 y 0. Un valor positivo significa un cierre más alto; uno negativo, un cierre más bajo; cero indica apertura y cierre iguales.

"""
@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)

Compara los tres programas

Abre sucesivamente los programas que calculan el rango, el punto medio y la variación. Todos calculan una variable a partir de datos OHLC y la dibujan en la siguiente línea. Procesan los datos vela a vela. Las diferencias están en el cálculo y en overlay.

En el siguiente capítulo compararemos valores de dos velas: veremos cómo acceder a los datos de la vela anterior.