σμ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 Academy学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python 学习路线›模块 1 · 面向量化的 Python 基础›主题 1.4·~30分钟入门

布尔值与比较

路线进度模块 1/11 · 主题 4/33
1.4 布尔值与比较
—实验得分— / 100总 XP—连续天数—

True 与 False

布尔值(bool)只有两个取值:True 和 False,首字母大写。每条交易规则最终都归结为其中之一:“市场是否交叉?”“这笔订单我们付得起吗?”比较两个值会得到一个布尔值,所以 ask > bid 还不是一个决定,而是一个可以保存、打印和组合的值。

bid, ask = 184.25, 184.5
print(ask > bid)        # True
print(type(ask > bid))  # <class 'bool'>

比较运算符

Python 用 ==(等于)、!=(不等于)、<、<=、>、>= 进行比较。单个 = 是赋值而不是比较:price = 5 保存一个值,而 price == 5 是在提问。比较可以连写:low <= price <= high 读起来就像数学式,并一次检查两侧。

# Comparison operators give True or False
price = 184.4
print(price == 184.4)         # True
print(price != 184.25)        # True
print(184.25 <= price < 185)  # True (chained)

组合条件:and、or、not

a and b 仅当两者都为真时才是 True。a or b 只要有一个为真就是 True。not a 取反。组合起来就能表达真实的规则,例如“市场开放、该股票未停牌,并且我们有足够的现金”。

# Combine conditions with and, or, not
market_open, halted, cash = True, False, 500.0
can_buy = market_open and not halted and cash >= 184.5
print(can_buy)               # True
print(halted or cash < 100)  # False

and 和 or 采用短路求值:一旦结果已定,Python 就停止,不再计算后面的部分。这可以用作保护:把安全的检查放在前面,风险较大的检查才只会在允许时执行。

# Short-circuit: the division never runs when quantity is 0
quantity = 0
print(quantity > 0 and 100 / quantity > 1)  # False

真值判断

任何值都可以当作条件。0、0.0、空文本 "" 和 None 视为假,几乎其他所有值都视为真。bool(value) 可以看到 Python 如何理解一个值。注意:quantity and price > 0 可能返回 0 而不是 False,因此在需要真正的 bool 时请把比较完整写出来。

# Zero, empty text and None count as False
print(bool(0), bool(0.0), bool(""), bool(None))  # False False False False
print(bool(200), bool("AAPL"))                    # True True
直接返回条件本身比较本身就是 True 或 False。写 return quantity > 0,不要写一个返回 True 的 if 再加一个返回 False 的分支:更短,也不会自相矛盾。

比较 float 与 None

float 之间用 == 比较有风险,因为存在舍入误差(见整数与浮点数):想表达“足够相等”请用 math.isclose。== 比较的是值;is 询问两个名字是否指向完全相同的对象,你只需要在一种情况下用它:x is None,用来判断“没有值”。

# Floats need a tolerance; None is tested with "is"
import math

print(0.1 + 0.2 == 0.3)              # False
print(math.isclose(0.1 + 0.2, 0.3))  # True
fill_price = None
print(fill_price is None)            # True

下一节:条件语句,由布尔值决定执行哪些代码行:if、elif 和 else。

实验:评分内容

  • 用 is_crossed 检测交叉市场25 分
  • 用 within_band 检查价格是否在区间内25 分
  • 用 can_trade 组合交易条件25 分
  • 用 is_valid_order 校验订单25 分
资源管理器 · lab-4-1
▾ lab-4-1
…
bash · 浏览器内
learner@quantcraft:~/lab-4-1$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

lab-4-1 中的所有内容将恢复为初始文件,终端也会被清空。你当前的解答将丢失,且无法撤销。

将被重置
  • main.py → 初始代码
  • 终端历史与测试输出
  • 未提交的更改
将被保留
  • 实验最高得分
  • 你的 XP 与连续天数
  • 讲解进度与笔记

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续