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.
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