σμ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 تاريخ المشروع كسلسلة من الإيداعات (commits): لقطات لكل الملفات المتتبَّعة، لكل منها مؤلف ووقت ورسالة. به ترى ما تغيّر ولماذا، وتجرّب فكرة بلا خوف، وتعود إلى نسخة كانت تعمل. والمجلد الخاضع لـGit هو مستودع. ويعتمد العمل الكمي على هذا كثيرًا: فالنتيجة لا يوثق بها إلا إذا استطعت أن تقول بالضبط أي نسخة من الكود أنتجتها.

# 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)

الفروع

الفرع اسم متحرك لخط من الإيداعات. أنشئ فرعًا لكل فكرة أو إصلاح (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. استبعد البيئات الافتراضية وذاكرات التخزين المؤقت وملفات البيانات الكبيرة، وقبل ذلك كله الأسرار كمفاتيح الواجهات البرمجية: فكل ما يُودَع يبقى في التاريخ حتى لو حذفته لاحقًا. وللتراجع، يتخلص git restore file من التعديلات غير المودعة في ملف، ويضيف 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.

المختبر: ما الذي يُقيَّم

  • صنّف ملفات تقرير git status باستخدام parse_status25 نقطة
  • اقرأ قائمة git log --oneline باستخدام parse_log25 نقطة
  • تحقق من اسم فرع وفق قواعد Git باستخدام is_valid_branch_name25 نقطة
  • طبّق .gitignore على قائمة ملفات باستخدام not_ignored25 نقطة
المستكشف · 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 والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub