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

Notebooks de Jupyter

Posición en la rutaMódulo 1 de 11 · Tema 24 de 33
1.24 Notebooks de Jupyter
—Puntuación del lab— / 100XP total—Racha—

Código, resultados y notas en un solo documento

Un cuaderno Jupyter es un documento formado por celdas. Una celda de código contiene Python que puedes ejecutar; su salida (números, tablas, gráficos) aparece justo debajo. Una celda markdown contiene texto con formato para explicaciones, ecuaciones y títulos. Un proceso en segundo plano llamado kernel ejecuta el código y recuerda cada variable entre celdas. Los cuadernos son ideales para explorar datos y explicar un análisis, por eso están por todas partes en la investigación cuantitativa.

# Inside your project's virtual environment
python -m pip install jupyterlab

# Start it; a browser tab opens
jupyter lab

# Keyboard shortcuts you will use all day
#   Shift+Enter   run the cell and move on
#   Esc then A/B  insert a cell above/below
#   Esc then M/Y  turn a cell into markdown/code

El kernel recuerda, y ese es el peligro

Las celdas pueden ejecutarse en cualquier orden y cualquier número de veces, y el kernel conserva el último valor de cada variable. Por eso un cuaderno puede verse correcto en pantalla y depender de una celda que borraste o de ejecutar celdas desordenadas, y nadie más (ni tú mañana) puede reproducirlo. El contador de ejecución junto a cada celda de código ([3], [7]) muestra el orden real. Antes de fiarte de un cuaderno o compartirlo, usa Reiniciar kernel y ejecutar todo: si falla o cambian los números, el cuaderno no era reproducible.

# Cell [1]
fee = 0.001

# Cell [2]
cost = 10000 * fee
print(cost)          # 10.0

# Cell [3]: you edit this to fee = 0.002 but never re-run cell [2]
fee = 0.002
print(cost)          # still 10.0: the notebook now says fee=0.002 but shows the old cost

Un cuaderno es solo JSON

Un archivo .ipynb es un documento JSON con una lista cells. Cada celda tiene un cell_type ("code", "markdown" o "raw") y una source (una lista de líneas o una cadena); las celdas de código también guardan sus outputs y execution_count. Al ser JSON simple, puedes leer y editar cuadernos con el módulo json, así es como las herramientas los convierten en scripts o les quitan las salidas. Esto explica también por qué los cuadernos generan diferencias de Git ruidosas: las salidas y los contadores cambian en cada ejecución.

import json

notebook = {
    "nbformat": 4, "nbformat_minor": 5, "metadata": {},
    "cells": [
        {"cell_type": "markdown", "metadata": {}, "source": ["# Fee study\n", "Does the fee matter?"]},
        {"cell_type": "code", "metadata": {}, "execution_count": 2,
         "source": ["fee = 0.001\n", "print(10000 * fee)"],
         "outputs": [{"output_type": "stream", "name": "stdout", "text": ["10.0\n"]}]},
    ],
}

# What the file looks like, and how to walk it
print(len(json.dumps(notebook, indent=1).splitlines()) > 10)     # True
for cell in notebook["cells"]:
    print(cell["cell_type"], "".join(cell["source"]).splitlines()[0])
# markdown # Fee study
# code fee = 0.001

Hábitos para cuadernos ordenados y fiables

Mantén los cuadernos cortos y lineales: de arriba abajo, importaciones y ajustes en la primera celda, una idea por sección con un título markdown. Lleva la lógica reutilizable a funciones de un módulo .py normal (ver paquetes) e impórtala, para poder probarla; el cuaderno solo llama y grafica. Reinicia y ejecuta todo antes de cada commit. Con Git, borra primero las salidas (una herramienta como nbstripout puede hacerlo automáticamente) o confirmarás megabytes de gráficos y diferencias ilegibles. Nunca dejes claves de API en una celda o una salida.

# Keep notebooks tidy under Git
python -m pip install nbstripout
nbstripout --install           # strips outputs automatically on every commit

# Run a notebook top to bottom from the terminal (a reproducibility check)
jupyter nbconvert --to notebook --execute study.ipynb --output checked.ipynb

# Turn a notebook into a plain script
jupyter nbconvert --to script study.ipynb
Exploración en cuadernos, código reutilizable en módulosUna buena regla: cuando un trozo de código del cuaderno funciona y lo quieres de nuevo, conviértelo en una función de un archivo .py con una prueba. Los cuadernos son para hacer preguntas; los módulos, para las respuestas en las que confías. El lab trata el JSON de un cuaderno como simples diccionarios, que es exactamente como se escriben esas herramientas.
  • Las celdas se ejecutan en cualquier orden y el kernel recuerda: reinicia y ejecuta todo antes de fiarte o compartir.
  • Un .ipynb es JSON: cells, cada una con cell_type, source y, para código, outputs y execution_count.
  • Mantén la lógica en módulos, borra las salidas antes de confirmar y deja fuera los secretos.

A continuación: flujos de investigación reproducibles, que reúnen semillas, entornos, versiones y comprobaciones de datos para que cualquiera pueda reconstruir un resultado.

Lab: qué se califica

  • Extraer el código de un cuaderno con code_cells25 pts
  • Contar los tipos de celdas con count_cells25 pts
  • Borrar las salidas antes de confirmar con clear_outputs25 pts
  • Convertir un cuaderno en un script con to_script25 pts
Explorador · lab-24-1
▾ lab-24-1
…
bash · en el navegador
learner@quantcraft:~/lab-24-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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