My Authors
Read all threads
Asi se ve comprimido lo que hizo un bot de trading de BTC muy sencillo de cruce de medias ayer durante 9 horas.
El bot es con fines didácticos lo hice para un taller de python que me invitaron a dar para personas que nunca programaron, abajo les explico el paso a paso
Lo armé con 4 funciones específicas:
- Lectura de datos
- Calculo de parametros (medias moviles)
- Preparacion de datos
- Decisión/Ruteo de ordenes
Y ciclo que se repite cada 1min
Como uso key publica obviamente no mandé orden real sino impresión en pantalla de señal de orden
Usé BTC porque la API de cryptocompare es gratuita y en tiempo real real, y se puede ir comprobando contra cualquier graficador gratuito en tiempo real del BTC
El exchange que usé para los datos es bitstamp que es uno de los de mayor liquidez
les paso link del repo entero, subí tambien al repo ejemplo de calculo de griegas y primas por black&scholes todo escrito con funciones
Las funciones sirven para escribir codigo una sola vez y reutilizarlo luego y tambien ordena bastante los proyectos
github.com/gauss314/Bursa…
Lo que hace el bot es comprar cuando la media móvil de 10 (compresión velas de 1min) supera a la de 20 y vender cuando pasa lo contrario
Obviamente es solo a fines didácticos, no es un método de trading razonable para usarlo en real
A los que me preguntaron por cursos y demás, va consejo:

Busquen ejemplos escritos como este y traten de entenderlo

Usen las funciones por separado, copien las mismas sueltas e intenten entenderlas, modificarlas, etc

Armen cosas mezclando ideas, códigos, experimentando
A quienes me empezaron a leer hace poco y no vieron el tutorial anterior que subi aca les dejo el tw, este sería el paso 0, el primer hola mundo,
Bueno aca les dejo el código del bot para que jueguen un rato

import requests, json as j, pandas as pd, time
token = "dd52abb3c8036693290b36e87929412c5b0161d84ec012d7140e72147be4d29b"
# El token es temporal solo a fines didacticos, saquen el suyo gratis: min-api.cryptocompare.com
# Esta funcion trae los datos
def getData(s,token):
url = "min-api.cryptocompare.com/data/v2/histom…"+s
url += "&tsym=USD&limit=100&e=bitstamp&token="+token
json = j.loads(requests.get(url = url).text)
df = pd.DataFrame(json['Data']['Data']).dropna()
return df
# Si quieren probar una funcion por separado, asignenle la salida a una variable e imprimenla en pantalla y listo, por ejemplo asi:

datos = getData("BTC",token)
print(datos)

# lo mismo pueden ir haciendo con las otras funciones
# seguimos con la funcion de las medias moviles
def sma(serie,ruedas,nombreColumna):
rta=pd.DataFrame({nombreColumna:[]})
i = 0
for valor in serie:
if(i >= ruedas):
promedio = sum(serie[i-ruedas+1:i+1])/ruedas
rta.loc[i] = promedio
i = i+1
return rta
# la funcion sma toma como argumentos, la serie de datos, la cantidad de ruedas que quiero para la media movil, y el nombre que le quiero dar a la columna del dataframe de salida, probémoslo

precios = getData("BTC",token)
smas20 = sma(precios['close'],20,'SMA_20')
print(smas20)
def getTabla(simbolo,nRapida,nLenta,token):
data = getData(simbolo,token)
rapidas = sma(data['close'],nRapida,"rapida")
lentas = sma(data['close'],nLenta,"lenta")
tabla = rapidas.join(lentas).join(data['close']).dropna().reset_index()
return tabla
# la funcion getTabla me prepara un dataframe con los datos de dos medias moviles y los precios, probémoslo:

tabla = getTabla("BTC",10,20,token)
print(tabla)
def accion(cruce, pos, precio):
if(cruce>1):
if (pos=="Wait"):
print("--Buy Order $"+str(precio)+"--")
pos = "hold"
else:
if (pos=="hold"):
print("--Sell Order $"+str(precio)+"--")
pos = "Wait"
return pos
# la funcion accion() es la que decide si comprar o vender o mantenerse en espera ya sea comprado o vendido, recibe los argumentos:, cruce: ratio mediaRapida/mediaLenta, pos: si estamos comprados o no, y el precio

# finalmente el bot en si, que usa todas las funciones anterioes
pos = "Wait"
while False:
tabla = getTabla("BTC",10,20,token)
cruce = tabla['rapida'].iloc[-1] / tabla['lenta'].iloc[-1]
precio = tabla['close'].iloc[-1]
pos = accion(cruce, pos, precio)
print(pos+" $" +str(precio) )
time.sleep(60)
Bueno espero que les sirva como recurso a los que están aprendiendo a programar de cero, y si tienen dudas me re sirve que me las digan asi lo hago mas didáctico para el taller que me encargaron 😉
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with ae^((-(x-b)^2)/(2c^2))

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!