importar tiempo
importar solicitudes
importar numpy como np
de binance.spot importar Spot
# ---------------------------
# 1) Claves API de Binance
# ---------------------------
API_KEY = "YOUR_API_KEY"
API_SECRET = "YOUR_API_SECRET"
cliente = Spot(clave=API_KEY, secreto=API_SECRET)
# ---------------------------
# 2) Función de Cálculo de RSI
# ---------------------------
def calcular_rsi(precios, periodo=14):
precios = np.array(precios)
delta = np.diff(precios)
ganancia = delta.clip(min=0)
pérdida = -delta.clip(max=0)
ganancia_media = np.mean(ganancia[:periodo])
pérdida_media = np.mean(pérdida[:periodo])
rs = ganancia_media / (pérdida_media si pérdida_media != 0 sino 1)
rsi = 100 - (100 / (1 + rs))
return rsi
# ---------------------------
# 3) Bucle Principal de Trading
# ---------------------------
símbolo = "BTCUSDT"
qty = 0.001 # cantidad de compra/venta
mientras True:
# Obtener los últimos 100 precios (1 minuto)
url = f"https://api.binance.com/api/v3/klines?symbol={símbolo}&intervalo=1m&límite=100"
datos = requests.get(url).json()
cierra = [float(x[4]) para x en datos]
rsi = calcular_rsi(cierra)
último_precio = cierra[-1]
print(f"Precio: {último_precio} | RSI: {rsi}")
# ---------------------------
# Señal de COMPRA (RSI sobrevendido)
# ---------------------------
si rsi < 30:
print("SEÑAL DE COMPRA ACTIVADA")
intentar:
orden = cliente.new_order(
símbolo=símbolo,
lado="COMPRA",
tipo="MERCADO",
cantidad=qty
)
print("Comprado:", orden)
excepto Exception como e:
print("Error de Compra:", e)
# ---------------------------
# Señal de VENTA (RSI sobrecomprado)
# ---------------------------
si rsi > 70:
print("SEÑAL DE VENTA ACTIVADA")
intentar:
orden = cliente.new_order(
símbolo=símbolo,
lado="VENTA",
tipo="MERCADO",
cantidad=qty
)
print("Vendido:", orden)
excepto Exception como e:
print("Error de Venta:", e)
time.sleep(15)
