¿Qué es Pyne?
Conoce el lenguaje Pyne code, su relación con Python y el papel de PyneIDE.
Pyne es un sistema para crear programas que trabajan con datos de mercado. Con ellos puedes calcular y representar valores derivados de los precios o definir las reglas de una estrategia de trading. En este libro recorreremos todo ese trabajo, desde escribir el programa hasta comprobar sus resultados.
¿A qué llamamos Pyne code?
Escribimos los programas en Pyne code. Es un lenguaje propio, diseñado para procesar datos de mercado. El código describe qué debe calcular el sistema, qué debe mostrar y qué condiciones deben cumplirse para realizar una operación.
edge utilizada en el libro permite un conjunto definido de las posibilidades de Python; por tanto, no estamos aprendiendo todo el lenguaje Python de propósito general.Un indicador puede calcular, por ejemplo, el precio medio de las últimas diez velas y dibujarlo como una línea en el gráfico de precios. El gráfico muestra cómo cambian los precios con el tiempo. Una estrategia también define reglas de entrada y salida: por ejemplo, abre una posición compradora cuando se cumple una condición. Al ejecutarla sobre datos históricos puedes examinar qué operaciones habrían producido esas reglas bajo las condiciones de ejecución especificadas. Esto se llama backtest.
Primero crearemos indicadores sencillos. Con ellos aprenderás a manejar los datos y el lenguaje antes de escribir reglas de trading.
¿Qué relación tiene con Python?
Pyne code utiliza las reglas de escritura de Python. Estas reglas se llaman sintaxis: determinan, por ejemplo, dónde colocar los paréntesis y cómo indicar qué líneas forman un bloque. No necesitas aprender Python antes; conocerás las reglas necesarias a través de los ejemplos del libro.
Por eso los archivos llevan la extensión .py, habitual en Python. Pyne code también puede ejecutarse en un entorno de Python con PyneCore instalado. Python proporciona el entorno de ejecución, mientras que PyneCore aporta el funcionamiento propio de Pyne y su biblioteca de funciones.
¿Cómo procesa los datos el programa?
En los ejemplos recibimos los datos de mercado como una secuencia de velas. Una vela resume los datos de un período, entre ellos el precio de apertura y el de cierre. En datos diarios, una vela representa un día.
PyneCore ejecuta los cálculos del programa sobre estas velas en orden. Por ejemplo, puede volver a calcular una media en cada vela usando los precios disponibles hasta ese momento. También gestiona los valores anteriores de los cálculos y los datos que deben conservarse entre velas.
Este funcionamiento difiere del de un programa Python habitual. La marca @pyne al principio del archivo indica a PyneCore que prepare y ejecute el código de esta manera. En el capítulo que explica el código veremos la forma exacta de la marca y el significado de edge, que la acompaña en los ejemplos del libro.
¿En qué se diferencia del procesamiento vectorizado?
Entre los entornos de trading basados en Python hay soluciones que procesan vela a vela y otras vectorizadas. En el procesamiento vectorizado, las operaciones se realizan sobre series completas de números: por ejemplo, se calculan a la vez las medias y las señales de compra para todas las velas. Los datos suelen manejarse en tablas o matrices.
En PyneCore describes lo que debe hacerse en la vela actual. El sistema lo ejecuta y pasa a la siguiente. Gestiona el historial de los cálculos y el estado que debe conservarse según las reglas propias de Pyne.
Escribes los pasos en una función sencilla
Varios entornos que trabajan vela a vela requieren crear una clase para la estrategia. Una clase reúne sus datos y operaciones; las funciones que se definen en ella se llaman métodos. En estos entornos escribes la configuración y las reglas de trading en los métodos que exige el sistema, y accedes a los precios o a la posición mediante los datos de la clase.
En los ejemplos de Pyne code, escribes en una función main() qué quieres calcular y bajo qué condiciones quieres actuar. Sus líneas se ejecutan en secuencia para cada vela: primero calculas un valor, después compruebas una condición y, por último, dibujas una señal o envías una orden. PyneCore se encarga de recorrer las velas.
Así puedes empezar sin aprender a crear clases ni utilizar herencia, ni repartir el programa entre los métodos de un entorno. Para los ejemplos sencillos basta con conocer variables, llamadas a funciones y condiciones; los aprenderás en los siguientes capítulos.
Puedes seguir la regla en orden temporal
Este enfoque se parece a cómo razonas una decisión de trading: «Miro el precio actual y su movimiento hasta ahora. Si se cumple mi condición, entro. Mientras tenga una posición, vigilo la condición de salida». Puedes seguir los acontecimientos en ese mismo orden en el código y examinar las variables de una vela concreta con el depurador.
Es más difícil usar datos futuros por accidente
En el procesamiento vectorizado puede estar disponible toda la serie de datos. Un desplazamiento en la dirección equivocada o una media mal elegida puede incluir un precio que todavía no se conocía cuando se tomó la decisión. Por ejemplo, utilizar la media de todo el año para decidir en enero también incorporaría los precios de los meses posteriores. El programa puede ejecutarse y mostrar resultados convincentes; el error puede ser difícil de detectar. Esto se conoce como sesgo de anticipación, o look-ahead bias.
Las series temporales propias de Pyne permiten acceder a la vela actual y a las ya procesadas. Una consulta al historial no permite leer el precio de la siguiente vela. Esto reduce la posibilidad de utilizar datos futuros por accidente y facilita comprobar qué información llevó a una decisión.
Aun así, hay que prestar atención a la preparación de los datos. Si un dato externo ya contiene información que solo se conoció más tarde, la ejecución vela a vela no puede detectarlo por sí sola.
Puede haber un compromiso de velocidad
Para algunos programas, la ejecución vela a vela puede ser más lenta que un cálculo vectorizado bien escrito. Esto puede importar especialmente al probar muchas variantes de una estrategia o de sus parámetros sobre un conjunto de datos grande. Los sistemas vectorizados suelen acelerar estos cálculos masivos con bibliotecas numéricas optimizadas. La diferencia real depende del programa y de la cantidad de datos.
En el libro aprenderás el funcionamiento vela a vela: reglas expresadas en orden temporal y cómo comprobar los antecedentes de cada decisión.
Para conocer otros enfoques: procesamiento vectorizado en VectorBT y estrategias vela a vela en Backtrader (en inglés).
¿Para qué sirven PyneIDE y PyneCore?
PyneIDE es una extensión del editor Visual Studio Code. En ella escribes el programa, eliges sus datos e inicias la ejecución. También examinas el resultado en el gráfico y buscas los errores.
PyneCore es el sistema que ejecuta el programa. Lo carga y prepara, procesa las velas con él y genera los resultados de los cálculos y las operaciones. PyneIDE lo utiliza en segundo plano y muestra los resultados.
En el siguiente capítulo configurarás PyneIDE y crearás tu primer proyecto. Aprenderemos con datos de ejemplo, de modo que puedas volver a ejecutar el mismo programa y comparar los resultados de tus cambios.