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

الأعداد الصحيحة والعشرية

الموضع في المسارالوحدة 1 من 11 · الموضوع 2 من 33
1.2 الأعداد الصحيحة والعشرية
—درجة المختبر— / 100إجمالي XP—التتابع—

الأعداد الصحيحة والعشرية

تقدّم Python نوعين من الأعداد للعمل اليومي. int هو عدد صحيح مثل 200 سهم. وfloat هو عدد عشري مثل 184.25 وهو سعر. تخبرك type() بنوع القيمة. الكميات المعدودة (الأسهم، اللوطات، الأيام) أعداد int، أما الأسعار والعوائد والنسب فهي float.

shares = 200
price = 184.25
print(type(shares), type(price))  # <class 'int'> <class 'float'>

ثلاثة أنواع من القسمة

تعمل + و- و* كما تتوقع. أما القسمة فلها ثلاثة أشكال. / تُرجع دائمًا float حتى في 10 / 2 (أي 5.0). و// هي القسمة الصحيحة: تقسم ثم تُقرّب للأسفل إلى عدد صحيح. و% تعطي الباقي. و** ترفع العدد إلى قوة.

# Division, floor division, remainder and power
print(7 / 2)    # 3.5
print(7 // 2)   # 3
print(7 % 2)    # 1
print(2 ** 10)  # 1024
«الأرضية» تعني للأسفلتُقرّب // نحو سالب ما لا نهاية، لذا -7 // 2 تساوي -4 وليس -3. مع الأعداد الموجبة يبدو الأمر كحذف الكسور، أما مع السالبة فلا.

كم سهمًا كاملًا يمكنك شراؤه؟

تجيب القسمة الصحيحة عن سؤال «كم مرة يتسع هذا؟». مع نقد قدره 1,000 وسعر 184.25، فإن cash // price هو عدد الأسهم الكاملة، وcash - shares * price هو المتبقي. مع الأعداد العشرية تُرجع // قيمة float (5.0)، فلفّها بـint() عندما تحتاج عددًا حقيقيًا.

# Whole shares for a cash budget, and the cash left over
cash, price = 1000, 184.25
shares = int(cash // price)
left = cash - shares * price
print(shares, left)  # 5 78.75

الأعداد العشرية تقريبية

يخزّن float العدد بالنظام الثنائي، ومعظم الأعداد العشرية مثل 0.1 ليس لها تمثيل ثنائي دقيق. تحتفظ Python بأقرب قيمة، فتظهر أخطاء صغيرة جدًا. يحدث هذا في كل اللغات وليس خللًا في Python. القاعدة للمحلل الكمّي: لا تقارن الأعداد float باستخدام ==. استخدم math.isclose التي تسمح بهامش تسامح صغير.

# Floats are approximate: compare with isclose, not ==
import math

print(0.1 + 0.2)                      # 0.30000000000000004
print(0.1 + 0.2 == 0.3)               # False
print(math.isclose(0.1 + 0.2, 0.3))   # True

التقريب إلى أقرب تيك

تقرّب round(x, n) إلى n منازل عشرية. لا تقبل البورصات إلا أسعارًا على تيك (مثلًا كل 0.05)، لذا اقسم على التيك وقرّب إلى عدد صحيح من التيكات ثم اضرب مرة أخرى. ولاحظ أن round ترسل النصف التام إلى أقرب عدد زوجي: round(2.5) تساوي 2 وround(3.5) تساوي 4.

# Snap a price to the nearest 5-cent tick
price, tick = 184.267, 0.05
ticks = round(price / tick)
print(ticks, ticks * tick)     # 3685 184.25
print(round(2.5), round(3.5))  # 2 4

المال بالسنتات الصحيحة

بما أن الأعداد float تقريبية، تحتفظ الأنظمة التي تتطلب الدقة بالمال على شكل عدد صحيح من السنتات. للتحويل اضرب في 100 ثم قرّب. تقتطع int() الكسور فقط، لذا فإن 19.99 * 100 وهي في الحقيقة 1998.9999999999998 ستفقد سنتًا.

# Dollars to integer cents: round, do not truncate
amount = 19.99
print(amount * 100)          # 1998.9999999999998
print(int(amount * 100))     # 1998  (a cent is lost)
print(round(amount * 100))   # 1999
  • الكميات المعدودة (الأسهم، اللوطات، الأيام): int.
  • الأسعار والعوائد والنسب: float وتُقارن بـmath.isclose.
  • المال الدقيق: سنتات صحيحة (أو الوحدة decimal).

التالي: السلاسل النصية وf-strings، حيث تحوّل هذه الأعداد إلى نص مقروء مثل AAPL 184.25 x 184.50.

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

  • احسب عدد الأسهم الكاملة التي تشتريها ميزانية باستخدام shares_for_cash25 نقطة
  • أوجد النقد المتبقي باستخدام leftover_cash25 نقطة
  • اضبط السعر على أقرب تيك باستخدام round_to_tick25 نقطة
  • حوّل الدولارات إلى سنتات صحيحة دقيقة باستخدام cents25 نقطة
المستكشف · lab-2-1
▾ lab-2-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-2-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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