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
- 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
El exchange que usé para los datos es bitstamp que es uno de los de mayor liquidez
Las funciones sirven para escribir codigo una sola vez y reutilizarlo luego y tambien ordena bastante los proyectos
github.com/gauss314/Bursa…
Obviamente es solo a fines didácticos, no es un método de trading razonable para usarlo en real
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
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
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
datos = getData("BTC",token)
print(datos)
# lo mismo pueden ir haciendo con las otras funciones
# seguimos con la funcion de las medias moviles
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
precios = getData("BTC",token)
smas20 = sma(precios['close'],20,'SMA_20')
print(smas20)
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
tabla = getTabla("BTC",10,20,token)
print(tabla)
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
# finalmente el bot en si, que usa todas las funciones anterioes
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)