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

Laços while, break e continue

Posição no roteiroMódulo 1 de 11 · Tópico 7 de 33
1.7 Laços while, break e continue
—Nota do lab— / 100XP total—Sequência—

Repetir enquanto uma condição for verdadeira

Um laço while verifica uma condição antes de cada volta e executa o bloco enquanto a condição for True. Use-o quando você não sabe de antemão quantas voltas serão necessárias: dividir uma ordem ao meio até ficar pequena o bastante, esperar um preço cruzar um nível, fazer um saldo crescer até uma meta. Algo dentro do bloco precisa mudar a condição, senão o laço nunca termina.

# Halve an order until it is small enough to trade at once
quantity, limit = 1000, 100
steps = 0
while quantity > limit:
    quantity = quantity / 2
    steps += 1
print(steps, quantity)  # 4 62.5

for ou while?

Use for quando já tiver os itens ou souber a quantidade: ele não pode rodar para sempre. Use while quando o ponto de parada depender do que acontece durante o laço. Um bom teste: se você consegue dizer «para cada um destes», escreva for; se diz «até que isto seja verdadeiro», escreva while.

Garanta que o laço possa terminarAntes de executar um laço while, verifique três coisas: a condição usa uma variável que o laço altera, a alteração acontece em toda volta e aproxima a condição de False. Se um laço demorar demais aqui, ele é interrompido após 10 segundos.

break: sair do laço agora

break encerra o laço na hora e continua com a linha seguinte. É o jeito de parar assim que você tem a resposta, como o primeiro preço que rompe um limite. Aqui o laço percorre posições com um índice que ele mesmo incrementa.

# break leaves the loop at once
prices = [184.25, 184.5, 186.0, 185.0]
limit = 185.5
index = 0
while index < len(prices):
    if prices[index] > limit:
        print("breach at", index)  # breach at 2
        break
    index += 1

continue: pular para a próxima volta

continue pula o resto da volta atual e volta à condição. É útil para ignorar dados ruins sem aninhar o trabalho real dentro de um if. Em um laço while, altere a variável do laço antes de continue; senão o laço encontra o mesmo item para sempre.

# continue skips the rest of the pass; step first, or it never moves on
fills = [100, -5, 250, 0, 75]
total = 0
index = 0
while index < len(fills):
    value = fills[index]
    index += 1
    if value <= 0:
        continue
    total += value
print(total)  # 425

Laços que buscam ou convergem

Muitas tarefas de quant são do tipo «continue até que»: capitalizar até uma meta, refinar uma estimativa até que pare de mudar, tentar de novo até uma requisição ter sucesso. while True: com um break no meio é uma forma comum quando o teste de saída fica no meio do trabalho.

# How many years until 10,000 grows to 15,000 at 7% a year?
balance, target, rate = 10_000, 15_000, 0.07
years = 0
while balance < target:
    balance = balance * (1 + rate)
    years += 1
print(years)  # 6

# while True + break: the exit test sits in the middle
attempt = 0
while True:
    attempt += 1
    if attempt * 25 >= 100:
        break
print(attempt)  # 4
  • A condição usa uma variável que o laço altera.
  • A alteração acontece em toda volta, mesmo antes de um continue.
  • Use break assim que a resposta for conhecida.

A seguir: definir e chamar funções, para dar um nome a um bloco de código e reutilizá-lo.

Lab: o que é avaliado

  • Contar as divisões ao meio de uma ordem com halving_steps25 pts
  • Encontrar o primeiro preço acima de um limite com first_breach25 pts
  • Somar as execuções válidas até o marcador final com sum_until_zero25 pts
  • Capitalizar um saldo até uma meta com years_to_target25 pts
Explorador · lab-7-1
▾ lab-7-1
…
bash · no navegador
learner@quantcraft:~/lab-7-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

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