σμ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.20·~35 minPrincipiante

Módulos e importaciones

Posición en la rutaMódulo 1 de 11 · Tema 20 de 33
1.20 Módulos e importaciones
—Puntuación del lab— / 100XP total—Racha—

Reutilizar código con import

Un módulo es un archivo de Python cuyos nombres (funciones, constantes, clases) puede usar otro código. import math carga el módulo math de la biblioteca estándar y lo deja disponible con ese nombre: luego escribes math.sqrt(2). Python incluye cientos de módulos, y lo que instales después (por ejemplo numpy) se importa igual. Pon las importaciones al principio del archivo para que se vea enseguida de qué depende.

import math
import statistics

# Use a name from a module with module.name
print(math.sqrt(252))                     # 15.874507866387544
print(round(math.sqrt(252), 2))           # 15.87

returns = [0.01, -0.02, 0.015, 0.0]
print(round(statistics.stdev(returns), 4))  # 0.0155

from ... import y alias

from datetime import date trae solo un nombre, así que escribes date(2025, 1, 2) sin prefijo. import numpy as np da un alias más corto a un módulo, una convención que verás en todas partes. Evita from module import *: vuelca nombres desconocidos en tu archivo y puede reemplazar los tuyos sin avisar. Prefiere nombres claros y usa el prefijo cuando haga evidente el origen.

from datetime import date
from math import sqrt as square_root
import statistics as stats

# Only the names you asked for are imported
start = date(2025, 1, 2)
end = date(2025, 3, 3)
print((end - start).days)                  # 60
print(square_root(16))                     # 4.0
print(stats.mean([1.0, 2.0, 3.0]))         # 2.0

Tus propios módulos

Cualquier archivo .py es un módulo. Si fees.py está junto a main.py y define commission, entonces main.py puede hacer import fees y llamar a fees.commission(...). Cuando un archivo se ejecuta directamente, Python pone su __name__ en "__main__"; cuando se importa, __name__ es el nombre del módulo. Así, la guarda if __name__ == "__main__": hace que el código se ejecute solo cuando el archivo se lanza, no cuando se importa, lo que aparta las demos y las pruebas.

# fees.py
RATE = 0.001

def commission(notional):
    return notional * RATE

if __name__ == "__main__":
    print(commission(10000))   # runs only with: python fees.py

# main.py (next to fees.py)
import fees

print(fees.commission(50000))  # 50.0
print(__name__)                # __main__

Dónde busca Python, y una trampa clásica

Con import name, Python busca primero en la carpeta del script en ejecución, luego en la biblioteca estándar y los paquetes instalados (la lista es sys.path). Gana la primera coincidencia. Por eso un archivo tuyo llamado random.py o statistics.py oculta el módulo real, y import random carga tu archivo y falla de formas confusas. Nunca llames a tus archivos como módulos de la biblioteca estándar. Evita también dos módulos que se importan entre sí al principio (importación circular); mueve la parte común a un tercer módulo.

import sys
import random

# Imported modules are remembered in sys.modules; sys.path is the search list
print("random" in sys.modules)               # True
print(random.__name__)                       # random
print(len(sys.path) > 0)                     # True

# A quick tour of useful standard-library modules
import collections, datetime, itertools, pathlib
print(collections.Counter("AAPL")["A"])      # 2
print(datetime.date(2025, 1, 2).weekday())   # 3  (Thursday; Monday is 0)
Mira primero en la biblioteca estándarAntes de escribir tú mismo aritmética de fechas, estadística o manejo de CSV o JSON, comprueba si un módulo estándar ya lo hace (datetime, statistics, csv, json, collections, itertools, pathlib). El código de biblioteca probado casi siempre es más seguro que una versión casera rápida, y el lab marca el análisis manual de fechas como un error de técnica.
  • import module y luego module.name; from module import name para un nombre; import module as short para un alias.
  • Las importaciones van arriba; evita import *.
  • No llames a tus archivos como módulos estándar; usa if __name__ == "__main__": para el código que solo debe ejecutarse directamente.

A continuación: paquetes y estructura de proyecto, cómo organizar varios módulos en carpetas que se importen limpiamente.

Lab: qué se califica

  • Medir la volatilidad con daily_vol25 pts
  • Llevar la volatilidad a un año con annualize_vol25 pts
  • Contar los días entre dos fechas con days_between25 pts
  • Distinguir días laborables y fines de semana con is_business_day25 pts
Explorador · lab-20-1
▾ lab-20-1
…
bash · en el navegador
learner@quantcraft:~/lab-20-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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