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

Tuplas y desempaquetado

Posición en la rutaMódulo 1 de 11 · Tema 13 de 33
1.13 Tuplas y desempaquetado
—Puntuación del lab— / 100XP total—Racha—

Un grupo fijo de valores

Una tupla es como una lista que no puede cambiar tras crearse. Se crea con comas, normalmente entre paréntesis: ("AAPL", 184.25, 184.5). Sirve para un registro pequeño cuyas partes tienen un significado fijo, como una cotización o una operación. Se lee por índice como una lista, pero asignar a una posición lanza un TypeError. Una tupla de un elemento necesita una coma final, (5,), porque (5) es solo el número 5.

quote = ("AAPL", 184.25, 184.5)

# Reading works like a list
print(quote[0], len(quote))  # AAPL 3

# Changing does not
try:
    quote[1] = 185.0
except TypeError as error:
    print("tuples are fixed:", error)

# One item needs a trailing comma
print(type((5,)), type((5)))  # <class 'tuple'> <class 'int'>

Desempaquetado: dar nombre a cada parte

El desempaquetado asigna las partes de una tupla (o de cualquier secuencia) a varios nombres a la vez: symbol, bid, ask = quote. El número de nombres debe coincidir con el de elementos; si no, Python lanza un ValueError. Frente a quote[0], quote[1] y quote[2], los nombres dicen qué significa cada parte, por lo que desempaquetar suele ser más claro que indexar. También da el intercambio clásico sin variable temporal: a, b = b, a.

# Unpack a quote into named parts
quote = ("AAPL", 184.25, 184.5)
symbol, bid, ask = quote
print(symbol, round(ask - bid, 2))  # AAPL 0.25

# Swap two values without a temporary
bid, ask = ask, bid
print(bid, ask)                     # 184.5 184.25

# The count must match
try:
    symbol, bid = quote
except ValueError as error:
    print("wrong count:", error)

Quedarse con el resto con *

Pon un * delante de un nombre para que recoja todo lo que sobra, como una lista: first, *rest = prices o first, *middle, last = prices. Solo se permite un nombre con estrella, y los nombres simples necesitan un elemento cada uno. Usa _ para una parte que no necesitas, por ejemplo first, *_, last = prices.

# * collects what is left, as a list
prices = [184.0, 185.0, 183.2, 186.1]

first, *rest = prices
print(first, rest)         # 184.0 [185.0, 183.2, 186.1]

first, *_, last = prices
print(first, last)         # 184.0 186.1

Desempaquetado en bucles, retornos y ordenación

El desempaquetado funciona en cualquier lugar donde se asigna un nombre: en un bucle for (for symbol, price in quotes), en comprensiones y sobre el resultado de una función que devuelve varios valores con return a, b, que en realidad devuelve una sola tupla. Las tuplas también se comparan elemento a elemento, primero con primero y, si empatan, segundo con segundo, así que ordenar una lista de tuplas (price, symbol) ordena por precio y desempata por símbolo.

# Return several values, unpack them in the caller
def spread_and_mid(bid, ask):
    return ask - bid, (bid + ask) / 2

spread, mid = spread_and_mid(184.25, 184.5)
print(spread, mid)  # 0.25 184.375

# Tuples sort by the first item, then the second
quotes = [("AAPL", 184.5), ("MSFT", 410.2), ("GOOG", 171.0)]
by_price = sorted((price, symbol) for symbol, price in quotes)
print(by_price)     # [(171.0, 'GOOG'), (184.5, 'AAPL'), (410.2, 'MSFT')]

for price, symbol in by_price:
    print(symbol, price)
Una tupla para un registro, una lista para una colecciónUsa una tupla cuando la posición de cada parte tiene un significado y el tamaño es fijo, como (symbol, bid, ask). Usa una lista cuando tienes muchos elementos parecidos y puedes añadir o quitar algunos. Como una tupla no puede cambiar, también sirve donde una lista no puede, por ejemplo como clave de un diccionario, que viene pronto.
  • (a, b, c): un grupo fijo; se lee, no se modifica.
  • x, y = pair: desempaquetar en nombres; las cantidades deben coincidir.
  • first, *rest = items: el nombre con estrella recoge el resto como lista.

A continuación: diccionarios, que buscan valores por un nombre en lugar de por una posición.

Lab: qué se califica

  • Desempaquetar una cotización con quote_stats25 pts
  • Tomar ambos extremos con first_last25 pts
  • Clasificar cotizaciones por precio con ranked25 pts
  • Encontrar el mercado más barato con best_ask25 pts
Explorador · lab-13-1
▾ lab-13-1
…
bash · en el navegador
learner@quantcraft:~/lab-13-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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