σμ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.6·~30 minPrincipiante

Bucles for y range

Posición en la rutaMódulo 1 de 11 · Tema 6 de 33
1.6 Bucles for y range
—Puntuación del lab— / 100XP total—Racha—

Repetir un bloque por cada elemento

Un bucle for ejecuta su bloque con sangría una vez por cada elemento de una colección y le da un nombre al elemento en esa vuelta. Aquí la colección es una lista, escrita con corchetes y comas (las listas tendrán su propio tema más adelante). La sintaxis se parece a la de if: dos puntos al final de la primera línea y un bloque con sangría debajo.

prices = [184.25, 184.5, 184.0]
for price in prices:
    print(price)  # 184.25, then 184.5, then 184.0

range: contar sin una lista

range(n) produce los enteros de 0 a n - 1: el valor final no se incluye, por eso range(5) tiene cinco números. range(start, stop) empieza donde tú digas, y range(start, stop, step) avanza de step en step, que puede ser negativo para contar hacia atrás. Úsalo cuando necesites repetir algo un número de veces o recorrer posiciones.

# range counts, and stops before the stop value
print(list(range(5)))          # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3)))   # [2, 5, 8]
print(list(range(3, 0, -1)))   # [3, 2, 1]

El patrón del acumulador

La mayoría de los bucles siguen un patrón: iniciar una variable antes del bucle, actualizarla dentro y usarla después. total += price * quantity es una abreviatura de total = total + price * quantity. Aquí cada elemento de la lista es un par, y la línea del bucle nombra ambas mitades a la vez (los siguientes temas explican este desempaquetado como es debido).

# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
    total += price * quantity
print(total)  # 64525.0

Recorrer posiciones

A veces hay que comparar cada elemento con el anterior. Recorre las posiciones con range(1, len(prices)): empieza en 1, así que prices[i - 1] siempre es válido. len() da el número de elementos y prices[i] toma el elemento en la posición i, contando desde 0.

# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
    if prices[i] > prices[i - 1]:
        ups += 1
print(ups)  # 2

Construir una lista sobre la marcha

Para recoger un resultado por vuelta, empieza con una lista vacía [] y llama a .append(value) dentro del bucle. Las escaleras de precios, los totales acumulados y las señales por día se construyen así. La lista se devuelve (o se usa) cuando termina el bucle.

# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
    ladder.append(start + level * tick)
print(ladder)  # [184.0, 184.25, 184.5, 184.75]
La variable del bucle permaneceTras el bucle, la variable del bucle conserva su último valor, y una variable definida dentro también existe después. Si la colección está vacía, el bloque nunca se ejecuta, así que una variable creada solo dentro no existiría: inicialízala antes del bucle.

A continuación: los bucles while, break y continue, para repetir hasta que cambie una condición en lugar de un número fijo de elementos.

Lab: qué se califica

  • Sumar el valor de muchas operaciones con total_notional25 pts
  • Trazar niveles de precio con price_ladder25 pts
  • Contar los días en que subió el precio con count_up_days25 pts
  • Llevar un total acumulado con running_total25 pts
Explorador · lab-6-1
▾ lab-6-1
…
bash · en el navegador
learner@quantcraft:~/lab-6-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-6-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