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

Laços for e range

Posição no roteiroMódulo 1 de 11 · Tópico 6 de 33
1.6 Laços for e range
—Nota do lab— / 100XP total—Sequência—

Repetir um bloco para cada item

Um laço for executa seu bloco recuado uma vez para cada item de uma coleção e dá um nome ao item naquela volta. Aqui a coleção é uma lista, escrita com colchetes e vírgulas (as listas terão seu próprio tópico mais adiante). A sintaxe lembra a do if: dois-pontos no fim da primeira linha e um bloco recuado embaixo.

prices = [184.25, 184.5, 184.0]
for price in prices:
    print(price)  # 184.25, then 184.5, then 184.0

range: contar sem lista

range(n) produz os inteiros de 0 até n - 1: o valor de parada não é incluído, por isso range(5) tem cinco números. range(start, stop) começa onde você disser, e range(start, stop, step) avança de step em step, que pode ser negativo para contar para trás. Use-o quando precisar repetir algo um número de vezes ou percorrer posições.

# range counts, and stops before the stop value
print(list(range(5)))          # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3)))   # [2, 5, 8]
print(list(range(3, 0, -1)))   # [3, 2, 1]

O padrão do acumulador

A maioria dos laços segue um padrão: iniciar uma variável antes do laço, atualizá-la dentro dele e usá-la depois. total += price * quantity é abreviação de total = total + price * quantity. Aqui cada item da lista é um par, e a linha do laço dá nome às duas metades de uma vez (os próximos tópicos explicam esse desempacotamento direito).

# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
    total += price * quantity
print(total)  # 64525.0

Percorrer posições

Às vezes é preciso comparar cada item com o anterior. Percorra as posições com range(1, len(prices)): ela começa em 1, então prices[i - 1] é sempre válido. len() dá o número de itens e prices[i] pega o item na posição i, contando a partir de 0.

# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
    if prices[i] > prices[i - 1]:
        ups += 1
print(ups)  # 2

Construir uma lista durante o laço

Para coletar um resultado por volta, comece com uma lista vazia [] e chame .append(value) dentro do laço. Escadas de preços, totais acumulados e sinais por dia são construídos assim. A lista é devolvida (ou usada) depois que o laço termina.

# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
    ladder.append(start + level * tick)
print(ladder)  # [184.0, 184.25, 184.5, 184.75]
A variável do laço permaneceDepois do laço, a variável do laço mantém seu último valor, e uma variável definida dentro dele também existe depois. Se a coleção estiver vazia, o bloco nunca executa, então uma variável criada só lá dentro não existiria: inicialize-a antes do laço.

A seguir: laços while, break e continue, para repetir até que uma condição mude em vez de um número fixo de itens.

Lab: o que é avaliado

  • Somar o valor de várias operações com total_notional25 pts
  • Montar níveis de preço com price_ladder25 pts
  • Contar os dias em que o preço subiu com count_up_days25 pts
  • Manter um total acumulado com running_total25 pts
Explorador · lab-6-1
▾ lab-6-1
…
bash · no navegador
learner@quantcraft:~/lab-6-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

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