كيف تُحسب التقلبات الضمنية؟
لا توجد صيغة مغلقة للتقلب الضمني. تعرّف إلى كيفية استخراجه بالتكرار من سعر الخيار، مع كود Python وأسباب اختلاف النتائج بين مزودي البيانات.
تُحسب التقلبات الضمنية بالتكرار، لا باستخدام معادلة مباشرة. فلا توجد صيغة مغلقة تحوّل سعر الخيار في السوق إلى رقم للتقلبات. لذلك يقدّر الحاسوب تقلباً مبدئياً، ثم يسعّر الخيار باستخدام نموذج Black-Scholes، ويقارن سعر النموذج بالسعر المعلن، ويكرر العملية إلى أن يتطابق السعران حتى مستوى السنت. يوضح ما يلي المنهج الكامل: دالة التسعير، وحلقة البحث باستخدام Python من المكتبة القياسية، وأسباب نشر مزودين مختلفين أرقاماً مختلفة للعقد نفسه.
لماذا لا توجد صيغة مغلقة للتقلب الضمني
يعمل نموذج Black-Scholes في اتجاه واحد. أدخل سعر الأصل الفوري، وسعر التنفيذ، والمدة المتبقية حتى تاريخ الانقضاء، وسعر الفائدة، والتقلب، فيُرجع سعراً نظرياً. ويمكن رصد خمس من هذه الكميات الست. أما التقلب فلا يمكن رصده مباشرةً. فهو افتراض بشأن مقدار تحرك السهم بين الوقت الحالي وتاريخ الانقضاء.
يعكس المتداولون اتجاه المسألة. يكون السعر معروضاً على الشاشة، بينما يصبح التقلب هو المتغير المجهول. التقلب الضمني هو قيمة التقلب التي تجعل سعر Black-Scholes مساوياً لسعر الخيار في السوق. ويظهر سيغما، أي حد التقلب، داخل دالة التوزيع الطبيعي مرتين، في كل من d1 وd2، ولا يمكن إجراء إعادة ترتيب تعزله. عند هذه النقطة تتوقف الجبرية. ويبدأ البحث العددي. يشرح ما يقيسه التقلب الضمني كيفية تفسيره، بينما تغطي هذه الصفحة الآلية الحسابية.
تجعل خاصيتان في النموذج عملية البحث سهلة. يرتفع السعر النظري لخيار Call كلما ارتفع التقلب، من دون استثناء، كما يتحرك بصورة سلسة. ويمكن تحديد قيمة لا ترتفع إلا باستمرار عبر تضييق نطاق يحيط بها.
يُجري الحاسوب الحل مرة واحدة لكل عقد
الناتج رقم واحد لكل عقد، وليس رقماً واحداً لكل سهم، كما أن العقود على السهم نفسه ضمن فترة الاستحقاق نفسها تعطي نتائج مختلفة. يوضح الرسم كل خيار على سهم Apple (AAPL) بقيت على استحقاقه مدة تتراوح بين 20 و45 يوماً، وتم تداوله في 30 يونيو 2026، بعد تجميع الخيارات بحسب سعر التنفيذ كنسبة من سعر السهم:
استعلام SQL الدقيق وراء كل رقم
WITH toFloat64(strike_price) / toFloat64(underlying_close) AS moneyness
SELECT multiIf(moneyness < 0.90, '0.80-0.90',
moneyness < 0.95, '0.90-0.95',
moneyness < 1.00, '0.95-1.00',
moneyness < 1.05, '1.00-1.05',
moneyness < 1.10, '1.05-1.10',
'1.10-1.20') AS strike_vs_spot,
round(100 * avg(toFloat64(implied_volatility)), 1) AS implied_vol_pct,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND moneyness BETWEEN 0.80 AND 1.20
GROUP BY strike_vs_spot
ORDER BY min(moneyness)عند قراءة سلّم أسعار التنفيذ، حُلّت منطقة 0.80-0.90 إلى 35.5%، ومنطقة 0.95-1.00 إلى 28.1%، ومنطقة 1.10-1.20 إلى 27.3%. شركة واحدة، وجلسة واحدة، و6 إجابة. يُسمّى الانحناء في هذا المنحنى انحراف التقلبات، ولا يمكن لتقلب واحد لكل سهم أن يرسمه.
سعر Black-Scholes الذي يجب أن يطابقه الحل
يمثل S سعر السهم، ويمثل K سعر التنفيذ، ويمثل T المدة حتى تاريخ الانقضاء بالسنوات، ويمثل r معدل الفائدة الخالي من المخاطر. أما N() فهي دالة التوزيع التراكمي للتوزيع الطبيعي المعياري، أي احتمال أن تقع قيمة مسحوبة من التوزيع الطبيعي المعياري تحت نقطة معينة. توفر Python هذا الجزء عبر math.erf، لذا تكفي بيئة التفسير وحدها.
apt-get update && apt-get install -y python3
أضف sudo إلى بداية الأمرين عند استخدام جهاز لا تملك فيه صلاحيات المستخدم الجذر. ثم احفظ هذا الملف باسم iv.py:
import math
def norm_cdf(x):
return 0.5 * (1.0 + math.erf(x / math.sqrt(2.0)))
def bs_call(S, K, T, r, sigma):
if T <= 0.0 or sigma <= 0.0:
return max(S - K, 0.0)
d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
d2 = d1 - sigma * math.sqrt(T)
return S * norm_cdf(d1) - K * math.exp(-r * T) * norm_cdf(d2)
هذا هو النموذج الآجل كاملاً. أدخل إليه تقلباً لتحصل على سعر.
كيفية حساب التقلب الضمني خطوةً بخطوة
طريقة التنصيف هي أول طريقة ينبغي أن تتعلمها. فهي لا تتباعد، ولا تحتاج إلى التفاضل والتكامل.
- احصر الإجابة بين 0.01 (1% سنوياً) و5.0 (500%). تقع كل الخيارات المتداولة ضمن هذا النطاق.
- سعّر الخيار عند نقطة منتصف النطاق.
- إذا تجاوز سعر النموذج السعر المعروض في السوق، فهذا يعني أن التخمين مرتفع جداً: اخفض الحد الأعلى للنطاق إلى نقطة المنتصف. وإذا جاء دونه، فارفع الحد الأدنى إلى نقطة المنتصف.
- توقّف عندما يصبح سعر النموذج ضمن سنت واحد من السعر المعروض.
def implied_vol(price, S, K, T, r, lo=0.01, hi=5.0, tol=0.01):
for _ in range(100):
mid = 0.5 * (lo + hi)
diff = bs_call(S, K, T, r, mid) - price
if abs(diff) < tol:
return mid
if diff > 0.0:
hi = mid
else:
lo = mid
return 0.5 * (lo + hi)
# سهم بسعر $100، وسعر تنفيذ $100، وثلاثة أشهر، ومعدلات فائدة 4%، وسعر معروض $5.00
print(round(implied_vol(5.00, 100.0, 100.0, 0.25, 0.04), 4))
شغّل python3 iv.py. سيطبع نحو 0.226، أي تقلباً ضمنياً يقارب 22.6% سنوياً لذلك السعر الافتراضي. في كل دورة، ينخفض نطاق البحث إلى النصف. وبما أن نطاقاً عرضه 4.99 يصبح، بعد تنصيفه عشرين مرة، أضيق من 0.00001، فإن الحد الأقصى البالغ 100 دورة لا يفرض أي قيد عملي.
لماذا يتقارب أسلوب نيوتن-رافسون بوتيرة أسرع، وأين يتعثر
يهدر أسلوب التنصيف معلومات يمتلكها النموذج بالفعل. تمثل Vega مقدار تغير سعر الخيار لكل وحدة تغير في التقلب، ويعطيها نموذج Black-Scholes بصيغة مغلقة. يتعامل أسلوب نيوتن-رافسون معها باعتبارها ميل المنحنى: يقيس خطأ التسعير، ويقسمه على vega، ثم يغيّر التقدير بهذه المقدار.
def bs_vega(S, K, T, r, sigma):
d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
return S * math.sqrt(T) * math.exp(-0.5 * d1 * d1) / math.sqrt(2.0 * math.pi)
def implied_vol_newton(price, S, K, T, r, sigma=0.5):
for _ in range(20):
v = bs_vega(S, K, T, r, sigma)
if v < 1e-8:
return None # لم يعد هناك ميل؛ أعد المهمة إلى أسلوب التنصيف
step = (bs_call(S, K, T, r, sigma) - price) / v
sigma -= step
if sigma <= 0.0:
return None # تجاوزت الخطوة الحد المعقول
if abs(step) < 1e-6:
return sigma
return None
بالقرب من سعر التنفيذ، يصل هذا الأسلوب إلى النتيجة في ثلاث أو أربع دورات، مقارنةً بنحو اثنتي عشرة دورة لأسلوب التنصيف. ويكمن سبب التعثر في المقام: إذ تتقلص vega كلما ابتعد سعر التنفيذ عن سعر السهم. وتوضح عقود AAPL نفسها متوسط vega في كل نطاق كنسبة مئوية من قراءة vega عند السعر القريب من التنفيذ:
استعلام SQL الدقيق وراء كل رقم
WITH toFloat64(strike_price) / toFloat64(underlying_close) AS moneyness,
(
SELECT avg(toFloat64(vega))
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.025
) AS atm_vega
SELECT multiIf(moneyness < 0.90, '0.80-0.90',
moneyness < 0.95, '0.90-0.95',
moneyness < 1.00, '0.95-1.00',
moneyness < 1.05, '1.00-1.05',
moneyness < 1.10, '1.05-1.10',
'1.10-1.20') AS strike_vs_spot,
round(100 * avg(toFloat64(vega)) / atm_vega, 1) AS vega_pct_of_atm,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND moneyness BETWEEN 0.80 AND 1.20
GROUP BY strike_vs_spot
ORDER BY min(moneyness)تحمل الأطراف جزءاً من الحساسية: 33.1% من vega عند السعر القريب من التنفيذ في نطاق 0.80-0.90، و31.6% في نطاق 1.10-1.20. ويؤدي قسمة خطأ التسعير على رقم صغير إلى خطوة هائلة، قد تدفع التقدير إلى ما دون الصفر، حيث لا يعود للنموذج ما يقوله. لذلك تجمع أدوات الحل المستخدمة في الإنتاج بين الطريقتين؛ إذ تحدد النطاق أولاً، ثم تحسّن التقدير باستخدام نيوتن. يتناول Vega مقياس vega نفسه.
لماذا تُبلغ مصدران عن تقلب ضمني مختلف
النموذج متاح للعامة والحسابات محسومة، لذا يكمن الاختلاف في المدخلات.
- السعر الوسطي مقابل آخر سعر. يحتاج الحلّال إلى سعر واحد. إذا كان العقد مسعّراً عند $2.00 للعرض و$2.20 للطلب، فإن السعر الوسطي يبلغ $2.10، بينما قد تكون آخر صفقة منفذة عند $2.02 قبل تسعين دقيقة. وفي عقد كهذا، تعادل عشرة سنتات من السعر أكثر من نقطة واحدة من التقلب.
- توزيعات الأرباح وتكلفة الاحتفاظ. تسعّر الدالة أعلاه خيار Call أوروبياً على سهم لا يدفع أي توزيعات. ويؤدي دفع توزيعات قبل انتهاء الصلاحية إلى خفض السعر الآجل، كما يطبّق كل مكتب تداول تعديله ومعدل الفائدة الخاصين به.
- التنفيذ المبكر في الخيارات الأمريكية. يمكن تنفيذ خيارات الأسهم الأمريكية المفردة في أي يوم، وتحمل هذه الإمكانية قيمة لا تجدها الصيغة الأوروبية في حساباتها. لذلك يدفع الحلّال الفارق إلى التقلب إذا تجاهلها. أما أشجار ثنائي الحدين فتسعّر حق التنفيذ مباشرةً.
- الأسعار القديمة. قد يظل عقد بسعر تنفيذ لم تُنفَّذ عليه صفقة منذ يوم الثلاثاء يعرض سعراً، ويتعامل الحلّال مع أي قيمة يتلقاها باعتبارها الحقيقة.
ويُظهر التقارب آخر نقطتين بوضوح. يأخذ الجدول أدناه ثمانية أسهم معروفة في 30 يونيو 2026، ويحصي العقود المتداولة التي يتبقى على انتهائها من 20 إلى 45 يوماً، ثم يعرض كلاً من التقلب عند سعر التنفيذ القريب من سعر السهم ونسبة العقود التي تقارب الحل فيها:
استعلام SQL الدقيق وراء كل رقم
WITH abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS distance_from_spot
SELECT underlying_symbol AS symbol,
round(100 * avgIf(toFloat64(implied_volatility), iv_converged = 1 AND distance_from_spot < 0.05), 1) AS atm_iv_pct,
round(100 * countIf(iv_converged = 1) / count(), 1) AS solved_pct,
count() AS contract_count
FROM global_markets.options_greeks
WHERE date = toDate('2026-06-30')
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'KO', 'JNJ')
AND days_to_expiry BETWEEN 20 AND 45
AND volume > 0
GROUP BY symbol
HAVING countIf(iv_converged = 1 AND distance_from_spot < 0.05) > 0
ORDER BY atm_iv_pct DESCسجّل TSLA أعلى قراءة للتقلب عند سعر التنفيذ القريب من سعر السهم بين الأسماء البالغ عددها 8، عند 47.7%، مقابل 14.4% لـ SPY في المرتبة الأخيرة. وفي سلسلة خيارات TSLA، أنتجت 97.8% من العقود المتداولة إجابة متقاربة. أما الباقي فهو عقود يقع فيها السعر المُدخل إلى الحلّال خارج النطاق الذي يمكن لأي مستوى من التقلب إعادة إنتاجه، أو يكون السعر أقل من القيمة الجوهرية، أو يكون السوق متقاطعاً. وتبقى مسألة اعتبار رقم كهذا مرتفعاً سؤالاً منفصلاً؛ إذ تتناولها هل يُعد تقلب ضمني قدره 30% مرتفعاً، بينما تحوّله الحركة المتوقعة إلى نطاق مقوّم بالدولار.
العقد نفسه، مع إعادة الحل في كل جلسة
لا تُخزَّن أي قيمة للتقلب الضمني. بل يُعاد احتسابه من السعر الظاهر على الشاشة. فيما يلي عقد AAPL الأكثر تداولاً، والذي تنتهي صلاحيته في 17 يوليو 2026، مع تتبعه من 1 يونيو حتى تاريخ الانتهاء. لم يتغير سعر التنفيذ، كما لم يتغير تاريخ الانتهاء:
استعلام SQL الدقيق وراء كل رقم
WITH (
SELECT ticker
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND expiration_date = toDate('2026-07-17')
AND iv_converged = 1
AND volume > 0
ORDER BY volume DESC
LIMIT 1
) AS pinned_contract
SELECT date,
round(100 * avg(toFloat64(implied_volatility)), 1) AS implied_vol_pct,
round(avg(days_to_expiry)) AS days_to_expiry
FROM global_markets.options_greeks
WHERE ticker = pinned_contract
AND date BETWEEN toDate('2026-06-01') AND toDate('2026-07-17')
AND iv_converged = 1
AND volume > 0
GROUP BY date
ORDER BY dateخلال 29 جلسة، بدأت القراءة المحسوبة عند 25.1%، مع بقاء 46 يوماً حتى الانتهاء، وانتهت عند 26.6%، مع بقاء 4 يوماً. تمثل كل نقطة على ذلك الخط عملية تشغيل واحدة للحلقة المذكورة أعلاه باستخدام سعر الجلسة المعنية. تنشر صفحاتنا الخاصة بكل رمز النتيجة نفسها: تنفّذ التقلب الضمني لـ AAPL العملية يومياً على كامل سلسلة الخيارات، ولذلك يمكنك إعادة إنتاج أي رقم وارد هناك باستخدام الشيفرة الموجودة في هذه الصفحة.
الأسئلة الشائعة حول حساب التقلب الضمني
هل توجد معادلة لحساب التقلب الضمني؟
لا. تربط معادلة Black-Scholes بين التقلب والسعر، لكن هذه العلاقة لا تملك معكوساً ابتدائياً، لأن sigma تظهر مرتين داخل التوزيع الطبيعي. لذلك فإن كل قيمة للتقلب الضمني تراها هنا أو في أي مكان آخر تنتج عن خوارزمية حل تكرارية.
كم عدد التكرارات التي يستغرقها الحساب؟
تؤدي كل جولة من خوارزمية التنصيف إلى تقليص المجال إلى النصف. لذلك ينخفض مجال من 0.01 إلى 5.0 إلى أقل من 0.00001 بعد عشرين جولة، بينما تستغرق مطابقة السعر المعروض إلى أقرب سنت عادةً نحو اثنتي عشرة جولة. وتصل خوارزمية Newton-Raphson إلى الحل في ثلاث أو أربع جولات عندما يكون السعر قريباً من سعر التنفيذ، لكنها قد تتصرف بصورة غير مستقرة عندما تكون vega منخفضة.
لماذا يعرض الوسيط ومزوّد البيانات لديّ تقلباً ضمنياً مختلفاً؟
لأنهما أدخلا قيماً مختلفة في خوارزمية الحل. تشمل الفروق الشائعة استخدام سعر المنتصف بدلاً من آخر صفقة، وافتراضات سعر الفائدة والتوزيعات، وما إذا كان النموذج يتعامل مع التنفيذ المبكر للخيارات الأمريكية أصلاً. وفي حالة سعر تنفيذ قليل التداول، قد يؤدي سعر معروض قديم وحده إلى تغيير النتيجة عدة نقاط.
هل تعطي خيارات Call وPut عند سعر التنفيذ نفسه التقلب الضمني ذاته؟
نعم من الناحية النظرية، إذ تربط علاقة تكافؤ Call وPut بينهما عند سعر تنفيذ وتاريخ انتهاء مشتركين. لكن السعرين المعروضين يُحددان بصورة مستقلة عملياً، لذلك تختلف القيم المحسوبة قليلاً. وهذا سبب إضافي لاختلاف متوسطات سلسلة الخيارات بين مزوّدي البيانات.
هل يمكنني حساب التقلب الضمني من دون بيانات السوق؟
نعم، بالنسبة إلى سعر افتراضي. يأخذ الكود أعلاه سعراً وسعر تنفيذ وسعراً فورياً ومدة متبقية حتى الانتهاء وسعر فائدة، وتُدخل جميعها يدوياً. أما مطابقة قيمة مباشرة من مزوّد بيانات فتتطلب الجزء الأصعب: استخدام المدخلات نفسها التي استخدمها المزوّد.
تخزّن كل لوحة هنا استعلام SQL الذي يقف وراءها. افتح إحدى اللوحات، ثم نفّذ الحل نفسه على سلسلة خيارات مباشرة عبر منصة Strasmore.