σμ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 AcademyRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
Roteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de Python›Módulo 1 · Fundamentos de Python para quants›Tópico 1.24·~35 minIniciante

Notebooks Jupyter

Posição no roteiroMódulo 1 de 11 · Tópico 24 de 33
1.24 Notebooks Jupyter
—Nota do lab— / 100XP total—Sequência—

Código, resultados e anotações em um só documento

Um notebook Jupyter é um documento feito de células. Uma célula de código contém Python que você pode executar; a saída (números, tabelas, gráficos) aparece logo abaixo. Uma célula markdown contém texto formatado para explicações, equações e títulos. Um processo em segundo plano chamado kernel executa o código e lembra cada variável entre as células. Notebooks são ideais para explorar dados e explicar uma análise, por isso estão em toda parte na pesquisa quantitativa.

# 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

O kernel lembra, e esse é o perigo

As células podem ser executadas em qualquer ordem e quantas vezes quiser, e o kernel guarda o último valor de cada variável. Por isso um notebook pode parecer correto na tela e depender de uma célula que você apagou ou de executar células fora de ordem, e ninguém mais (nem você amanhã) consegue reproduzi-lo. O contador de execução ao lado de cada célula de código ([3], [7]) mostra a ordem real. Antes de confiar num notebook ou compartilhá-lo, use Reiniciar kernel e executar tudo: se falhar ou os números mudarem, o notebook não era reproduzível.

# 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

Um notebook é só JSON

Um arquivo .ipynb é um documento JSON com uma lista cells. Cada célula tem um cell_type ("code", "markdown" ou "raw") e um source (uma lista de linhas ou uma string); as células de código também guardam seus outputs e execution_count. Por ser JSON simples, você pode ler e editar notebooks com o módulo json, e é assim que ferramentas os convertem em scripts ou limpam suas saídas. Isso também explica por que notebooks geram diferenças ruidosas no Git: saídas e contadores mudam a cada execução.

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 notebooks organizados e confiáveis

Mantenha os notebooks curtos e lineares: de cima para baixo, imports e configurações na primeira célula, uma ideia por seção com um título markdown. Leve a lógica reutilizável para funções num módulo .py normal (veja pacotes) e importe-a, para poder testá-la; o notebook só chama e plota. Reinicie e execute tudo antes de cada commit. Com o Git, limpe as saídas primeiro (uma ferramenta como nbstripout faz isso automaticamente) ou você commitará megabytes de gráficos e diferenças ilegíveis. Nunca deixe chaves de API numa célula ou saída.

# 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
Exploração em notebooks, código reutilizável em módulosUma boa regra: quando um trecho de código do notebook funcionar e você o quiser de novo, transforme-o numa função em um arquivo .py com um teste. Notebooks servem para fazer perguntas; módulos, para as respostas em que você confia. O lab trata o JSON de um notebook como simples dicionários, exatamente como esse tipo de ferramenta é escrito.
  • As células rodam em qualquer ordem e o kernel lembra: reinicie e execute tudo antes de confiar ou compartilhar.
  • Um .ipynb é JSON: cells, cada uma com cell_type, source e, no código, outputs e execution_count.
  • Mantenha a lógica em módulos, limpe as saídas antes de commitar e deixe os segredos de fora.

A seguir: fluxos de pesquisa reproduzíveis, reunindo sementes, ambientes, versões e verificações de dados para que qualquer pessoa possa refazer um resultado.

Lab: o que é avaliado

  • Extrair o código de um notebook com code_cells25 pts
  • Contar os tipos de células com count_cells25 pts
  • Limpar as saídas antes de commitar com clear_outputs25 pts
  • Transformar um notebook em script com to_script25 pts
Explorador · lab-24-1
▾ lab-24-1
…
bash · no navegador
learner@quantcraft:~/lab-24-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-24-1 volta aos arquivos iniciais e o terminal é limpo. Sua solução atual será perdida — isso não pode ser desfeito.

Será redefinido
  • main.py → código inicial
  • Histórico do terminal e saída dos testes
  • Alterações não enviadas
Será mantido
  • Melhor nota do lab
  • Seu XP e sua sequência
  • Progresso da aula e anotações

Entre para executar o seu código.

Todas as aulas são gratuitas para ler. Crie uma conta ou entre para executar código, rodar os testes e enviar este lab.

  • IDE no navegador com terminal bash — nada para instalar
  • Correção instantânea, XP e o seu lugar no roteiro
Criar uma contaEntrar
OU
Continuar com o GitHub