Comercio automatizado usando Python

El uso de Python acelera el proceso de negociación y, por lo tanto, también se denomina negociación automatizada / negociación cuantitativa. El uso de Python se atribuye a sus bibliotecas altamente funcionales como TA-Lib, Zipline, Scipy, Pyplot, Matplotlib, NumPy, Pandas, etc. La exploración de los datos disponibles se denomina análisis de datos. Comenzando con Python. Primero aprenderemos a extraer datos utilizando la API de Quandl.  

Why-Python-Is-Used-For-Developing-Automated-Trading-Strategy1

El uso de datos anteriores será nuestra clave para la estrategia de backtesting. El funcionamiento de una estrategia en una circunstancia dada solo puede entenderse utilizando datos históricos. Usamos datos históricos porque las tendencias en el mercado de valores tienden a repetirse en el tiempo.

Configuración del entorno de trabajo

La forma más fácil de comenzar es instalando Anaconda. Anaconda es una distribución de Python y ofrece diferentes IDE como Spyder, Jupyter, __, ___, etc.

Instalación de Quandl

Quandl nos ayudará a recuperar los datos históricos de la acción. Para instalar quandl, escriba el siguiente comando en la terminal: 

pip install quandl

Nota: El módulo Python de Quandl es gratuito, pero debe tener una clave API de Quandl para poder descargar datos. Para obtener su propia clave API, deberá crear una cuenta Quandl gratuita y configurar su clave API.

Importación de paquetes

Una vez que se instala Quandl, el siguiente paso es importar paquetes. Usaremos Pandas rigurosamente en este tutorial ya que el backtesting requiere mucha manipulación de datos.

import pandas as pd
import quandl as qd

Una vez que se hayan importado los paquetes, extraeremos los datos de Quandl, utilizando la clave API.

qd.ApiConfig.api_key = "<API key>”

Extraer datos usando Quandl

Python3

import pandas as pd
import quandl as qd
  
qd.ApiConfig.api_key = "API KEY"
  
msft_data = qd.get("EOD/MSFT",
                   start_date="2010-01-01",
                   end_date="2020-01-01")
msft_data.head()

Producción:

El código anterior extraerá los datos de las acciones de MSFT desde el 1 de enero de 2010 hasta el 1 de enero de 2020. data.head() mostrará las primeras 5 filas de los datos.

Terminología importante: uno debe comprender qué representan y describen los datos.

  • Apertura/Cierre: el precio de apertura y cierre de la acción.
  • Alto/Bajo: el precio más alto y más bajo que ha alcanzado la acción durante el día en particular.
  • Adj_High/ Adj_Close: el impacto de la distribución de dividendos actual, división de acciones u otra acción corporativa en los datos históricos.

Cálculo de devoluciones

Los rendimientos son simplemente las ganancias obtenidas o las pérdidas sufridas por las acciones después de que el comerciante/inversor haya utilizado posiciones largas o cortas. Simplemente usamos la función pct_change()

Python3

# Import numpy package
import numpy as np
  
  
# assign `Adj Close` to `close_price`
close_price = msft_data[['Adj_Close']]
  
# returns as fractional change
daily_return = close_price.pct_change()
  
# replacing NA values with 0
daily_return.fillna(0, inplace=True)
  
print(daily_return)

Producción:

            Adj_Close
Date                 
2013-09-03   0.000000
2013-09-04  -0.021487
2013-09-05   0.001282
2013-09-06  -0.002657
2013-09-09   0.016147
...               ...
2017-12-21  -0.000234
2017-12-22   0.000117
2017-12-26  -0.001286
2017-12-27   0.003630
2017-12-28   0.000117

[1090 rows x 1 columns]

Fórmula utilizada en la rentabilidad diaria = (Precio en ‘t’ – Precio en 1)/Precio en 1 (Precio en cualquier momento dado ‘t’ – precio de apertura)/precio de apertura

Promedios móviles

El concepto de medias móviles sentará las bases de nuestra estrategia comercial basada en el impulso. Para las finanzas, los analistas también necesitan probar constantemente las medidas estadísticas durante un período de tiempo móvil que se denomina cálculos de período móvil. Veamos cómo se puede calcular la media móvil en una ventana de 50 días y deslizar la ventana 1 día.

Python3

# assigning adjusted closing prices 
# to adj_prices
adj_price = msft_data['Adj_Close']
  
# calculate the moving average
mav = adj_price.rolling(window=50).mean()
  
# print the result
print(mav[-10:])
Date
2017-12-14    78.769754
2017-12-15    78.987478
2017-12-18    79.195540
2017-12-19    79.387391
2017-12-20    79.573250
2017-12-21    79.756221
2017-12-22    79.925922
2017-12-26    80.086379
2017-12-27    80.249752
2017-12-28    80.414472
Name: Adj_Close, dtype: float64

Los promedios móviles ayudan a suavizar cualquier anomalía o pico en los datos y le brindan una curva más suave para los resultados de la empresa.

Grafique y vea la diferencia:

Python3

# import the matplotlib package 
# to see the plot
import matplotlib.pyplot as plt
  
adj_price.plot()

Producción:

Observa la diferencia:

Python3

mav.plot()

Producción:

Trazándolos juntos:

Python3

# import the matplotlib package 
# to see the plot
import matplotlib.pyplot as plt
  
adj_price.plot()
mav.plot()

Producción:

Publicación traducida automáticamente

Artículo escrito por aditi_versha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *