σμ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 AcademyRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Rutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de Python›Módulo 1 · Fundamentos de Python para quants›Tema 1.2·~30 minPrincipiante

Enteros y flotantes

Posición en la rutaMódulo 1 de 11 · Tema 2 de 33
1.2 Enteros y flotantes
—Puntuación del lab— / 100XP total—Racha—

Números enteros y decimales

Python tiene dos tipos de número para el trabajo diario. Un int es un número entero, como 200 acciones. Un float es un número decimal, como 184.25, un precio. type() te dice de cuál se trata. Los recuentos (acciones, lotes, días) son int; los precios, rendimientos y ratios son float.

shares = 200
price = 184.25
print(type(shares), type(price))  # <class 'int'> <class 'float'>

Tres tipos de división

+, - y * se comportan como esperas. La división tiene tres variantes. / siempre devuelve un float, incluso con 10 / 2 (es decir, 5.0). // es la división entera: divide y redondea hacia abajo a un número entero. % da el resto. ** eleva un número a una potencia.

# Division, floor division, remainder and power
print(7 / 2)    # 3.5
print(7 // 2)   # 3
print(7 % 2)    # 1
print(2 ** 10)  # 1024
Piso significa hacia abajo// redondea hacia menos infinito, así que -7 // 2 es -4, no -3. Con números positivos parece quitar los decimales; con negativos no.

¿Cuántas acciones enteras puedes comprar?

La división entera responde a «¿cuántas veces cabe esto?». Con 1.000 en efectivo y un precio de 184,25, cash // price es el número de acciones enteras y cash - shares * price lo que sobra. Con floats, // devuelve un float (5.0), así que envuélvelo en int() cuando necesites un recuento real.

# Whole shares for a cash budget, and the cash left over
cash, price = 1000, 184.25
shares = int(cash // price)
left = cash - shares * price
print(shares, left)  # 5 78.75

Los floats son aproximaciones

Un float guarda un número en binario, y la mayoría de los decimales como 0.1 no tienen forma binaria exacta. Python guarda el más cercano, y por eso aparecen errores diminutos. Pasa en todos los lenguajes y no es un fallo de Python. La regla para un quant: nunca compares floats con ==. Usa math.isclose, que admite una pequeña tolerancia.

# Floats are approximate: compare with isclose, not ==
import math

print(0.1 + 0.2)                      # 0.30000000000000004
print(0.1 + 0.2 == 0.3)               # False
print(math.isclose(0.1 + 0.2, 0.3))   # True

Redondear al tick

round(x, n) redondea a n decimales. Los mercados solo aceptan precios en múltiplos de un tick (por ejemplo, 0,05): divide entre el tick, redondea a un número entero de ticks y vuelve a multiplicar. Ten en cuenta también que round lleva una mitad exacta al par más cercano: round(2.5) es 2 y round(3.5) es 4.

# Snap a price to the nearest 5-cent tick
price, tick = 184.267, 0.05
ticks = round(price / tick)
print(ticks, ticks * tick)     # 3685 184.25
print(round(2.5), round(3.5))  # 2 4

El dinero en centavos enteros

Como los floats son aproximados, los sistemas que deben ser exactos guardan el dinero como un número entero de centavos. Para convertir, multiplica por 100 y redondea. int() solo corta los decimales, así que 19.99 * 100, que en realidad es 1998.9999999999998, perdería un centavo.

# Dollars to integer cents: round, do not truncate
amount = 19.99
print(amount * 100)          # 1998.9999999999998
print(int(amount * 100))     # 1998  (a cent is lost)
print(round(amount * 100))   # 1999
  • Recuentos (acciones, lotes, días): int.
  • Precios, rendimientos y ratios: float, comparados con math.isclose.
  • Dinero exacto: centavos enteros (o el módulo decimal).

A continuación: cadenas y f-strings, donde convertirás estos números en texto legible como AAPL 184.25 x 184.50.

Lab: qué se califica

  • Contar las acciones enteras que compra un presupuesto con shares_for_cash25 pts
  • Hallar el efectivo restante con leftover_cash25 pts
  • Ajustar un precio al tick más cercano con round_to_tick25 pts
  • Convertir dólares a centavos enteros exactos con cents25 pts
Explorador · lab-2-1
▾ lab-2-1
…
bash · en el navegador
learner@quantcraft:~/lab-2-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-2-1 vuelve a los archivos iniciales y se limpia el terminal. Tu solución actual se perderá: no se puede deshacer.

Se restablecerá
  • main.py → código inicial
  • Historial del terminal y salida de pruebas
  • Cambios sin enviar
Se conservará
  • Mejor puntuación del lab
  • Tu XP y tu racha
  • Progreso de la lección y notas

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub