σμ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.3·~30分钟入门

字符串与 f-string

路线进度模块 1/11 · 主题 3/33
1.3 字符串与 f-string
—实验得分— / 100总 XP—连续天数—

文本就是字符串

字符串(str)就是文本。可以放在单引号或双引号之间,两者含义相同,选一种风格并保持一致。反斜杠表示转义,例如 \n 是换行。len() 用来统计字符数。字符串是不可变的:不能原地修改,只能生成一个新的字符串。

symbol = "AAPL"
note = 'bid and ask'
print(symbol, len(symbol))  # AAPL 4
print(note)                 # bid and ask

索引与切片

每个字符都有一个从 0 开始计数的位置。text[0] 是第一个字符,text[-1] 是最后一个。切片 text[start:stop] 取从 start 到 stop 之前的字符;省略一侧则一直取到那一端。

# Indexing starts at 0; a slice stops before its end index
ticker = "AAPL.US"
print(ticker[0], ticker[-1])   # A S
print(ticker[:4], ticker[5:])  # AAPL US

清理与拆分文本的方法

方法(method)是附属于某个值、用点号调用的函数。它们返回新的字符串,原字符串保持不变。strip() 去掉文本两侧的空格和换行,upper() 与 lower() 改变大小写,replace(old, new) 替换文本,split(",") 在每个逗号处切开一行,得到一个由片段组成的列表。数据源里到处都是这样的行。

# Clean up a raw line from a data feed
raw = "  aapl,184.25,200 \n"
parts = raw.strip().split(",")
print(parts)             # ['aapl', '184.25', '200']
print(parts[0].upper())  # AAPL
print(float(parts[1]))   # 184.25
# join is the opposite of split; in tests for a piece of text
print("-".join(["AAPL", "MSFT"]))  # AAPL-MSFT
print("AAPL" in "AAPL,MSFT")       # True

f-string 把值放进文本

在起始引号前加一个 f,并在 { 与 } 之间写任意表达式:Python 会计算它,并把结果作为文本插入。这样就不必再用 + 拼接,也不必手动转换数字。花括号里可以放任何有效表达式,甚至是算式。

# f-strings put values straight into text
symbol, bid, ask = "AAPL", 184.25, 184.5
print(f"{symbol} {bid} x {ask}")       # AAPL 184.25 x 184.5
print(f"{symbol} spread {ask - bid}")  # AAPL spread 0.25

格式说明符

花括号内冒号后面的格式说明符决定值的显示方式。.2f 显示两位小数,, 加上千位分隔符,+ 始终显示符号,>8 在宽度 8 内右对齐,.1% 把小数显示为百分比。它们可以组合:+,.2f 表示带符号、千位分隔符和两位小数的金额。

# After the colon, a format spec controls the look
price, pnl, quantity = 184.5, 1234.5, 200
print(f"{price:.2f}")       # 184.50
print(f"{pnl:+,.2f}")       # +1,234.50
print(f"{quantity:>8d}|")   # "     200|"
print(f"{0.0123:.1%}")      # 1.2%
格式化只用于显示格式化后的值是文本,不再是数字。计算时继续使用数字(见整数与浮点数),只在打印或保存文本的那一刻再格式化。

下一节:布尔值与比较,交易规则中的每个判断都由 True 和 False 构成。

实验:评分内容

  • 用 quote_line 把报价写成文本25 分
  • 用 signed_pnl 显示带符号的盈亏25 分
  • 用 normalize_symbol 清理股票代码25 分
  • 用 parse_fill 读取数据源中的成交行25 分
资源管理器 · lab-3-1
▾ lab-3-1
…
bash · 浏览器内
learner@quantcraft:~/lab-3-1$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

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

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

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

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

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