Quant500 Academy

4. Control de flujo: bucles y comprensión de listas

Nivel 2: Python desde Cero para Finanzas

Cualquier estrategia de trading, en el fondo, es una cadena de decisiones del tipo "si pasa esto, haz aquello". En Python esas decisiones se escriben con if, elif (abreviatura de "else if") y else.

precio_actual = 183.20
media_movil = 180.00

if precio_actual > media_movil:
    print("Senal de compra: el precio esta por encima de la media movil")
elif precio_actual == media_movil:
    print("Sin senal: el precio esta exactamente en la media")
else:
    print("Senal de venta: el precio esta por debajo de la media movil")

Aquí aparece uno de los rasgos más particulares de Python, y que sorprende a cualquiera que venga de otro lenguaje: los bloques de código no se delimitan con llaves {}, se delimitan por la indentación. Todo lo que está sangrado con el mismo número de espacios pertenece al mismo bloque. Si te equivocas de indentación, Python directamente da un error de sintaxis, no un resultado inesperado — es una de sus protecciones más útiles, aunque al principio resulte incómoda.

Para repetir una acción sobre cada elemento de una secuencia se usa el bucle for, la herramienta que más vas a usar para recorrer listas de precios, tickers o fechas.

precios_semana = [182.52, 184.10, 179.88, 181.45, 183.20]

for precio in precios_semana:
    if precio > 183:
        print(f"Precio alto detectado: {precio}")

Cuando necesitas tanto el valor como su posición en la lista, enumerate te da los dos a la vez, en vez de tener que llevar un contador manual:

for dia, precio in enumerate(precios_semana):
    print(f"Dia {dia}: {precio}")

El bucle while, en cambio, repite mientras se cumpla una condición, sin importar cuántas veces — útil, por ejemplo, para simular una posición hasta que salte el stop-loss:

capital = 10000
dia = 0

while capital > 5000 and dia < 30:
    capital = capital * 1.01  # crecimiento simulado del 1% diario
    dia += 1

print(f"Simulacion terminada en el dia {dia}, capital final: {capital:.2f}")

Una construcción muy propia de Python, y que vas a ver constantemente en código financiero real, es la comprensión de listas: una forma compacta de crear una lista nueva aplicando una operación a cada elemento de otra, en una sola línea en vez de un bucle for completo.

retornos_diarios = [(precios_semana[i] - precios_semana[i-1]) / precios_semana[i-1]
                     for i in range(1, len(precios_semana))]

Esa única línea calcula el retorno porcentual de cada día respecto al anterior, recorriendo toda la lista. Es exactamente el mismo resultado que escribir un bucle for con una lista vacía a la que vas haciendo append, pero más corto y, en la mayoría de los casos, más rápido de ejecutar.

El resto de Quant500

Lo que estás aprendiendo, aplicado al índice todos los días:

La cartera del modelo, cada semana en tu correo

Cada sábado, su semana en un minuto: cómo fue, lo mejor y lo peor, y qué directivos compraron con su dinero. Y el día que el modelo se rehace, qué entra y qué sale. Es una simulación, no un consejo. Como mucho un correo a la semana, sin publicidad y sin cuenta; te das de baja con un clic. Lo hace una persona: Pol Gracia.

Cartera modelo con resultados simulados, no una recomendación personalizada. Tu correo se usa solo para esto: privacidad.

Detrás de la Academia y del resto de Quant500 hay una sola persona: Pol Gracia Serrahima.