σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Rutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de Python›Módulo 1 · Fundamentos de Python para quants›Tema 1.7·~30 minPrincipiante

Bucles while, break y continue

Posición en la rutaMódulo 1 de 11 · Tema 7 de 33
1.7 Bucles while, break y continue
—Puntuación del lab— / 100XP total—Racha—

Repetir mientras se cumpla una condición

Un bucle while comprueba una condición antes de cada vuelta y ejecuta su bloque mientras la condición sea True. Úsalo cuando no sepas de antemano cuántas vueltas necesitas: reducir una orden a la mitad hasta que sea lo bastante pequeña, esperar a que un precio cruce un nivel, hacer crecer un saldo hasta un objetivo. Algo dentro del bloque tiene que cambiar la condición, o el bucle nunca termina.

# Halve an order until it is small enough to trade at once
quantity, limit = 1000, 100
steps = 0
while quantity > limit:
    quantity = quantity / 2
    steps += 1
print(steps, quantity)  # 4 62.5

¿for o while?

Usa for cuando ya tengas los elementos o conozcas la cantidad: no puede ejecutarse para siempre. Usa while cuando el punto de parada dependa de lo que ocurra durante el bucle. Una buena prueba: si puedes decir «por cada uno de estos», escribe for; si dices «hasta que esto sea verdadero», escribe while.

Asegúrate de que el bucle pueda terminarAntes de ejecutar un bucle while, comprueba tres cosas: la condición usa una variable que el bucle cambia, el cambio ocurre en cada vuelta y acerca la condición a False. Si un bucle tarda demasiado aquí, se detiene a los 10 segundos.

break: salir del bucle ahora

break termina el bucle en el acto y continúa con la línea siguiente. Es la forma de parar en cuanto tienes la respuesta, como el primer precio que supera un límite. Aquí el bucle recorre posiciones con un índice que incrementa él mismo.

# break leaves the loop at once
prices = [184.25, 184.5, 186.0, 185.0]
limit = 185.5
index = 0
while index < len(prices):
    if prices[index] > limit:
        print("breach at", index)  # breach at 2
        break
    index += 1

continue: saltar a la siguiente vuelta

continue salta el resto de la vuelta actual y vuelve a la condición. Es útil para ignorar datos malos sin anidar el trabajo real dentro de un if. En un bucle while, cambia la variable del bucle antes de continue; si no, el bucle se topa con el mismo elemento para siempre.

# continue skips the rest of the pass; step first, or it never moves on
fills = [100, -5, 250, 0, 75]
total = 0
index = 0
while index < len(fills):
    value = fills[index]
    index += 1
    if value <= 0:
        continue
    total += value
print(total)  # 425

Bucles que buscan o convergen

Muchas tareas de quant son del tipo «sigue hasta que»: capitalizar hasta un objetivo, afinar una estimación hasta que deje de cambiar, reintentar hasta que una petición tenga éxito. while True: con un break en medio es una forma habitual cuando la prueba de salida va en mitad del trabajo.

# How many years until 10,000 grows to 15,000 at 7% a year?
balance, target, rate = 10_000, 15_000, 0.07
years = 0
while balance < target:
    balance = balance * (1 + rate)
    years += 1
print(years)  # 6

# while True + break: the exit test sits in the middle
attempt = 0
while True:
    attempt += 1
    if attempt * 25 >= 100:
        break
print(attempt)  # 4
  • La condición usa una variable que el bucle cambia.
  • El cambio ocurre en cada vuelta, incluso antes de un continue.
  • Usa break en cuanto se conozca la respuesta.

A continuación: definir y llamar funciones, para ponerle nombre a un bloque de código y reutilizarlo.

Lab: qué se califica

  • Contar las mitades que necesita una orden con halving_steps25 pts
  • Hallar el primer precio por encima de un límite con first_breach25 pts
  • Sumar las ejecuciones válidas hasta la marca final con sum_until_zero25 pts
  • Capitalizar un saldo hasta un objetivo con years_to_target25 pts
Explorador · lab-7-1
▾ lab-7-1
…
bash · en el navegador
learner@quantcraft:~/lab-7-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-7-1 vuelve a los archivos iniciales y se limpia el terminal. Tu solución actual se perderá: no se puede deshacer.

Se restablecerá
  • main.py → código inicial
  • Historial del terminal y salida de pruebas
  • Cambios sin enviar
Se conservará
  • Mejor puntuación del lab
  • Tu XP y tu racha
  • Progreso de la lección y notas

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub