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)