Está en la página 1de 22

13/9/21 15:21 Bot de comercio algorítmico: Python.

tmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Empezar Abrir en la aplicación

Seguir 578K Seguidores

Tiene 2 historias sólo para miembros libres dejaron este mes.


Regístrese en Medium y obtenga uno extra

Bot de comercio algorítmico: Python


Rob Salgado 24 de noviembre de 2019 · 8 min de lectura

El aumento de las API de negociación sin comisiones junto con la computación en la


nube ha hecho posible que la persona promedio ejecute sus propias estrategias de
negociación algorítmica. Todo lo que necesitas es un poco de pitón y más que un poco de
suerte. Le mostraré cómo ejecutar uno en Google Cloud Platform (GCP) usando Alpaca .
Como siempre, todo el código se puede encontrar en mi página de GitHub .

Lo primero que se necesita es un poco de da t a. Existen algunas fuentes de datos


gratuitas y, por supuesto, fuentes que cuestan dinero. Voy a estar utilizando la API de TD
Ameritrade que es gratuito. Lo siguiente que necesita es una plataforma de negociación
donde pueda enviar operaciones sin comisiones a través de una API.

Para eso usaré Alpaca. Alpaca también permite el comercio de papel (dinero falso) para
que podamos probar nuestra estrategia en la naturaleza sin llevar a nuestra familia a la
bancarrota 💸. Entonces solo necesita una forma de ejecutar su bot automáticamente y
almacenar / recuperar datos. Para eso usaremos GCP porque eso es con lo que estoy
familiarizado, pero cualquier plataforma en la nube (AWS, Azure, etc.) funcionará igual
de bien.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 1/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Foto de MBM en Unsplash

Ah, y por supuesto necesitas una estrategia comercial. Esta publicación trata sobre la
configuración del marco para ejecutar una estrategia comercial, por lo que la estrategia
en sí misma aquí no es importante ni un enfoque. Para fines de demostración, utilizaré
una estrategia de impulso que busca las acciones de los últimos 125 días con el mayor
impulso y operaciones todos los días.

Usted NO DEBE utilizar esta estrategia ciegamente sin backtesting a fondo. Realmente
no puedo enfatizar eso lo suficiente. Usted NO DEBE tomar asesoramiento de inversión
de mí, lo más probable es que sea 😄 lo siento.

Los datos
Lo primero que necesita es un universo de acciones. Usaré todas las acciones que cotizan
en la Bolsa de Nueva York. Para obtener los símbolos de esas acciones, los extraeremos

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 2/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

de eoddata.com. Luego, podemos solicitar los datos para cada uno de esos símbolos de
acciones de la API de TD Ameritrade.

Una vez que tengamos los datos, los almacenaremos en una tabla de BigQuery (BQ)
para que podamos obtenerlos más tarde para nuestra estrategia. Todo esto se ejecutará
en una función en la nube que luego podemos programar para que se ejecute todos los
días de la semana después del cierre de los mercados para obtener el último precio de
cierre.

Guardo las credenciales de la API en un archivo de texto en Cloud Storage para que no
estén codificadas. Simplemente los recuperamos desde allí con una llamada a la API.
Luego obtenemos la fecha para usar para verificar si el mercado está abierto. Luego,
extraemos los símbolos de acciones de NYSE y los pasamos a la API de TD Ameritrade
para obtener los datos del día.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 3/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 4/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Luego almacenamos esos datos en una tabla BQ a través de la API para usarlos más tarde
para nuestro bot.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 5/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Solo estoy usando el precio de cierre, pero la API devuelve muchos más datos, por lo que
es una buena idea almacenarlos todos. Creé un conjunto de datos llamado 'equity_data'
y la tabla se llamará 'daily_quote_data'. Si la tabla no existe (es decir, la primera vez que
hace esto), se creará la tabla y luego, todos los días, los nuevos datos se agregarán a esa
tabla.

En GCP puedes crear una función en la nube con esta secuencia de comandos. Para
programar esta función de Cloud para que se ejecute a una hora determinada,
simplemente elija "Cloud Pub / Sub" para la opción de activación y cree un tema.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 6/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Luego, vaya a Cloud Scheduler y configure el tema para que se ejecute cuando lo desee.
Aquí lo configuramos para que se ejecute todos los días de la semana a las 5 p.m., hora
del este. La frecuencia se establece en formato Unix-cron. La carga útil es solo un
mensaje que se enviará y puede ser lo que desee, pero es obligatorio.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 7/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

También es una buena idea establecer el tiempo de espera de la función en la nube al


máximo de 540 s para… bueno, evitar tiempos de espera. Esto se puede encontrar en la
sección de opciones avanzadas.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 8/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Esto descargará los datos en el futuro, pero también necesitaremos datos de respaldo
para el robot comercial. El punto final que estoy usando aquí es el punto final
'cotizaciones' que no proporciona datos históricos. Para obtener datos históricos de
precios, debe utilizar el punto final 'pricehistory'. Proporcioné un archivo en la carpeta
de GitHub que para eso se llamaba 'get_historical_data.py'. Puede ejecutar ese archivo
localmente y luego descargar el marco de datos en un csv y cargarlo en una tabla BQ.

