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

Git 基础

路线进度模块 1/11 · 主题 23/33
1.23 Git 基础
—实验得分— / 100总 XP—连续天数—

可以回溯的历史

Git 把项目的历史记录为一系列提交(commit):对所有被跟踪文件的快照,每个提交都有作者、时间和说明。有了它,你可以看到改了什么、为什么改,放心尝试新想法,并回到曾经可用的版本。受 Git 管理的文件夹叫仓库(repository)。量化工作非常依赖它:只有能准确说出结果由哪个版本的代码产生,结果才值得信赖。

# Start tracking a project (once)
git init

# See what changed, stage it, record it
git status
git add main.py README.md
git commit -m "Add the first backtest loop"

# Look back
git log --oneline
git diff                      # changes not yet staged

改动所在的三个地方

改动会经过三个区域。你在工作区编辑文件;git add 把选中的改动复制到暂存区(正在准备的下一个快照);git commit 把暂存的快照记录进仓库历史。这样即使你改了很多文件,也能只把相关的改动一起提交。git status 会显示每个文件所处的区域:已修改、已暂存,或未跟踪(新文件,Git 还不认识)。

# git status --porcelain prints two status letters, a space, then the path
status = """ M main.py
A  notes.md
?? scratch.txt
D  old.py"""

for line in status.splitlines():
    code, path = line[:2], line[3:]
    print(repr(code), path)
# ' M' main.py     (modified, not staged)
# 'A ' notes.md    (new, staged)
# '??' scratch.txt (untracked)
# 'D ' old.py      (deleted, staged)

分支

分支(branch)是一条提交链上的可移动名字。为每个想法或修复建一个分支(git switch -c fee-model),随意提交,等它可用后用 git merge 合并回主线(通常在 main 分支上执行)。分支名可以包含字母、数字、-、_、/ 和 .,但不能有空格,也不能含 ~ ^ : ? * [ \ 中的任何字符,不能以 / 开头或结尾,也不能以 . 结尾。当两个分支修改了同样的行时,Git 会提示冲突,需要你手动解决。

# Try an idea on its own branch, then bring it back
git switch -c fee-model
git commit -am "Use tiered fees"
git switch main
git merge fee-model

# List branches (the current one has a star)
git branch

哪些不该提交,以及如何撤销

.gitignore 文件列出 Git 不应跟踪的模式:.venv/(文件夹,末尾加斜杠)、*.log(匹配通配符的任何文件)、secrets.env。不要提交虚拟环境、缓存、大型数据文件,尤其是 API 密钥这类机密:一旦提交,即使以后删除也会留在历史中。撤销时,git restore 文件 会丢弃某个文件未提交的修改,git revert <commit> 会新增一个提交来抵消旧提交,在共享分支上很安全。git push 和 git pull 与远程副本(如 GitHub 上的仓库)交换提交。

# .gitignore
.venv/
__pycache__/
*.log
secrets.env

# Undo safely
git restore main.py            # drop uncommitted edits to one file
git revert 3f2a9c1             # new commit that cancels an old one

# Share
git push origin main
git pull
小步提交,说明原因每个提交只含一个逻辑改动,并附上说明“做了什么、为什么”的消息(如“将订单规模限制为成交量的 5%”,而不是“修了点东西”)。小提交便于审查和回退,也让 git log --oneline 一目了然。如果密钥或密码曾进入提交,要当作已泄露处理:先作废,再从历史中清除。
  • git init、git status、git add、git commit -m "..."、git log --oneline。
  • 每个想法一个分支:git switch -c name,然后 git merge。
  • 用 .gitignore 排除 .venv/、缓存、数据和机密;用 restore 或 revert 撤销。

下一节:Jupyter 笔记本,交互式探索数据,以及如何在 Git 下保持整洁。

实验:评分内容

  • 用 parse_status 对 git status 报告中的文件分类25 分
  • 用 parse_log 解析 git log --oneline 的输出25 分
  • 用 is_valid_branch_name 按 Git 规则检查分支名25 分
  • 用 not_ignored 把 .gitignore 应用到文件列表25 分
资源管理器 · lab-23-1
▾ lab-23-1
…
bash · 浏览器内
learner@quantcraft:~/lab-23-1$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

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

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

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

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

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