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

الوحدات والاستيراد

الموضع في المسارالوحدة 1 من 11 · الموضوع 20 من 33
1.20 الوحدات والاستيراد
—درجة المختبر— / 100إجمالي XP—التتابع—

إعادة استخدام الكود بالاستيراد

الوحدة (module) ملف بايثون يمكن لكود آخر استخدام أسمائه (دوال وثوابت وأصناف). يحمّل import math الوحدة math من المكتبة القياسية ويجعلها متاحة بهذا الاسم: فتكتب math.sqrt(2). تأتي بايثون بمئات الوحدات، وما تثبّته لاحقًا (مثل numpy) يُستورد بالطريقة نفسها. ضع عمليات الاستيراد في أعلى الملف ليرى القارئ فورًا ما يعتمد عليه الملف.

import math
import statistics

# Use a name from a module with module.name
print(math.sqrt(252))                     # 15.874507866387544
print(round(math.sqrt(252), 2))           # 15.87

returns = [0.01, -0.02, 0.015, 0.0]
print(round(statistics.stdev(returns), 4))  # 0.0155

from ... import والأسماء المستعارة

تجلب from datetime import date اسمًا واحدًا فقط، فتكتب date(2025, 1, 2) بلا بادئة. ويعطي import numpy as np الوحدة اسمًا مستعارًا أقصر، وهو عُرف ستراه في كل مكان. تجنّب from module import * فهو يلقي أسماء مجهولة في ملفك وقد يستبدل أسماءك بصمت. فضّل الأسماء الواضحة، واستخدم البادئة حين تُظهر المصدر بجلاء.

from datetime import date
from math import sqrt as square_root
import statistics as stats

# Only the names you asked for are imported
start = date(2025, 1, 2)
end = date(2025, 3, 3)
print((end - start).days)                  # 60
print(square_root(16))                     # 4.0
print(stats.mean([1.0, 2.0, 3.0]))         # 2.0

وحداتك الخاصة

أي ملف .py هو وحدة. فإذا كان fees.py بجانب main.py ويعرّف commission فيمكن لـmain.py أن يكتب import fees ويستدعي fees.commission(...). وعند تشغيل ملف مباشرةً تجعل بايثون __name__ فيه "__main__"، وعند استيراده يكون __name__ اسم الوحدة. لذلك فإن الحارس if __name__ == "__main__": يجعل الكود يعمل فقط عند تنفيذ الملف لا عند استيراده، فتبقى العروض والاختبارات بعيدة عن الطريق.

# fees.py
RATE = 0.001

def commission(notional):
    return notional * RATE

if __name__ == "__main__":
    print(commission(10000))   # runs only with: python fees.py

# main.py (next to fees.py)
import fees

print(fees.commission(50000))  # 50.0
print(__name__)                # __main__

أين تبحث بايثون، وفخ شائع

عند import name تبحث بايثون أولًا في مجلد السكربت الجاري تشغيله، ثم في المكتبة القياسية والحزم المثبّتة (القائمة هي sys.path). وتفوز أول مطابقة. ولهذا فإن ملفًا لك باسم random.py أو statistics.py يحجب الوحدة الحقيقية، فيحمّل import random ملفك ويفشل بطرق محيّرة. لا تسمِّ ملفاتك بأسماء وحدات المكتبة القياسية. وتجنّب أيضًا وحدتين تستورد كل منهما الأخرى في الأعلى (استيراد دائري)؛ انقل الجزء المشترك إلى وحدة ثالثة.

import sys
import random

# Imported modules are remembered in sys.modules; sys.path is the search list
print("random" in sys.modules)               # True
print(random.__name__)                       # random
print(len(sys.path) > 0)                     # True

# A quick tour of useful standard-library modules
import collections, datetime, itertools, pathlib
print(collections.Counter("AAPL")["A"])      # 2
print(datetime.date(2025, 1, 2).weekday())   # 3  (Thursday; Monday is 0)
انظر أولًا في المكتبة القياسيةقبل أن تكتب بنفسك حساب التواريخ أو الإحصاء أو معالجة CSV وJSON، تحقق هل تفعل ذلك وحدة قياسية (datetime وstatistics وcsv وjson وcollections وitertools وpathlib). كود المكتبة المُختبَر أكثر أمانًا في الغالب من نسخة منزلية سريعة، ويعدّ المختبر التحليل اليدوي للتواريخ خطأً في الأسلوب.
  • import module ثم module.name؛ وfrom module import name لاسم واحد؛ وimport module as short لاسم مستعار.
  • تُوضع الاستيرادات في الأعلى؛ وتجنّب import *.
  • لا تسمِّ ملفاتك بأسماء وحدات قياسية؛ واستخدم if __name__ == "__main__": للكود الذي يجب أن يعمل مباشرةً فقط.

التالي: الحزم وتخطيط المشروع، كيف تنظّم عدة وحدات في مجلدات تُستورد بنظافة.

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

  • قِس التقلب باستخدام daily_vol25 نقطة
  • حوّل التقلب إلى سنة باستخدام annualize_vol25 نقطة
  • عُدّ الأيام بين تاريخين باستخدام days_between25 نقطة
  • ميّز أيام العمل من العطلات الأسبوعية باستخدام is_business_day25 نقطة
المستكشف · lab-20-1
▾ lab-20-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-20-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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