σμ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.21·~40 دمبتدئ

الحزم وهيكل المشروع

الموضع في المسارالوحدة 1 من 11 · الموضوع 21 من 33
1.21 الحزم وهيكل المشروع
—درجة المختبر— / 100إجمالي XP—التتابع—

من ملف إلى مجلد من الوحدات

لا يكفي ملف واحد حين يكبر المشروع. الحزمة (package) مجلد من الوحدات تستطيع بايثون استيراده كوحدة واحدة. علّم المجلد بملف اسمه __init__.py (يمكن أن يكون فارغًا) فيصبح كل ملف .py بداخله وحدة في الحزمة، تُسمّى بالنقاط: quant/pricing.py هو quant.pricing، وquant/data/loaders.py هو quant.data.loaders. والمجلدات داخل الحزمة حزم فرعية وتحتاج كل منها إلى __init__.py خاص بها.

# A small project on disk
#
# quant-tools/
#   pyproject.toml
#   README.md
#   quant/
#     __init__.py
#     pricing.py
#     data/
#       __init__.py
#       loaders.py
#   tests/
#     test_pricing.py

# quant/pricing.py
def mid(bid, ask):
    return (bid + ask) / 2

# anywhere else in the project
from quant.pricing import mid
import quant.data.loaders

print(mid(184.0, 185.0))  # 184.5

تخطيط يتسع للنمو

أبقِ الكود القابل للاستيراد في مجلد حزمة واحد باسم المشروع، وأبقِ كل شيء آخر بجانبه لا بداخله: الاختبارات في tests/، وملف README.md يشرح المشروع، وملف pyproject.toml يسمّيه ويسرد اعتماداته، والبيانات أو الدفاتر في مجلداتها. وتُسمّى ملفات الاختبار test_*.py لتجدها أدوات مثل pytest. والوحدات الصغيرة المركّزة ذات الأسماء الواضحة (pricing.py وloaders.py) أسهل اختبارًا وإعادة استخدامًا من utils.py طويل واحد.

# pyproject.toml (names the project and its dependencies)
#
# [project]
# name = "quant-tools"
# version = "0.1.0"
# requires-python = ">=3.11"
# dependencies = ["numpy"]

# tests/test_pricing.py: found automatically because of the name
from quant.pricing import mid

def test_mid():
    assert mid(184.0, 185.0) == 184.5

الاستيراد داخل الحزمة

داخل الحزمة يمكنك الاستيراد بالمسار الكامل من الأعلى (from quant.pricing import mid، استيراد مطلق) أو نسبةً إلى الوحدة الحالية (from .pricing import mid، نقطة للحزمة نفسها ونقطتان لأصلها، استيراد نسبي). والاستيراد المطلق أوضح عادةً. يُنفَّذ __init__.py عند أول استيراد للحزمة، فيمكنه إعادة تصدير الأسماء التي يحتاجها المستخدمون (from .pricing import mid) فيعمل import quant; quant.mid(...). شغّل كود الحزمة بـpython -m quant.data.loaders لا بـpython quant/data/loaders.py لتُحَلّ الأسماء ذات النقاط.

# quant/__init__.py: runs on the first "import quant"
from .pricing import mid          # relative: same package

__all__ = ["mid"]                 # what "from quant import *" would give

# quant/data/loaders.py
from quant.pricing import mid     # absolute: always starts at the top
from .. import pricing            # relative: two dots = the parent package

# In a terminal, from the project folder:
#   python -m quant.data.loaders   (runs the module as part of the package)
#   pytest -q                      (finds tests/test_*.py)
# A file path and its module name are two spellings of one thing
path = "quant/data/loaders.py"
name = path[:-3].replace("/", ".")
print(name)                          # quant.data.loaders
print(name.split(".")[0])            # quant  (the top-level package)

# __init__.py stands for its folder
print("quant/__init__.py"[:-3].replace("/", "."))  # quant.__init__ -> the package is "quant"
غياب __init__.py فخّ صامتتستطيع بايثون أحيانًا استيراد مجلد بلا __init__.py («حزمة فضاء أسماء»)، لكن الأدوات ومشغّلات الاختبار والمثبّتات تتصرف معه بلا اتساق، وتفشل في أماكن أخرى استيرادات كانت تعمل على جهازك. أعطِ كل مجلد حزمة ملف __init__.py. ويطلب منك المختبر العثور على المجلدات التي تحتوي كودًا ولا تملك واحدًا.
  • الحزمة مجلد فيه __init__.py؛ وquant/data/loaders.py هو الوحدة quant.data.loaders.
  • ضع الكود في الحزمة؛ والاختبارات وREADME وpyproject.toml والبيانات بجانبها.
  • فضّل الاستيراد المطلق؛ وشغّل كود الحزمة بـpython -m package.module.

التالي: البيئات الافتراضية وpip، ليحصل كل مشروع على المكتبات التي يحتاجها بالضبط.

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

  • حوّل مسار ملف إلى اسم وحدة باستخدام module_name25 نقطة
  • اسرد الوحدات القابلة للاستيراد في مشروع باستخدام find_modules25 نقطة
  • اكتشف المجلدات التي تفتقر إلى __init__.py باستخدام missing_init25 نقطة
  • اكتب جملة استيراد وحدة باستخدام import_line25 نقطة
المستكشف · lab-21-1
▾ lab-21-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-21-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-21-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

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

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

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