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

Tuplas e desempacotamento

Posição no roteiroMódulo 1 de 11 · Tópico 13 de 33
1.13 Tuplas e desempacotamento
—Nota do lab— / 100XP total—Sequência—

Um grupo fixo de valores

Uma tupla é como uma lista que não pode mudar depois de criada. Cria-se com vírgulas, em geral entre parênteses: ("AAPL", 184.25, 184.5). Serve para um registro pequeno cujas partes têm significado fixo, como uma cotação ou uma operação. Lê-se por índice como uma lista, mas atribuir a uma posição gera um TypeError. Uma tupla de um item precisa de vírgula no fim, (5,), pois (5) é só o 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'>

Desempacotamento: dar um nome a cada parte

O desempacotamento atribui as partes de uma tupla (ou de qualquer sequência) a vários nomes de uma vez: symbol, bid, ask = quote. O número de nomes deve ser igual ao de itens, senão o Python gera um ValueError. Em comparação com quote[0], quote[1] e quote[2], os nomes dizem o que cada parte significa, então desempacotar costuma ser mais claro que indexar. Também dá a troca clássica sem variável temporária: 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)

Pegar o resto com *

Coloque um * antes de um nome para que ele recolha tudo o que sobrar, como uma lista: first, *rest = prices ou first, *middle, last = prices. Só é permitido um nome com estrela, e os nomes simples precisam de um item cada. Use _ para uma parte de que não precisa, por exemplo 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

Desempacotamento em laços, retornos e ordenação

O desempacotamento funciona onde quer que um nome seja atribuído: em um laço for (for symbol, price in quotes), em comprehensions e no resultado de uma função que devolve vários valores com return a, b, que na verdade devolve uma só tupla. As tuplas também são comparadas item a item, primeiro com primeiro e, em caso de empate, segundo com segundo; ordenar uma lista de tuplas (price, symbol) ordena por preço e desempata pelo 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)
Uma tupla para um registro, uma lista para uma coleçãoUse uma tupla quando a posição de cada parte tem significado e o tamanho é fixo, como (symbol, bid, ask). Use uma lista quando há muitos itens parecidos e talvez se adicionem ou removam alguns. Como uma tupla não muda, ela também serve onde uma lista não serve, por exemplo como chave de dicionário, assunto que vem em breve.
  • (a, b, c): um grupo fixo; lê-se, não se altera.
  • x, y = pair: desempacotar em nomes; as quantidades devem coincidir.
  • first, *rest = items: o nome com estrela recolhe o resto como lista.

A seguir: dicionários, que buscam valores por um nome em vez de uma posição.

Lab: o que é avaliado

  • Desempacotar uma cotação com quote_stats25 pts
  • Pegar as duas pontas com first_last25 pts
  • Classificar cotações por preço com ranked25 pts
  • Encontrar a bolsa mais barata com best_ask25 pts
Explorador · lab-13-1
▾ lab-13-1
…
bash · no navegador
learner@quantcraft:~/lab-13-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

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