Bot de comercio
En un nivel básico, el robot comercial debe poder:

1. Sepa cuánto dinero tenemos disponible para operar

2. Obtenga los datos para usar en la estrategia

3. Seleccione las acciones que decidimos que queremos según la estrategia

4. Compre / venda esas acciones para actualizar nuestra cartera

Toda la función de la nube está en el lado más largo, así que la resumiré aquí, pero el
código completo está en mi GitHub. Como dije, la estrategia no es importante aquí y
estoy usando una estrategia de impulso simple que selecciona las diez acciones con el
impulso más alto en los últimos 125 días.

Primero, descargamos los datos históricos en un marco de datos para la estrategia de


impulso de la API de BQ:

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 9/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Luego obtenemos las posiciones actuales de la API de Alpaca y el valor de nuestra


cartera actual. Tienen una envoltura de API que estoy usando aquí. Las credenciales
nuevamente se almacenan en un archivo de texto en el almacenamiento en la nube.
Tenga en cuenta que la URL base que estamos utilizando es para el comercio de papel.
Puede establecer cualquier monto en su cuenta de operaciones en papel, aquí lo
configuro en $ 10K. Obviamente, si esta es la primera vez que ejecuta esto, no tendrá
ninguna posición en Alpaca, por lo que antes de ejecutar la función en la nube,
simplemente ejecute el script localmente para obtener su cartera inicial en función de las
acciones de impulso que elija. Luego envíe esos a la API de Alpaca para comprarlos.
Supongo que aquí ya lo hizo.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 10/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Now that we have the historical data and the amount we have to trade with, we can
select the stocks based on our strategy. The first step is to identify the stocks with the
highest momentum.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 11/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

The momentum calculation is from the book Trading Evolved from Andreas F. Clenow
which I would recommend. It’s very easy to follow and has lot’s of different code
examples in it for different types of strategies.

The way it works is that it calculates a linear regression for the log of the closing price
for each stock over the past 125 days (minimum number of days is 40). The next step is
to make it easier to relate to. It takes the exponent of the slope of the regression line
(tells you how much percent up or down it is by day) and then annualizes it (raise to the
power of 252 which is the number of trading days in a year) and multiplies it by 100.
That is then multiplied by the r squared value which will give weight to models that
explain the variance well.

After we identified the top 10 stocks with the highest momentum score, we then need to
decide how many shares of each we will buy. Portfolio allocation is a whole topic in and
of itself so I won’t get into it here as it’s not important. To allocate here I am using the
pyportfolioopt library.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 12/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 13/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

We now have a df with the stocks we want to buy and the quantity. Now we need to
figure out if we need to sell any stocks based on what is in our current portfolio. It’s
possible that:

1. Our selection and allocation of momentum stocks today is exactly the same as
yesterday and we don’t need to make any sales or buys

2. There are stocks in our current portfolio that we do not want to hold anymore at all

3. The stocks we want to buy today are the same as the ones we currently own but the
amount we want to hold has changed (either increased or decreased)

4. There are new stocks we want to buy today, that were not in our portfolio yesterday

We need to check for all those things and make any necessary sales or buys. First we’ll
check to see if there’s any stocks in our current portfolio that we do not want anymore.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 14/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Now we have a dataframe with any stocks we want to sell and the quantity we need to
sell. Next we’ll check to see if the quantity of any stock we currently own has decreased.
Again, there may technically be no changes here so we need to check if there are. This
will give us a final dataframe with all the stocks we need to sell.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 15/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Now that we have the full list of stocks to sell (if there are any), we can send those to the
alpaca API to carry out the order.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 16/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Finally, we need to see if there are any new stocks we currently own that have increased
in quantity or if there are any new stocks we want to buy today that we didn’t own
yesterday.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 17/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

If there are any we need to buy, we send those orders to the API.

It’s also a good idea to log the portfolio once we’re done. Alpaca only allows you to have
a single paper trading account, so if you want to run multiple algorithms (which you
https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 18/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

should), you should create a log so you can track them on your own. We can create a
strategy column to identify this strategy from others. Then we can simply add that to
another BQ table.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 19/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

La siguiente consulta SQL le dará los totales diarios con el cambio porcentual en
comparación con el día anterior para su cartera.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 20/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Ese es el bot. Ahora puede programarlo para que se ejecute todos los días en una función
en la nube. Esto debería brindarle un buen marco en el que ejecutar sus propias
estrategias comerciales.

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 21/22
13/9/21 15:21 Bot de comercio algorítmico: Python. El auge del comercio sin comisiones… | de Rob Salgado | Hacia la ciencia de datos

Foto de Frank Busch en Unsplash

Regístrese en The Variable


Por Towards Data Science

Todos los jueves, Variable ofrece lo mejor de Towards Data Science: desde tutoriales prácticos e
investigación de vanguardia hasta características originales que no querrá perderse. Echar un
vistazo. 

Reciba este boletín

Finanzas Python Google Cloud Platform Data Science Algorithmic Trading

Sobre Escribir Ayudar Legal

Obtén la aplicación Medium

https://towardsdatascience.com/algorithmic-trading-bot-python-ab8f42c37145 22/22

También podría gustarte