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

Módulos e importações

Posição no roteiroMódulo 1 de 11 · Tópico 20 de 33
1.20 Módulos e importações
—Nota do lab— / 100XP total—Sequência—

Reutilizar código com import

Um módulo é um arquivo Python cujos nomes (funções, constantes, classes) outro código pode usar. import math carrega o módulo math da biblioteca padrão e o deixa disponível com esse nome: depois você escreve math.sqrt(2). O Python traz centenas de módulos, e o que você instalar depois (por exemplo numpy) é importado do mesmo jeito. Coloque os imports no topo do arquivo para que se veja de imediato do que ele 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 e apelidos

from datetime import date traz só um nome, então você escreve date(2025, 1, 2) sem prefixo. import numpy as np dá a um módulo um apelido mais curto, uma convenção que você verá em todo lugar. Evite from module import *: ele despeja nomes desconhecidos no seu arquivo e pode substituir os seus em silêncio. Prefira nomes claros e use o prefixo quando ele deixar a origem óbvia.

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

Seus próprios módulos

Qualquer arquivo .py é um módulo. Se fees.py está ao lado de main.py e define commission, então main.py pode fazer import fees e chamar fees.commission(...). Quando um arquivo é executado diretamente, o Python define seu __name__ como "__main__"; quando ele é importado, __name__ é o nome do módulo. Assim, a guarda if __name__ == "__main__": faz o código rodar só quando o arquivo é executado, não quando é importado, o que tira demos e testes do caminho.

# 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__

Onde o Python procura, e uma armadilha clássica

Em import name, o Python procura primeiro na pasta do script em execução, depois na biblioteca padrão e nos pacotes instalados (a lista é sys.path). A primeira correspondência vence. Por isso um arquivo seu chamado random.py ou statistics.py esconde o módulo real, e import random carrega o seu arquivo e falha de formas confusas. Nunca dê aos seus arquivos nomes de módulos da biblioteca padrão. Evite também dois módulos que se importam no topo (importação circular); mova a parte comum para um terceiro 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)
Procure primeiro na biblioteca padrãoAntes de escrever você mesmo aritmética de datas, estatística ou tratamento de CSV ou JSON, veja se um módulo padrão já faz isso (datetime, statistics, csv, json, collections, itertools, pathlib). Código de biblioteca testado quase sempre é mais seguro que uma versão caseira rápida, e o lab marca a leitura manual de datas como erro de técnica.
  • import module e depois module.name; from module import name para um nome; import module as short para um apelido.
  • Os imports ficam no topo; evite import *.
  • Não dê aos arquivos nomes de módulos padrão; use if __name__ == "__main__": para o código que só deve rodar diretamente.

A seguir: pacotes e estrutura de projeto, como organizar vários módulos em pastas que se importam de forma limpa.

Lab: o que é avaliado

  • Medir a volatilidade com daily_vol25 pts
  • Levar a volatilidade a um ano com annualize_vol25 pts
  • Contar os dias entre duas datas com days_between25 pts
  • Distinguir dias úteis de fins de semana com is_business_day25 pts
Explorador · lab-20-1
▾ lab-20-1
…
bash · no navegador
learner@quantcraft:~/lab-20-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-20-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