Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Equilibrio de datos de secuencia RNN: aprendizaje profundo con Python, TensorFlow y Keras p.10
Equilibrio de datos de secuencia RNN: aprendizaje profundo con Python, TensorFlow y Keras p.10
Hola a todos, y bienvenidos a otro video tutorial de aprendizaje profundo con Python, TensorFlow y Keras. En este video, continuaremos construyendo nuestro futuro predictor de movimiento de precios de criptomonedas utilizando una red neuronal recurrente (RNN)".
El video tutorial se enfoca en construir un predictor para el movimiento de precios de criptomonedas utilizando técnicas de aprendizaje profundo.
El presentador menciona que ya han realizado pasos de preprocesamiento, incluida la creación de datos secuenciales y la separación de los datos de validación. También han normalizado los datos.
El siguiente paso en el proceso es equilibrar los datos. Es importante tener el mismo número de instancias de compra y venta en el conjunto de datos. Si hay un desequilibrio, puede afectar el rendimiento del modelo. El presentador sugiere que incluso si hay un ligero desequilibrio, es mejor equilibrar los datos para evitar que el modelo favorezca una clase sobre la otra.
Para equilibrar los datos, el presentador crea dos listas: compras y ventas. Iteran sobre los datos secuenciales y verifican si el objetivo es 0 (vender) o 1 (comprar). Si se trata de una venta, agregan la secuencia a la lista de ventas. Si es una compra, la agregan a la lista de compras. Después, barajan ambas listas.
A continuación, encuentran la longitud mínima entre las dos listas (compras y ventas). Actualizan las listas de compras y ventas para que contengan solo los elementos hasta la longitud de la lista más corta. Esto asegura que ambas listas tengan el mismo número de instancias.
Luego, el presentador combina las listas de compras y ventas en la lista de datos secuenciales. Revuelven la lista de datos secuenciales nuevamente para aleatorizar aún más el orden de los datos.
El siguiente paso es dividir los datos_secuenciales en características (X) y etiquetas (Y). Crean listas vacías x e y para almacenar las características y etiquetas, respectivamente. Iteran sobre los datos secuenciales y agregan la secuencia a la lista x y el objetivo a la lista y.
Finalmente, devuelven las matrices de x e y como datos preprocesados.
Luego, el presentador procede a imprimir algunas estadísticas sobre los datos, como los tamaños de los conjuntos de datos de capacitación y validación, y el equilibrio entre las instancias de compra y venta.
En el siguiente video, planean construir y entrenar el modelo utilizando los datos preprocesados.Modelo RNN de predicción de criptomonedas: aprendizaje profundo con Python, TensorFlow y Keras p.11
Modelo RNN de predicción de criptomonedas: aprendizaje profundo con Python, TensorFlow y Keras p.11
Hola a todos y bienvenidos a otro tutorial de aprendizaje profundo con Python, TensorFlow y Keras. En este tutorial, continuaremos desde donde lo dejamos en el tutorial anterior. Nuestro objetivo es predecir los futuros movimientos de precios de una criptomoneda específica en función de sus precios históricos, volumen y otras criptomonedas importantes. Lo lograremos utilizando una red neuronal recurrente (RNN).
Para comenzar, necesitamos importar las bibliotecas necesarias. Importaremos la biblioteca de tiempo para su uso posterior. A continuación, definimos algunas constantes. La primera constante es el número de épocas para las que queremos entrenar el modelo. Establecimos el tamaño del lote en 64 inicialmente, pero podemos ajustarlo más tarde si es necesario. Finalmente, definimos un nombre para el modelo usando una cadena F. Es importante tener un nombre único para el modelo y los registros de TensorBoard para facilitar la comparación y la identificación.
Ahora, importamos los módulos necesarios de TensorFlow. Importamos TensorFlow como tf y los submódulos necesarios: tf.keras.models, tf.keras.layers, tf.keras.optimizers, tf.keras.callbacks y tf.keras.backend. También importamos numpy y matplotlib para procesamiento y visualización de datos.
A continuación, comenzamos a construir nuestro modelo. Creamos un modelo secuencial usando model = tf.keras.models.Sequential(). Dentro del modelo, agregamos capas usando la función model.add(). Nuestra primera capa es una capa LSTM con 128 nodos. Establecemos return_sequences=True ya que queremos pasar la salida a la siguiente capa. Especificamos la forma de entrada como train_X.shape[1:], donde train_X son los datos de entrada. También agregamos una capa de exclusión con una tasa de 0.2 y una capa de normalización por lotes.
Repetimos este proceso dos veces más, agregando dos capas LSTM más con 128 nodos cada una. Eliminamos return_sequences=True para la última capa LSTM ya que será seguida por una capa densa. También agregamos capas de abandono y normalización por lotes a cada capa LSTM.
Después de las capas LSTM, agregamos una capa densa con 32 nodos y una función de activación lineal rectificada. Agregamos una capa de abandono con una tasa de 0.2 y finalmente, la capa de salida con dos nodos y una función de activación de softmax.
Ahora, especificamos el optimizador para nuestro modelo. Usamos el optimizador Adam con una tasa de aprendizaje de 0.001 y una tasa de caída de 1e-6. Compilamos el modelo usando model.compile() y especificamos la función de pérdida como entropía cruzada categórica escasa y las métricas como precisión.
A continuación, definimos las devoluciones de llamada para nuestro modelo. Creamos una devolución de llamada de TensorBoard con el directorio de registro establecido en 'registros'. También creamos una devolución de llamada de ModelCheckpoint para guardar el mejor modelo durante el entrenamiento. Especificamos la ruta del archivo para guardar los puntos de control utilizando el formato de cadena.
Finalmente, entrenamos el modelo usando model.fit(). Pasamos los datos de entrenamiento (tren_X y tren_Y), el tamaño del lote, el número de épocas y los datos de validación (validación_X y validación_Y). También pasamos las devoluciones de llamada que definimos anteriormente.
Después del entrenamiento, podemos guardar el modelo usando model.save() para uso futuro.
¡Eso es todo! Hemos construido y entrenado con éxito un modelo de red neuronal recurrente para predecir los futuros movimientos de precios de una criptomoneda. También hemos visualizado el progreso del entrenamiento usando TensorBoard.
Estrategia comercial algorítmica en Python
Estrategia comercial algorítmica en Python
En el tutorial de hoy, implementaremos una estrategia algorítmica de negociación de acciones utilizando Python. Vamos a sumergirnos en eso.
Antes de comenzar, quiero enfatizar que este video no pretende ser un consejo financiero o de inversión. No soy un profesional de acciones, un experto en inversiones o un profesional financiero. El propósito de este video es demostrar cómo implementar una estrategia comercial algorítmica usando Python. Ya sea que elija usarlo para sus inversiones es enteramente su decisión y responsabilidad. Sólo me centraré en el aspecto de la programación.
Para comenzar, necesitamos instalar dos bibliotecas: "pandas-datareader" para obtener datos de stock y "matplotlib" para la visualización de datos. Abra el símbolo del sistema (CMD) e instale estas bibliotecas. Una vez instalado, podemos proceder con la codificación.
Primero, importamos los módulos necesarios: "datetime" para manejar la fecha y la hora, "matplotlib.pyplot" para trazar gráficos y "pandas_datareader" como "web" para recuperar datos de stock.
A continuación, definimos los promedios móviles (MA) que usaremos. Los promedios móviles representan el precio promedio de las acciones durante un período de tiempo específico, como 30 días o 100 días. Creamos dos variables, "ma1" y "ma2", que se establecerán en 30 y 100, respectivamente. Estos valores determinan la longitud de los promedios móviles que analizaremos.
Ahora, establezcamos el marco de tiempo para nuestro análisis. Definimos las fechas de inicio y finalización utilizando la fecha actual y un delta de tiempo de 3 años. Este período de tiempo se utilizará para obtener datos de stock.
Con la biblioteca "datareader", recuperamos los datos bursátiles de una empresa específica (en este caso, Facebook) de la API de Yahoo Finance. Pasamos las fechas de inicio y finalización para obtener los datos relevantes.
Para calcular los promedios móviles, agregamos dos nuevas columnas al DataFrame de datos. Usamos la función "móvil" para calcular el promedio móvil para los períodos "ma1" y "ma2". La columna de "cierre ajustado" representa el precio de cierre ajustado por división de acciones. Almacenamos las medias móviles en las respectivas columnas.
Antes de continuar, visualicemos los datos y los promedios móviles. Trazamos los valores de cierre ajustados como el precio de las acciones, y los promedios móviles se trazan en el mismo gráfico. Configuramos el estilo del gráfico para usar un fondo oscuro y le damos etiquetas y colores apropiados para diferenciar las líneas. Finalmente, agregamos una leyenda para identificar las líneas trazadas y mostrar el gráfico.
Ahora, pasemos a implementar la estrategia comercial algorítmica. Creamos dos listas vacías, "buy_signals" y "sell_signals", que almacenarán las señales de compra y venta, respectivamente. Además, introducimos una variable "desencadenante" que nos ayudará a realizar un seguimiento de los cambios en la estrategia.
Usando un bucle for, iteramos sobre el DataFrame de datos. Dentro del bucle, comprobamos dos condiciones: si la primera media móvil ("ma1") es mayor que la segunda media móvil ("ma2") y si el disparador no es igual a 1. Si se cumplen ambas condiciones, sumamos una señal de compra a la lista "buy_signals" y agregue "NaN" (no un número) a la lista "sell_signals". También actualizamos el activador a 1.
En el caso contrario, donde "ma1" es menor que "ma2" y el activador no es igual a -1, agregamos una señal de venta a la lista "sell_signals" y agregamos el precio real de las acciones a la lista "buy_signals". Actualizamos el disparador a -1.
Si no se cumple ninguna de las condiciones, agregamos valores "NaN" a ambas listas para mantener longitudes consistentes.
Finalmente, agregamos dos columnas más al DataFrame de datos para almacenar las señales de compra y venta.
También vamos a dispersar las señales de venta, así que agregaremos otro diagrama de dispersión usando plt.scatter. Esta vez, dispersaremos las señales de venta en data.index como los valores x y los precios de las señales de venta correspondientes como los valores y. Etiquetaremos este diagrama de dispersión como "señal de venta" para diferenciarlo de las señales de compra.
Finalmente, agregaremos una leyenda a la gráfica usando plt.legend para mostrar las etiquetas de los diferentes elementos. Luego, llamaremos a plt.show() para mostrar el gráfico.
El código:
Recuerde, esta es solo una estrategia comercial algorítmica simple implementada en Python, y no debe tomarse como un consejo financiero o de inversión. Es importante realizar una investigación exhaustiva y consultar con profesionales antes de tomar cualquier decisión de inversión.
Introducción al comercio algorítmico con Python: cómo crear y probar un algoritmo de comercio
Introducción al comercio algorítmico con Python: cómo crear y probar un algoritmo de comercio
En este video, exploraremos el desarrollo de una estrategia comercial algorítmica. Es importante tener en cuenta que el contenido de este video tiene fines puramente educativos y no debe considerarse un consejo de inversión. La estrategia en la que nos centraremos se conoce comúnmente como estrategia de impulso, aunque puede tener varias interpretaciones. En general, esta estrategia implica identificar valores que se mueven en una dirección específica. Por ejemplo, podemos comenzar seleccionando valores que están por encima de su promedio móvil de 50 días o cualquier otra métrica que hayamos investigado.
Este enfoque a menudo se denomina estrategia de seguimiento de tendencias, ya que podemos beneficiarnos de los movimientos alcistas y bajistas de un valor. Sin embargo, es crucial realizar una investigación exhaustiva para identificar posibles señales comerciales que puedan ser rentables. Idealmente, estas señales deberían ser aplicables a múltiples valores, haciéndolas más generalizables.
Para comenzar, importaremos las bibliotecas necesarias y descargaremos los datos relevantes. En este caso, utilizaremos la API de Finanzas de Yahoo para recuperar datos del ETF de oro (GLD). Después de descargar los datos, examinaremos las primeras filas para garantizar su precisión.
A continuación, agregaremos columnas al marco de datos. La primera columna que agregaremos es un contador de días, que nos ayudará a realizar un seguimiento de la posición en la serie temporal. También reorganizaremos las columnas para asegurarnos de que el día llegue inmediatamente después de la fecha. Podemos eliminar columnas innecesarias como "Cierre ajustado" y "Volumen", aunque pueden ser útiles para otros valores o análisis específicos.
Continuando, calcularemos dos promedios móviles: un promedio móvil rápido (9 días) y un promedio móvil lento (21 días). Estos promedios móviles servirán como nuestras señales para entrar y salir de operaciones. Cuando la media móvil rápida cruza por encima de la media móvil lenta, entraremos en una operación larga, y cuando cruce por debajo, saldremos de la operación o incluso iremos en corto. Sin embargo, tenga en cuenta que esta estrategia supone que tenemos acceso a los datos del precio de cierre del día actual, lo cual no es realista en el comercio en tiempo real. Para solucionar este problema, adelantaremos los promedios móviles un día usando el método de cambio en Pandas.
A continuación, agregaremos una columna de "señal" que indicará si debemos estar en una operación larga o corta en función de las señales de la media móvil. Un valor de 1 representará una operación larga, mientras que -1 indicará una operación corta. Para calcular esta columna, usaremos la función np.where para comparar los promedios móviles rápidos y lentos.
Dado que los promedios móviles requieren un cierto número de observaciones para calcularse, descartaremos las filas que no tengan suficientes datos. Este paso eliminará las filas iniciales donde los promedios móviles no están disponibles.
Luego, agregaremos una columna de "rendimiento" para calcular la tasa de rendimiento instantánea en función de los precios de cierre. Además, calcularemos una columna de "retorno del sistema" que depende de la señal y el retorno. Esta columna nos proporcionará el rendimiento específico de nuestro sistema de negociación.
Para visualizar los datos y comprender las señales comerciales, trazaremos un gráfico de líneas del precio de cierre, el promedio móvil rápido y el promedio móvil lento. También marcaremos los puntos de entrada con puntas de flecha verdes hacia arriba para indicar cuándo cambia la dirección de la operación.
Además, compararemos el rendimiento de nuestro sistema comercial con una estrategia de compra y retención. Graficaremos los rendimientos acumulados de ambos enfoques durante el período de cinco años. La línea azul representa la estrategia de comprar y mantener, mientras que la línea naranja representa nuestro sistema. En el gráfico, podemos observar que el rendimiento del sistema se mantiene relativamente plano, lo que indica que no supera la estrategia de comprar y mantener.
En conclusión, este video proporciona un recorrido educativo sobre el desarrollo de una estrategia comercial algorítmica utilizando un enfoque basado en el impulso.
Cómo usar Python y API de stock en tiempo real gratuitos de Alpha Vantage para extraer la hora de los máximos y mínimos diarios
Cómo usar Python y API de stock en tiempo real gratuitos de Alpha Vantage para extraer la hora de los máximos y mínimos diarios
En este video, vamos a usar un Jupyter Notebook para explorar la API de Alpha Vantage y extraer los precios de negociación máximos y mínimos de una acción utilizando datos de negociación de un minuto. Alpha Vantage es una de varias API disponibles para obtener datos comerciales en tiempo real y opera en un modelo freemium. Para comenzar, debemos registrarnos para obtener una cuenta gratuita y obtener una clave API del sitio web de Alpha Vantage.
Usaremos la biblioteca de ayuda de Alpha Vantage llamada "alpha_vantage", que simplifica el proceso de hacer llamadas a la API. Si no tiene la biblioteca instalada, puede hacerlo ejecutando el comando "pip install alpha_vantage" en su línea de comandos.
Para comenzar, configuramos nuestro entorno importando las bibliotecas de terceros necesarias. Una vez hecho esto, almacenamos nuestra clave API en una variable. Si prefiere mantener privada su clave API, puede almacenarla en un archivo de texto separado y leerla en su computadora portátil. A continuación, creamos un objeto de serie temporal especificando la clave API y el formato de salida deseado. En este caso, elegimos usar la biblioteca pandas, ya que proporciona una forma más fácil de trabajar con los datos de salida, que están en formato JSON de manera predeterminada.
Para recuperar los datos comerciales, hacemos una llamada a la API de Alpha Vantage usando la función "get_intraday". Esta función nos permite especificar el símbolo de la acción y el intervalo deseado, como un minuto, cinco minutos o una hora. También podemos establecer el tamaño de salida, que determina la cantidad de datos históricos que queremos recuperar. Para este video, lo configuramos como "completo", lo que nos brinda aproximadamente diez días de datos.
Una vez que hemos obtenido los datos, podemos examinar los metadatos asociados a ellos accediendo al atributo "meta". El metaobjeto proporciona información sobre los datos descargados, como el intervalo, la fecha de los datos y las columnas que contiene. Luego podemos inspeccionar los datos llamando al método "info", que muestra los nombres de las columnas y el índice de fecha y hora.
Para obtener una representación visual de los datos, podemos trazar una de las columnas, como los precios de cierre. Sin embargo, los nombres de columna devueltos por Alpha Vantage pueden no ser convenientes para trabajar, por lo que podemos cambiarles el nombre a nombres más significativos.
A continuación, extraemos los datos correspondientes al horario habitual de negociación, excluyendo la negociación fuera de horario, que puede introducir distorsiones. Creamos una nueva variable llamada "mercado" aplicando un filtro basado en el tiempo a los datos. Pandas proporciona una función conveniente, " between_time ", que nos permite especificar las horas de inicio y finalización del mercado.
En este punto, estamos listos para extraer las fechas y horas de los máximos y mínimos. Hacemos esto de dos maneras. Primero, agrupamos los datos por fecha de negociación y usamos el método "ag" para calcular los valores mínimo y máximo para las columnas alta y baja, respectivamente. Este enfoque nos da los valores mínimos y máximos reales para cada día de negociación.
En segundo lugar, tomamos un enfoque diferente y nos enfocamos en el minuto en que ocurrieron el mínimo y el máximo. Usamos la función "loc" para ubicar las filas específicas donde ocurren los mínimos y máximos dentro de cada día de negociación. Luego, extraemos el índice (fecha y hora) para los valores mínimo y máximo, respectivamente. Esto nos permite identificar el minuto exacto en que se alcanzaron los precios mínimos y máximos.
Al examinar los resultados, podemos observar patrones interesantes, como el momento de los mínimos y máximos a lo largo de los días de negociación.
Este video proporciona una descripción general básica del uso de la API Alpha Vantage para recuperar datos comerciales minuto a minuto y extraer los máximos y mínimos para su análisis. Sirve como punto de partida para explorar y utilizar la API de Alpha Vantage en sus propios proyectos.
En conclusión, este tutorial en video muestra cómo usar la API de Alpha Vantage y la biblioteca auxiliar de Alpha Vantage en un Jupyter Notebook para extraer los precios de negociación altos y bajos de una acción utilizando datos de negociación de un minuto. Siguiendo los pasos descritos en el video, puede recuperar datos comerciales en tiempo real, analizarlos con pandas y obtener información sobre el momento de los máximos y mínimos dentro de un día comercial determinado.
Es importante tener en cuenta que la API Alpha Vantage ofrece varias funcionalidades y opciones de datos más allá de lo que se trata en este video. Puede explorar diferentes intervalos, como datos de cinco minutos o de una hora, así como diferentes tipos de datos, incluidos datos diarios o históricos. La API también proporciona funciones adicionales, como indicadores técnicos y datos fundamentales.
Para mejorar aún más su análisis, puede incorporar técnicas adicionales de manipulación y visualización de datos. Por ejemplo, puede calcular métricas adicionales basadas en los precios altos y bajos extraídos, realizar análisis estadísticos o crear visualizaciones interactivas para presentar los datos de una manera más intuitiva.
Recuerde consultar la documentación de Alpha Vantage para obtener información detallada sobre las llamadas, parámetros y opciones de API disponibles. Además, asegúrese de cumplir con los términos y condiciones de la API Alpha Vantage, incluidas las limitaciones o restricciones de uso asociadas con su cuenta gratuita.
Al aprovechar la API Alpha Vantage y combinarla con las capacidades de Jupyter Notebook y la biblioteca pandas, puede desbloquear una gran cantidad de datos comerciales y explorar diversas estrategias y conocimientos para respaldar sus decisiones de inversión y análisis cuantitativos.
Introducción a los diagramas de dispersión con matplotlib Python para ciencia de datos
Introducción a los diagramas de dispersión con matplotlib Python para ciencia de datos
Este es el segundo video de mi serie de introducción a Matplotlib. En este video, nos enfocaremos en diagramas de dispersión. Los diagramas de dispersión son una ayuda visual que nos ayuda a determinar la fuerza y la naturaleza de una relación entre dos variables. Cubriremos los conceptos básicos de la creación de diagramas de dispersión, incluida la configuración de temas, la adición de un mapa de color, la creación de un gráfico de burbujas y la adición de dimensionalidad.
Para comenzar, configuremos nuestro entorno importando las bibliotecas necesarias. Importaremos NumPy, Matplotlib y el lector de datos Pandas. El lector de datos de Pandas nos permitirá descargar datos reales para trabajar. En este caso, descargaremos datos de Google, Amazon y el ETF de oro para tres o cuatro meses.
Una vez que tengamos los datos, podemos echar un vistazo a las primeras filas para familiarizarnos con el conjunto de datos. Podemos ver que los datos comienzan el 1 de agosto e incluyen los precios de cierre.
Ahora, creemos un diagrama de dispersión básico usando el método de dispersión de Matplotlib. Podemos elegir dos columnas del conjunto de datos y trazarlas. Sin embargo, este gráfico de dispersión básico no proporciona mucha información sobre la relación entre las variables.
Para investigar más a fondo, podemos calcular la tasa de rendimiento instantánea de cada valor. Esto nos dará una mejor comprensión de cómo los cambios en el precio se relacionan entre sí. Eliminamos el precio absoluto y lo reducimos a un cambio porcentual. Mirando las primeras observaciones, podemos ver que todos los valores bajaron, con Amazon y Google experimentando una disminución de más del 1%, mientras que el oro se mantuvo relativamente sin cambios.
Luego, eliminamos la primera observación, que no es un número, y trazamos un diagrama de dispersión para ver si el cambio en Google es relevante para el cambio en Amazon. Este diagrama de dispersión cuenta una historia diferente a la anterior. Podemos observar una tendencia general de que a medida que Google sube, Amazon también lo hace, lo que indica una fuerte relación positiva entre las dos variables.
Ahora que tenemos el diagrama de dispersión de línea de base, podemos agregar algunas funciones para mejorarlo. Primero, cambiemos el tamaño de la trama para que sea más visible. Podemos hacer esto importando el módulo de parámetros de Matplotlib.
También podemos agregar un atractivo visual al gráfico de dispersión agregando líneas de guía para mostrar el movimiento de los puntos en diferentes direcciones. Al trazar líneas a través del cero en los ejes X e Y, podemos identificar rápidamente cuándo los puntos se mueven juntos, separados o en direcciones opuestas.
Para mejorar la visibilidad de las líneas guía, podemos establecer su color en un tono gris usando la notación RGB. Además, podemos establecer el estilo de línea en discontinuo para un efecto visual diferente.
Para mejorar aún más el diagrama de dispersión, podemos agregar un esquema de color. Aunque no tenemos una tercera variable para representar, aún podemos agregar un mapa de colores al diagrama de dispersión. Modificamos el código del diagrama de dispersión para incluir el color de las devoluciones de Amazon y elegimos el mapa de color espectral. Este mapa de colores asigna diferentes colores a los puntos en función de los valores de los retornos, con el rojo representando los valores más negativos y el violeta representando los valores más positivos.
Sin embargo, algunos puntos en el rango medio pueden ser difíciles de ver debido al gradiente de color. Para solucionar esto, podemos cambiar el color del borde de los puntos a negro, haciéndolos más distintos.
Para proporcionar información adicional sobre las gradaciones de color, podemos agregar una barra de color. La barra de colores traza una leyenda que indica el mapeo de colores en función de las devoluciones.
Además, podemos mejorar el aspecto general de la trama aplicando un tema. Podemos usar Seaborn como tema, que es un envoltorio alrededor de Matplotlib que proporciona un estilo visualmente atractivo. Este tema cambia el fondo y agrega líneas de cuadrícula sin restar valor a los datos trazados.
Por último, podemos ajustar los límites de la trama para centrar las líneas guía.
Por último, podemos ajustar los límites del gráfico para centrar las líneas de guía y hacer que el gráfico de dispersión esté más equilibrado visualmente. Podemos establecer los límites del eje x y del eje y en los valores mínimo y máximo de los retornos para garantizar que las líneas de guía se crucen en el centro de la gráfica. Este ajuste nos ayuda a visualizar el movimiento de los puntos en relación con las líneas guía de manera más efectiva.
Ahora que hemos realizado estas mejoras, nuestro diagrama de dispersión es más informativo y visualmente atractivo. Podemos ver claramente la relación entre las devoluciones de Google y Amazon, así como la distribución de las devoluciones en base al mapa de colores. Las líneas de guía proporcionan una referencia visual para interpretar el movimiento de los puntos en diferentes direcciones.
Además de los diagramas de dispersión básicos, también podemos crear un gráfico de burbujas con Matplotlib. Un gráfico de burbujas agrega una tercera dimensión al gráfico al variar el tamaño de los marcadores en función de una tercera variable. En nuestro caso, podemos utilizar el volumen de cada valor como tercera variable.
Para crear un gráfico de burbujas, modificamos nuestro código de diagrama de dispersión especificando el parámetro de tamaño y pasando el volumen de cada valor como el tamaño del marcador. Esto crea círculos con tamaños proporcionales al volumen de cada valor, permitiéndonos visualizar la relación entre retornos, volumen y movimiento de puntos.
Al agregar esta tercera dimensión al diagrama de dispersión, obtenemos una comprensión más profunda de la relación entre las variables. Podemos ver que los círculos más grandes representan mayores volúmenes de operaciones, y el movimiento de los puntos se puede correlacionar tanto con los rendimientos como con el volumen.
En conclusión, los diagramas de dispersión y los gráficos de burbujas son poderosas herramientas de visualización que nos ayudan a comprender la relación entre las variables. Podemos usarlos para analizar e interpretar datos, identificar patrones y tendencias y tomar decisiones informadas. Con Matplotlib, podemos crear diagramas de dispersión personalizados y visualmente atractivos y mejorarlos con varias funciones, como mapas de colores, líneas de guía y temas.
Introducción al comercio algorítmico con Python: cree un algoritmo de comercio de reversión a la media
Introducción al comercio algorítmico con Python: cree un algoritmo de comercio de reversión a la media
En este video, exploraremos un algoritmo comercial de reversión a la media solo con fines educativos. Es importante tener en cuenta que este video no proporciona consejos de inversión. El algoritmo se implementará utilizando un Jupyter Notebook y se proporcionará un enlace para descargar el cuaderno en la descripción del video. Este video sirve como complemento de la estrategia comercial de impulso discutida anteriormente, y también se proporcionará un enlace a ese video.
La estrategia comercial de reversión a la media asume que un valor retrocederá hacia un valor promedio cada vez que se desvíe demasiado de él. Hay varias formas de abordar esta estrategia, como usar una regresión lineal o un promedio móvil. La determinación de "demasiado lejos" y la medida utilizada pueden variar. Algunas personas usan un valor absoluto en dólares, mientras que en este video usaremos percentiles. Además, se utilizará un promedio móvil para determinar el valor medio.
Para comenzar, importamos las bibliotecas necesarias, incluidos Pandas para la manipulación de datos, Pandas DataReader para descargar datos en vivo (también se pueden usar otros servicios), NumPy para operaciones numéricas, Matplotlib para gráficos y Seaborn para diseñar los gráficos. Las bibliotecas requeridas se importan ejecutando la celda de código correspondiente.
A continuación, obtenemos los datos para el análisis. Si bien un buen algoritmo comercial debe ser generalizable a múltiples valores, este video se enfoca en un solo valor: el ETF de oro. Pandas DataReader se utiliza para descargar aproximadamente cinco años de datos para el ETF de oro. Dado que solo interesa el precio de cierre, limitamos la descarga a esa columna. Una vez obtenidos los datos, examinamos las primeras filas para asegurar su correcta recuperación.
Después de obtener los datos, agregamos algunas columnas al marco de datos. La primera columna agregada es para el promedio móvil. Establecemos una variable para definir el período promedio móvil, que se puede manipular fácilmente. La tasa de rendimiento instantánea del cierre del día anterior se calcula y almacena en una nueva columna. Se crea otra columna, denominada "promedio móvil", para rastrear el valor medio en función del precio de cierre utilizando un promedio de 21 días (o un mes de negociación). Además, se agrega una columna de "proporción", que representa la división del precio de cierre por el promedio móvil. Esta columna ayuda a determinar cuándo el precio está demasiado lejos de la media.
Las estadísticas descriptivas se calculan para la columna "proporción" para obtener información sobre la distribución de datos. Como era de esperar, los precios generalmente se mantienen cerca del valor medio. Los percentiles 25 y 75 definen los límites inferior y superior de los datos, mientras que los valores mínimo y máximo indican desviaciones extremas de la media. Se seleccionan puntos de precio adicionales para el análisis, como los percentiles 5, 10, 90 y 95, para determinar desviaciones significativas de la media. La función de percentil numpy se utiliza para calcular los valores respectivos en función de la columna "proporción de oro". Antes de realizar el cálculo, se descartan los valores faltantes.
Para visualizar el movimiento de la columna de razón alrededor de la media, se genera una gráfica. Los valores irrelevantes se eliminan y la columna de relación se traza con una leyenda. Se agregan líneas horizontales para representar las rupturas de precios en los percentiles seleccionados (5, 50 y 95). Esta representación visual ayuda a observar el movimiento cíclico de la columna de razón alrededor de la media, lo que indica una tendencia a corregir las desviaciones.
A continuación, se definen umbrales específicos para determinar cuándo ir corto o largo. La posición corta se define como el percentil 95, mientras que la posición larga se define como el percentil 5. Se agrega una nueva columna al marco de datos, que indica si la posición es larga o corta. La función "dónde" de Numpy se utiliza para asignar valores en función de la columna de proporción de oro. Se asigna un valor de -1 cuando la relación es menor que el umbral corto, lo que indica una posición corta, y se asigna un valor de 1 cuando la relación es mayor que el umbral largo, lo que indica una posición larga. Finalmente, se genera un gráfico para visualizar las posiciones. El gráfico muestra la columna de relación y resalta las posiciones largas y cortas con diferentes colores.Después de identificar las posiciones, el siguiente paso es calcular los rendimientos diarios. Esto se hace multiplicando la columna de la posición con la columna de la tasa de rendimiento diaria, lo que da el rendimiento de cada día en función de la posición ocupada. Se agrega una nueva columna llamada "estrategia" al marco de datos para almacenar los rendimientos diarios.
Para evaluar el rendimiento de la estrategia, se calculan los rendimientos acumulados. Los rendimientos acumulativos se obtienen tomando el producto acumulativo de los rendimientos de la estrategia, sumando 1 al resultado y multiplicando por 100 para la representación porcentual. Se genera un gráfico para visualizar los rendimientos acumulados a lo largo del tiempo.
A continuación, se calculan métricas de rendimiento adicionales para evaluar el rendimiento de la estrategia. Se calculan el rendimiento total, el rendimiento diario promedio, la desviación estándar de los rendimientos diarios, la relación de Sharpe y la reducción máxima. Estas métricas brindan información sobre la rentabilidad, el riesgo y el rendimiento ajustado al riesgo de la estrategia. Los valores están impresos para una fácil referencia.
Finalmente, se genera un gráfico para comparar los rendimientos acumulados de la estrategia de reversión a la media con la estrategia de comprar y mantener. La estrategia de comprar y mantener supone mantener el activo durante todo el período sin ninguna decisión comercial. Esta gráfica permite una comparación visual de las dos estrategias.
En resumen, este video demuestra la implementación de una estrategia comercial de reversión a la media utilizando Python y Jupyter Notebook. Abarca la recuperación de datos, el cálculo de medias móviles, la determinación de umbrales, la visualización de posiciones, el cálculo de rendimientos diarios, la evaluación de métricas de rendimiento y la comparación con una estrategia de compra y retención. El Jupyter Notebook adjunto proporciona una guía paso a paso para recrear la estrategia y explorar más a fondo su implementación. Recuerde que este video es solo para fines educativos y no brinda asesoramiento de inversión.
Pandas pitón || Promedios móviles y estadísticas de ventana móvil para precios de acciones
Pandas pitón || Promedios móviles y estadísticas de ventana móvil para precios de acciones
En este tutorial en video, demostraré cómo usar el método de balanceo de pandas, que automatiza los cálculos de promedios móviles y desviaciones estándar de balanceo. El método rodante es una herramienta poderosa para realizar agregaciones de ventanas rodantes, y se puede implementar fácilmente usando la versión 0.21 de pandas. Proporcionaré un enlace al Jupyter Notebook utilizado en este tutorial como referencia.
Para comenzar, necesitamos configurar el entorno. Importamos la biblioteca numpy ya que pandas se basa en ella. Aunque no usaremos directamente numpy de forma extensiva, es necesario que los pandas funcionen correctamente. Además, importamos el lector de datos pandas para obtener datos y matplotlib para fines de trazado. Al utilizar la función mágica, nos aseguramos de que los gráficos se muestren en Jupyter Notebook.
A continuación, adquirimos los datos para el análisis. Descargaré los datos del ETF (Fondo cotizado en bolsa) de oro de Yahoo Finance. Para especificar el marco de tiempo deseado, fijé la fecha de inicio en el día de la elección presidencial, hace aproximadamente un año. Para confirmar que los datos se han obtenido correctamente, muestro las primeras líneas del conjunto de datos. Dado que estamos interesados principalmente en los precios de cierre de esta demostración, elimino las otras columnas. Además, como el marco de datos que se descarga es una serie de series y carece de ciertas propiedades que necesito, lo transformo como un marco de datos.
Ahora estamos listos para demostrar el método de rodadura. Agregaré una nueva columna al marco de datos llamado "MA9" para representar el promedio móvil de nueve días. Usando el método de balanceo, calculo el promedio para el número especificado de períodos o filas. Repito este proceso para una ventana más larga de 21 días. Estas dos nuevas columnas representan los promedios móviles que calculamos. Para visualizar los datos, tracé los precios de cierre, el promedio móvil de nueve días y el promedio móvil de 21 días.
A veces es útil retrasar los promedios móviles. Al agregar el parámetro "center=True" cuando usamos el método móvil, podemos desplazar la línea del promedio móvil hacia atrás diez días para la ventana de 21 días. Esto crea una línea retrasada que se alinea con los datos correspondientes. Podemos observar este cambio en el gráfico trazado.
Debo señalar que al calcular los promedios móviles, la observación actual se incluye en el promedio. Si desea utilizarlo como una herramienta de pronóstico tradicional, es posible que desee desplazar el promedio móvil hacia adelante. Al usar el método de desplazamiento y especificar un número entero positivo, podemos desplazar el promedio móvil hacia adelante el número deseado de períodos. Esto asegura que la observación actual no se incluya en el promedio.
Además, el método móvil ofrece otros parámetros, como la capacidad de establecer cualquier valor de retraso o incluso cambiar el promedio móvil al primer día usando un número entero negativo.
Además, demuestro cómo calcular la volatilidad histórica, a menudo utilizada en la valoración de opciones. Para hacer esto, necesitamos agregar otra columna al marco de datos. Usando numpy, calculo los rendimientos logarítmicos dividiendo los precios de cierre por el cierre del día anterior. Trazar estos retornos muestra un gráfico ruidoso centrado alrededor de cero.
Para obtener la volatilidad histórica, empleamos una desviación estándar móvil con una ventana de 21 días, ya que normalmente hay 21 días de negociación en un mes. Este cálculo incluye la vigésima primera observación, por lo que para reflejar con precisión la volatilidad, adelantamos el resultado un día. Esto evita implicar que tenemos conocimiento futuro. Graficar la volatilidad brinda una representación más clara de los datos y revela períodos de alta y baja volatilidad en los precios del oro.
En un video futuro, cubriré técnicas adicionales de análisis de precios usando pandas. Espero que este tutorial haya proporcionado una introducción útil al uso del método móvil en pandas para promedios móviles y desviaciones estándar móviles.
Análisis cuantitativo del precio de las acciones con Python, pandas, NumPy, matplotlib y SciPy
Análisis cuantitativo del precio de las acciones con Python, pandas, NumPy, matplotlib y SciPy
En este video, el orador presenta métodos analíticos cuantitativos para analizar los cambios en el precio de las acciones. El objetivo principal es determinar si el cambio del precio de las acciones sigue una distribución normal, identificar cualquier sesgo direccional en el cambio diario y evaluar si el movimiento del precio puede describirse como un paseo aleatorio. El orador menciona el uso de un cuaderno Jupyter y proporciona un enlace para descargar el cuaderno.
El orador comienza configurando el entorno e importando bibliotecas de análisis de datos como NumPy, Pandas y Matplotlib. También mencionan el uso de la biblioteca Pandas Data Reader para descargar datos en vivo de la API de Yahoo. Luego, el orador recupera los datos de stock de Amazon, especificando las fechas de inicio y finalización, que por defecto son los últimos cinco años de datos de precios.
Después de obtener los datos, el hablante examina las primeras filas para verificar la información disponible. Señalan las columnas que representan precios máximos, mínimos, de apertura, de cierre, de volumen y de cierre ajustado. Dado que están interesados principalmente en el precio de cierre, analizan la opción de utilizar la columna "cierre" o "cierre ajustado", siendo esta última útil para las acciones que han sufrido divisiones. En este caso, dado que la última división de Amazon fue en 1999, la elección entre las dos columnas no importa mucho.
A continuación, el orador extrae la columna del precio de cierre en una variable separada y calcula la tasa de rendimiento instantánea utilizando el logaritmo de la diferencia entre los precios de cierre consecutivos. Muestran los valores resultantes y señalan que la primera fila contiene un valor NaN (no un número) porque no se puede calcular el retorno para el primer día.
Luego, el orador visualiza el cambio de precio diario trazando los datos como un gráfico de líneas usando Matplotlib. Observan que el cambio de precio fluctúa considerablemente y se agrupa alrededor de cero, con grandes eventos ocasionales que ocurren de manera impredecible a lo largo del período de cinco años. Para analizar un período de tiempo específico, trazan el valor de los datos del último año, que muestra menos densidad pero conserva el mismo patrón general.
Las estadísticas descriptivas del movimiento de precios se obtienen utilizando la función "describir" de Pandas. El ponente menciona la posibilidad de obtener las estadísticas de forma individual o utilizando otras herramientas, pero considera que el método Pandas es suficiente para sus propósitos. También presentan la biblioteca SciPy y demuestran otra forma de calcular estadísticas descriptivas mediante la función "describir" de SciPy stats. Mencionan que algunos valores aparecen como "NaN" debido al manejo de valores faltantes en NumPy y SciPy.
Para que los números sean más interpretables, el hablante multiplica los valores por 100 para convertirlos en porcentajes. Este cambio mejora la legibilidad de la salida sin alterar los datos.
Continuando, el orador compara la distribución del cambio de precio diario con una muestra extraída de una distribución normal. Trazan un histograma de los datos de retorno de Amazon y observan que muestra una actividad significativa alrededor del centro, con retornos que se extienden hacia la izquierda y hacia la derecha, lo que indica colas más gruesas en comparación con una distribución normal. Luego generan una muestra del mismo tamaño a partir de una distribución normal usando el módulo de estadísticas de SciPy y la trazan como un histograma junto con los datos de devolución de Amazon. La muestra de distribución normal parece más ocupada y distribuida de manera más uniforme que los datos de Amazon.
A continuación, el ponente realiza una prueba estadística, en concreto una prueba de curtosis, tanto sobre la variable normal como sobre los retornos de Amazon. La prueba de curtosis examina si la distribución puede considerarse normal, con la hipótesis nula asumiendo una distribución normal. Se obtienen la estadística de prueba y el valor p, y el orador explica la interpretación de los resultados. Para la variable normal, el estadístico de prueba es ligeramente negativo, lo que indica que no hay evidencia sólida en contra de la hipótesis nula. Por el contrario, para los rendimientos de Amazon, la estadística de prueba es mucho mayor, lo que sugiere un rechazo de la hipótesis nula y concluye que el cambio de precio de Amazon no puede describirse como una distribución normal.
Para visualizar aún más la diferencia, el orador modifica el histograma mostrando proporciones en lugar de frecuencias y qué tan bien se ajusta a la distribución. Para hacer esto, haré un par de cambios en el histograma inicial. En lugar de mostrar frecuencias, mostraré proporciones. De esta manera, puedo superponer una curva normal teórica sobre el histograma y ver qué tan bien encaja.
Avancemos y tracemos el histograma con la curva normal. Usaré el módulo de norma de scipy.stats para generar la curva normal y luego la trazaré en el mismo gráfico que el histograma.
Al observar el gráfico, podemos ver que el histograma de los retornos de Amazon se desvía significativamente de la forma de una distribución normal. La distribución tiene colas más anchas, lo que indica una mayor ocurrencia de movimientos de precios extremos en comparación con lo que esperaríamos de una distribución normal. Esto se alinea con nuestro análisis anterior de curtosis, que indicó un exceso de curtosis en los datos de retorno de Amazon.
En conclusión, con base en los métodos analíticos cuantitativos que hemos empleado, podemos determinar que el cambio en el precio de las acciones de Amazon no puede describirse como un fenómeno distribuido normalmente. Los datos exhiben características tales como asimetría y exceso de curtosis, lo que indica desviaciones de una distribución normal. Los cambios diarios de precios están más agrupados alrededor de cero, con frecuentes movimientos más grandes e impredecibles. Esta información es valiosa para comprender la naturaleza del comportamiento del precio de las acciones de Amazon y puede ser útil para desarrollar estrategias de inversión o enfoques de gestión de riesgos.
Técnicas de modelo de regresión lineal con Python, NumPy, pandas y Seaborn
Técnicas de modelo de regresión lineal con Python, NumPy, pandas y Seaborn
En este video, exploraremos algunas técnicas de regresión simples en Python. Hay varias herramientas disponibles para implementar la regresión en Python, pero nos centraremos en un par de ellas, específicamente en el uso de NumPy. Tenga en cuenta que este tutorial no pretende ser exhaustivo y no realizaremos ninguna prueba estadística. Simplemente ajustaremos una línea y visualizaremos la salida.
Puede descargar el cuaderno desde el enlace provisto en la descripción del video en GitHub para seguirlo. Comencemos configurando nuestro entorno e importando las bibliotecas necesarias. Usaremos NumPy, pandas, Yahoo Finance API para obtener datos en vivo, matplotlib para visualización y seaborn para aplicar un tema a nuestros gráficos.
A continuación, necesitamos recuperar los datos. Obtendremos datos de Google y el S&P 500 ETF, retrocediendo aproximadamente un año. Usaremos el lector de datos pandas y la API de Finanzas de Yahoo para este propósito. Una vez que tenemos los datos, podemos echar un vistazo rápido. Dado que solo estamos interesados en los precios de "cierre" para nuestro análisis, ajustaremos los datos en consecuencia.
Para realizar la regresión, calcularemos la tasa instantánea de rendimiento tanto para Google como para el S&P 500 ETF. Después de descartar cualquier valor no válido, estamos listos para calcular la correlación entre las dos variables. Encontramos que están fuertemente correlacionados, pero no intentaremos determinar la causalidad en este análisis. En cambio, consideraremos el S&P 500 como la variable independiente.
Para facilitar la visualización, muestrearemos un subconjunto más pequeño de puntos de datos. En este caso, tomamos una muestra aleatoria de 60 declaraciones y observamos la correlación, que sigue siendo similar al conjunto de datos general. Luego procedemos a visualizar los datos trazando un diagrama de dispersión con el S&P 500 en el eje x y Google en el eje y.
Pasando a la regresión, ajustaremos un modelo lineal usando la función polyfit de NumPy. Pasamos los datos de muestra, con el S&P 500 como variable independiente y Google como variable dependiente, junto con el grado de nuestro polinomio (1 para regresión lineal simple). Esto nos da la pendiente y la intersección con el eje y de la línea de mejor ajuste, que puede interpretarse como el valor beta.
Para trazar la línea de tendencia, usamos la función polivalente de NumPy, pasando la regresión y la variable independiente. Podemos superponer esta línea de tendencia en el diagrama de dispersión. Además, la regresión se puede utilizar como indicador técnico para predecir precios futuros. En este ejemplo, hacemos una regresión de los precios de cierre del S&P 500 contra el tiempo.
Después de obtener los coeficientes de regresión, podemos calcular los valores predichos para puntos de tiempo futuros. Trazamos los datos reales contra el tiempo, agregamos la línea de tendencia y creamos un canal sumando y restando una desviación estándar del modelo lineal. Este canal proporciona una representación visual del intervalo de confianza de la predicción.
Finalmente, demostramos cómo hacer predicciones para puntos de tiempo específicos utilizando el modelo de regresión. Al crear un objeto poly1d con los coeficientes de regresión, podemos ingresar un valor (que representa un punto de tiempo futuro) y obtener el valor predicho. También mencionamos brevemente el gráfico de registro de Seaborn, que proporciona una forma alternativa de visualizar el gráfico de dispersión con una línea de tendencia y un intervalo de confianza.
Al seguir este tutorial, puede comenzar con la regresión lineal en Python y explorar varias técnicas de análisis y predicción.
Ahora que hemos cubierto los conceptos básicos de la regresión lineal en Python, exploremos algunas técnicas y conceptos adicionales.
Un aspecto importante del análisis de regresión es evaluar la bondad de ajuste del modelo. En otras palabras, ¿qué tan bien representa la línea de regresión lineal la relación entre las variables? Hay varias medidas estadísticas que pueden usarse para evaluar el ajuste, como el valor R-cuadrado, que indica la proporción de la varianza en la variable dependiente que puede explicarse por la(s) variable(s) independiente(s).
Para calcular el valor de R-cuadrado, podemos usar la biblioteca statsmodels en Python. Importaremos el módulo necesario y ajustaremos el modelo de regresión lineal a nuestros datos. Luego, podemos extraer el valor R-squared usando el atributo rsquared del modelo.
Demostremos esto con un ejemplo. Supongamos que tenemos un conjunto de datos con dos variables, X e Y, y queremos ajustar un modelo de regresión lineal para predecir Y basado en X. Usaremos la función sm.OLS (Mínimos cuadrados ordinarios) de la biblioteca statsmodels para realizar la regresión análisis.
Primero, importamos los módulos requeridos:
print( "R-squared:" , r_squared)
El valor de R-cuadrado varía de 0 a 1, donde 1 indica un ajuste perfecto. En general, un valor de R cuadrado más alto sugiere un mejor ajuste del modelo a los datos.Además del valor R-cuadrado, también es importante examinar las gráficas residuales para comprobar si hay patrones o tendencias que puedan indicar violaciones de los supuestos de la regresión lineal. Los residuos son las diferencias entre los valores observados y predichos de la variable dependiente. Un buen modelo de regresión lineal debe tener residuos aleatorios y uniformemente distribuidos alrededor de cero.
Para visualizar los residuos, podemos trazar un gráfico de dispersión de los valores pronosticados contra los residuos. Si la gráfica muestra un patrón o cualquier desviación sistemática de la aleatoriedad, sugiere que el modelo de regresión lineal puede no ser apropiado para los datos.
Para crear el gráfico residual, podemos usar la biblioteca matplotlib en Python:
En conclusión, la regresión lineal es una técnica poderosa y ampliamente utilizada para modelar la relación entre variables. Al ajustar una línea de regresión a los datos, podemos hacer predicciones y obtener información sobre la variable dependiente en función de las variables independientes. Es importante evaluar la bondad del ajuste utilizando medidas como el valor R-cuadrado y verificar las gráficas residuales para evaluar la validez del modelo de regresión.