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

حلقات for ودالة range

الموضع في المسارالوحدة 1 من 11 · الموضوع 6 من 33
1.6 حلقات for ودالة range
—درجة المختبر— / 100إجمالي XP—التتابع—

تكرار كتلة لكل عنصر

حلقة for تنفّذ كتلتها المزاحة مرة لكل عنصر في مجموعة، وتمنح كل عنصر اسمًا في تلك الدورة. المجموعة هنا قائمة تُكتب بأقواس مربعة وفواصل (للقوائم موضوعها الخاص لاحقًا). تشبه صياغتها صياغة if: نقطتان في نهاية السطر الأول وكتلة مزاحة تحته.

prices = [184.25, 184.5, 184.0]
for price in prices:
    print(price)  # 184.25, then 184.5, then 184.0

range: العدّ دون قائمة

تُنتج range(n) الأعداد الصحيحة من 0 إلى n - 1: قيمة التوقف غير مشمولة، ولهذا تحتوي range(5) على خمسة أعداد. تبدأ range(start, stop) من حيث تحدد، وتقفز range(start, stop, step) بمقدار step ويمكن أن يكون سالبًا للعدّ التنازلي. استخدمها عندما تحتاج تكرار شيء عددًا من المرات أو المرور على المواضع.

# range counts, and stops before the stop value
print(list(range(5)))          # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3)))   # [2, 5, 8]
print(list(range(3, 0, -1)))   # [3, 2, 1]

نمط المجمِّع

تتبع معظم الحلقات نمطًا واحدًا: ابدأ متغيرًا قبل الحلقة، وحدّثه داخلها، واستخدمه بعدها. total += price * quantity اختصار لـtotal = total + price * quantity. هنا كل عنصر في القائمة زوج، وسطر الحلقة يسمّي النصفين معًا (ستشرح المواضيع التالية فك التعبئة هذا كما ينبغي).

# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
    total += price * quantity
print(total)  # 64525.0

المرور على المواضع

أحيانًا تحتاج إلى مقارنة كل عنصر بالذي قبله. مرّ على المواضع باستخدام range(1, len(prices)): تبدأ من 1، فيكون prices[i - 1] صالحًا دائمًا. تعطي len() عدد العناصر، ويأخذ prices[i] العنصر في الموضع i بدءًا من العدّ 0.

# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
    if prices[i] > prices[i - 1]:
        ups += 1
print(ups)  # 2

بناء قائمة أثناء الحلقة

لجمع نتيجة واحدة في كل دورة، ابدأ بقائمة فارغة [] واستدعِ .append(value) داخل الحلقة. هكذا تُبنى سلالم الأسعار والمجاميع التراكمية والإشارات اليومية. تُعاد القائمة (أو تُستخدم) بعد انتهاء الحلقة.

# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
    ladder.append(start + level * tick)
print(ladder)  # [184.0, 184.25, 184.5, 184.75]
متغير الحلقة يبقى بعدهابعد انتهاء الحلقة يحتفظ متغيرها بآخر قيمة له، وتبقى أيضًا أي متغيرات عُيِّنت داخلها. وإذا كانت المجموعة فارغة فلن تُنفَّذ الكتلة أبدًا، فلن يوجد متغير أُنشئ داخلها فقط: هيِّئه قبل الحلقة.

التالي: حلقات while وbreak وcontinue للتكرار حتى يتغير شرط بدلًا من عدد ثابت من العناصر.

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

  • اجمع قيمة عدة صفقات باستخدام total_notional25 نقطة
  • ارسم مستويات الأسعار باستخدام price_ladder25 نقطة
  • احسب عدد الأيام التي ارتفع فيها السعر باستخدام count_up_days25 نقطة
  • احتفظ بمجموع تراكمي باستخدام running_total25 نقطة
المستكشف · lab-6-1
▾ lab-6-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-6-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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