ابحث عن العدد الذي يصفّر الخطأ
يسهل حساب سعر السند من العائد، أما العائد من السعر فلا. تحل f(y)=P(y)-سعر السوق=0 بالبحث. تتبع طريقة نيوتن المماس: من تخمين y تقفز إلى y-f(y)/f'(y)، وقرب الجواب يتضاعف عدد الأرقام الصحيحة تقريبًا في كل خطوة فتكفي بضع تكرارات، لكنها تحتاج المشتقة وقد تضل من بداية سيئة. أما التنصيف فيحتاج مجالًا [lo,hi] تتغير فيه إشارة f: ينصّفه مرة بعد مرة فلا يفشل، لكنه يكسب رقمًا ثنائيًا واحدًا في الخطوة، أي 40 خطوة لتقليص مجال عرضه 65 تحت 10⁻¹⁰. وتحتفظ طريقة برنت scipy.optimize.brentq بأمان المجال وتضيف خطوات استيفاء، وتحتاج عادة ما يقارب بضع تنصيفات من استدعاءات الدالة. ومع full_output=True تعيد أيضًا سجلًا يقول حقل function_calls فيه كم مرة قيّمت دالتك.
تقلب الأداة نفسها صيغة بلاك–شولز. يزداد سعر الخيار الشرائي مع التقلب فتطلب من brentq لكل سعر معلن قيمة σ في [10⁻⁴,5] التي تعيده. ولا يصح ذلك إلا إذا وقع السعر بدقة بين القيمة الجوهرية max(S-Ke^(-rT),0) وسعر السهم S؛ وخارج ذلك لا يوجد تقلب والجواب الصحيح NaN لا استثناء، كي لا يوقف سعر واحد سيئ ابتسامة كاملة. في 9 أكتوبر 2026 عائد الخزانة لعشر سنوات 5.24% فسند بكوبون سنوي 5% لعشر سنوات يكلف 97.121. يستعيد نيوتن العائد في 4 تكرارات وبرنت في 10 استدعاءات للدالة والتنصيف في 40. وتعود التقلبات الضمنية 10% و20% و40% و80% بدقة أفضل من 10⁻⁶. ومعرفة كلفة كل طريقة ومتى تفشل هي ما يتيح اختيار المناسبة لمنحنى كامل من السندات أو سلسلة خيارات.
- نيوتن سريع لكنه يحتاج مشتقة وبداية معقولة: أخذ 4 خطوات هنا.
- التنصيف لا يفشل لكنه بطيء: 40 خطوة لمجال عرضه 65.
- استعمل
brentqوعالج الحالات المستحيلة: مجال مع استيفاء، وNaN حين لا يوجد حل.
المختبر: ما الذي يُقيَّم
- سعر سند10 نقطة
- نيوتن يدويًا20 نقطة
- التنصيف يدويًا15 نقطة
- برنت مع scipy15 نقطة
- ثلاثة حلّالات جنبًا إلى جنب10 نقطة
- التقلبات الضمنية15 نقطة
- دراسة البيانات الحقيقية15 نقطة