Ejecución y Despliegue | Seguridad .objectives { background: rgba(255,80,80,0.1); border-radius: 1.5rem; padding: 1rem 1.5rem; margin: 1.5rem 2rem; border: 1px solid rgba(255,80,80,0.3); } .objectives h3 { color: #ff5050; font-size: 1.1rem; margin-bottom: 0.7rem; } .objectives li { color: #b9ccee; font-size: 0.9rem; margin: 0.4rem 0; list-style: none; } .objectives li::before { content: "🎯 "; } .module-recap { background: rgba(255,80,80,0.08); border-radius: 1.5rem; padding: 1rem 1.5rem; margin: 1.5rem 2rem; border: 1px dashed rgba(255,80,80,0.4); } .module-recap h3 { color: #ff5050; font-size: 1rem; margin-bottom: 0.5rem; } .module-recap li { color: #8899bb; font-size: 0.85rem; margin: 0.3rem 0; }

🔒 Seguridad

API keys, env vars, rate limiting y buenas prácticas

Escape Room 4 minutos 3 vulnerabilidades
🔒 Piénsalo así: La seguridad en trading algorítmico es como proteger la caja fuerte de un banco. Tu API key es la llave maestra, el .env es el escondite secreto, y el rate limiting es el guardia que no deja entrar a demasiadas personas a la vez. Una vulnerabilidad y puedes perder todo tu capital en segundos.

🎯 ¿Qué aprenderás?

04:00

âšÂ Ã¯Â¸Â Vulnerabilidad 1: API Key hardcodeada

Encuentras este código en el repositorio público de tu bot:
API_KEY = "sk_live_1a2b3c4d5e6f7g8h9i0j"
client = AlpacaClient(API_KEY)

¿Cuál es la solución correcta?

Usar variables de entorno: API_KEY = os.getenv("ALPACA_API_KEY")
Poner el API key en un comentario en lugar del código
Cambiar la variable a "PRIVATE_KEY" y continuar

âšÂ Ã¯Â¸Â Vulnerabilidad 2: Sin Rate Limiting

Tu bot envía 500 requests por segundo a la API de Binance. El límite es 1200/minuto. Después de 30 segundos:
# Sin rate limiting
while True:
  price = get_price()
  if price < target:
    place_order()

¿Cuál es la solución correcta?

Implementar asyncio.sleep() y control de frecuencia: max 10 requests/segundo
Reducir la velocidad del loop, pero sin sleep explícito
Usar un try/except para capturar el error 429 y continuar

âšÂ Ã¯Â¸Â Vulnerabilidad 3: Logging de datos sensibles

Tu bot guarda logs en texto plano en un archivo accesible:
logging.info(f"API Response: {api_key}, {secret}")
logging.info(f"Login: user={username} pass={password}")

¿Cuál es la solución correcta?

Nunca loguear secrets. Usar logging filtrado con sanitizer que reemplace datos sensibles por "***"
Guardar los logs en un archivo con permisos 600
Encriptar el archivo de logs después de escribir
💡 Identifica las 3 vulnerabilidades y elige la solución correcta para cada una. Tienes 4 minutos.

💻 Código anotado

try: # Inicia bloque de código protegido resultado = 100 / precio # Código que PUEDE lanzar una excepción except ZeroDivisionError: # Captura específica el error de división por cero logger.error('División por cero') # Registra el error estructuradamente

💡 Lee los comentarios: cada línea tiene una razón de ser. El código no se escribe, se diseña.

✏️ Mini-ejercicio

¿Qué palabra clave captura una excepción en Python?

// Responde y presiona Verificar

🔍 Sabías que... Curiosidades de trading

El bug más caro fue Knight Capital 2012: algoritmo sin monitoreo causó $460M en 45 min. El logging y monitoreo salvan carreras (y capital).
Dato práctico: Implementa logging rotativo para no llenar tu disco con archivos de log enormes.

📋 Checklist de aprendizaje

Marca lo que ya dominas. Tu progreso se guarda automáticamente.

0/4 dominados

📌 Resumen del módulo