σμ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
  • 日本語
  • 中文
σμ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
  • 日本語
  • 中文
Market Structure 学习路线›模块 4 · 规则、成本与数据›主题 4.4·~1小时中级

综合项目:从价格 K 线还原一个交易日

路线进度模块 4/4 · 主题 4/4
4.4 综合项目:从价格 K 线还原一个交易日
—实验得分— / 100总 XP—连续天数—

从价格 K 线读懂一个交易日

日 K 线用五个数字概括整个交易时段:开盘价、最高价、最低价、收盘价和成交量。由此可以还原一天的故事:价格隔夜移动了多少(昨日收盘与今日开盘之间的跳空)、当日波动区间有多宽,以及成交量是否异常。这些计算每一个都只是对表格整列的一行运算。

import pandas as pd

bars = pd.read_csv("data/AAPL.csv", index_col="date", parse_dates=True)
prev_close = bars["close"].shift(1)   # yesterday's close, lined up with today's row
gap = bars["open"] / prev_close - 1   # the overnight gap

判断今天的成交量是否异常时,只能与今天之前的交易日比较。单独使用 rolling(20).mean() 会把今天也算进去,让这一天部分地与自己比较;先调用 shift(1) 就把窗口向前移了一天。使用被判断当天的信息就是前视偏差(look-ahead),是回测最常见的“骗人”方式。

把故事展示出来

qc_chart 辅助函数把 K 线数据变成交互式图表。传入若干系列的列表(K 线、折线、柱状图)和可选的标记,图表会显示在“图表”标签中;测试读取的是你传入的数据,而不是图片。

import qc_chart

qc_chart.show(
    [qc_chart.candles(recent, name="Price"), qc_chart.line(average, name="20-day average")],
    markers=qc_chart.markers({"2026-05-12": "+4.1%"}),
)
这份数据隐藏了什么价格已按拆股和分红复权,所以没有未复权的原始收盘价,拆股也不会表现为跳空。文件里只有仍然存在的公司,已退市的公司缺失;日 K 线还隐藏了交易时段内部发生的事,包括开盘和收盘竞价。大幅跳空是需要追查的线索(财报、新闻),而不是结论。

实验:评分内容

  • 每日特征25 分
  • 最大的跳空25 分
  • 不含前视偏差的成交量激增25 分
  • 绘制图表25 分
资源管理器 · lab-ms-11
▾ lab-ms-11
▾ data
…
bash · 浏览器内
learner@quantcraft:~/lab-ms-11$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

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

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

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

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

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