Strasmore Research
শেখা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-05

Implied Volatility কীভাবে গণনা করা হয়

Implied volatility নির্ণয়ে কোনো নির্দিষ্ট ফর্মুলা নেই। একটি সলভার কীভাবে ইটারেশন পদ্ধতিতে অপশন প্রাইস থেকে এটি বের করে, Python কোড এবং সাধারণ ভুলগুলো সম্পর্কে বিস্তারিত জানুন।

1.10-1.20
Implied volatility কোনো নির্দিষ্ট ফর্মুলা দিয়ে নয়, বরং ইটারেশন বা পুনরাবৃত্তিমূলক প্রক্রিয়ার মাধ্যমে নির্ণয় করা হয়। কোনো অপশনের বাজারমূল্য থেকে সরাসরি ভলাটিলিটি বের করার জন্য কোনো ক্লোজড-ফর্ম এক্সপ্রেশন নেই। তাই একটি সলভার প্রথমে একটি ভলাটিলিটি অনুমান করে, সেই মান ব্যবহার করে Black-Scholes মডেলে অপশনের দাম নির্ধারণ করে এবং সেই মডেল প্রাইসকে বাজারের কোট প্রাইসের সাথে তুলনা করে। এই প্রক্রিয়াটি ততক্ষণ চলতে থাকে যতক্ষণ না মডেলের দাম এবং বাজারের দামের মধ্যে পার্থক্য নগণ্য পর্যায়ে পৌঁছায়। নিচে এই পুরো পদ্ধতিটি আলোচনা করা হলো: প্রাইসিং ফাংশন, স্ট্যান্ডার্ড লাইব্রেরি Python-এ সার্চ লুপ এবং কেন একই কন্ট্রাক্টের জন্য দুইজন ভিন্ন ভেন্ডর ভিন্ন ভিন্ন ভলাটিলিটি প্রকাশ করে তার কারণ।

প্রাইসিং ফাংশন

Black-Scholes মডেলের মাধ্যমে অপশনের তাত্ত্বিক মূল্য বের করার জন্য একটি ফাংশন প্রয়োজন। এই ফাংশনটি আন্ডারলাইং অ্যাসেটের দাম, স্ট্রাইক প্রাইস, সময়, সুদের হার এবং ভলাটিলিটিকে ইনপুট হিসেবে গ্রহণ করে। এটি মূলত একটি গাণিতিক মডেল যা অপশনের ফেয়ার ভ্যালু নির্ধারণ করে।

Python-এ সার্চ লুপ

Python-এর স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে আমরা একটি রুট-ফাইন্ডিং অ্যালগরিদম বা বাইসেকশন মেথড প্রয়োগ করতে পারি। এই লুপটি বারবার ভলাটিলিটির মান পরিবর্তন করে যতক্ষণ না মডেলের দাম এবং বাজারের দামের মধ্যে পার্থক্য একটি নির্দিষ্ট সীমার নিচে নেমে আসে।

ভেন্ডরদের তথ্যের ভিন্নতার কারণ

ভিন্ন ভিন্ন ভেন্ডর একই কন্ট্রাক্টের জন্য ভিন্ন ভিন্ন ইমপ্লাইড ভলাটিলিটি দেখানোর পেছনে বেশ কিছু কারণ থাকে। প্রথমত, তারা Black-Scholes মডেলের ইনপুট হিসেবে ভিন্ন ভিন্ন সুদের হার বা ডিভিডেন্ড ইল্ড ব্যবহার করতে পারে। দ্বিতীয়ত, বাজারের bid-ask spread-এর কোন দামটিকে (mid-price, bid, নাকি ask) তারা প্রাইসিংয়ের জন্য বেছে নিচ্ছে, তাতেও পার্থক্য তৈরি হয়। এছাড়া, ইটারেশন প্রক্রিয়ায় তারা কতটুকু প্রিসিশন বা নির্ভুলতা বজায় রাখছে এবং কত দ্রুত লুপটি বন্ধ করছে, তার ওপর ভিত্তি করেও ফলাফলে সামান্য তারতম্য দেখা দেয়।

কেন ইমপ্লাইড ভোলাটিলিটির কোনো ক্লোজড-ফর্ম ফর্মুলা নেই

Black-Scholes মডেলটি একমুখী কাজ করে। এতে স্পট প্রাইস, স্ট্রাইক প্রাইস, মেয়াদপূর্তির সময়, সুদের হার এবং ভোলাটিলিটি ইনপুট দিলে এটি একটি তাত্ত্বিক মূল্য প্রদান করে। এই ছয়টি উপাদানের পাঁচটিই পর্যবেক্ষণযোগ্য, কিন্তু ভোলাটিলিটি নয়। এটি একটি অনুমান মাত্র যে, বর্তমান সময় থেকে মেয়াদপূর্তির মধ্যে শেয়ারের দাম কতটা পরিবর্তিত হতে পারে।

ট্রেডাররা এই সমস্যাটিকে উল্টোভাবে দেখেন। স্ক্রিনে অপশনের বাজারমূল্য দেখা যায়, কিন্তু ভোলাটিলিটি অজানা থাকে। ইমপ্লাইড ভোলাটিলিটি হলো সেই ভোলাটিলিটি ইনপুট, যা Black-Scholes মডেলের তাত্ত্বিক মূল্যকে অপশনের বাজারমূল্যের সমান করে। ভোলাটিলিটির প্রতীক সিগমা (Sigma), নরমাল ডিস্ট্রিবিউশন ফাংশনের ভেতরে d1 এবং d2 উভয় স্থানেই বিদ্যমান, তাই বীজগণিতের মাধ্যমে একে আলাদা করা সম্ভব নয়। এখানেই বীজগণিতের সীমাবদ্ধতা এবং নিউমেরিক্যাল সার্চ পদ্ধতির প্রয়োজন হয়। ইমপ্লাইড ভোলাটিলিটি কী পরিমাপ করে অংশে এর ব্যাখ্যা রয়েছে; এই পৃষ্ঠায় এর কার্যপদ্ধতি আলোচনা করা হলো।

মডেলটির দুটি বৈশিষ্ট্য এই অনুসন্ধান প্রক্রিয়াকে সহজ করে তোলে। প্রথমত, ভোলাটিলিটি বাড়লে কল অপশনের মডেল প্রাইস সর্বদা বৃদ্ধি পায় এবং এই পরিবর্তনটি অত্যন্ত মসৃণ। যে মানটি কেবল ঊর্ধ্বমুখী হয়, তাকে একটি নির্দিষ্ট সীমার মধ্যে আটকে ফেলে সহজেই খুঁজে বের করা সম্ভব।

প্রতিটি কন্ট্রাক্টের জন্য সলভার একবারই চলে

এর আউটপুট প্রতিটি স্টকের জন্য একটি নয়, বরং প্রতিটি কন্ট্রাক্টের জন্য একটি সংখ্যা। একই স্টকের একই এক্সপায়ারি উইন্ডোর কন্ট্রাক্টগুলো একে অপরের সাথে ভিন্নমত পোষণ করে। 30 জুন, 2026 তারিখে লেনদেন হওয়া 20 থেকে 45 দিন মেয়াদ অবশিষ্ট থাকা প্রতিটি Apple (AAPL) অপশনকে শেয়ার মূল্যের ভগ্নাংশ হিসেবে স্ট্রাইক অনুযায়ী সাজানো হলো:

কুয়েরিপ্রতি কন্ট্রাক্টে একটি সলভ: স্ট্রাইক জোন অনুযায়ী AAPL ইমপ্লাইড ভোলাটিলিটি, জুন 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)
Run this yourself

স্ট্রাইক ল্যাডার ধরে উপরে ওঠার সময়, 0.80-0.90 জোনটি 35.5%-এ, 0.95-1.00 জোনটি 28.1%-এ এবং 1.10-1.20 জোনটি 27.3%-এ সমাধান হয়েছে। একটি কোম্পানি, একটি সেশন, 6টি উত্তর। সেই কার্ভের বাঁকটির একটি নাম আছে, তা হলো volatility skew, এবং প্রতি স্টকের জন্য একটি মাত্র ভোলাটিলিটি দিয়ে এটিকে আঁকা সম্ভব নয়।

Black-Scholes প্রাইস যা সলভারকে মেলাতে হবে

S হলো শেয়ারের দাম, K হলো স্ট্রাইক প্রাইস, T হলো বছর হিসেবে মেয়াদপূর্তির সময়, r হলো ঝুঁকিমুক্ত সুদের হার এবং N() হলো স্ট্যান্ডার্ড নরমাল কিউমুলেটিভ ডিস্ট্রিবিউশন, যার অর্থ হলো একটি স্ট্যান্ডার্ড নরমাল ড্র কোনো নির্দিষ্ট বিন্দুর নিচে থাকার সম্ভাবনা। পাইথন এই শেষ অংশটি 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)

এটিই সম্পূর্ণ ফরোয়ার্ড মডেল। এতে ভলাটিলিটি ইনপুট দিন, প্রাইস পেয়ে যাবেন।

ইমপ্লাইড ভোলাটিলিটি যেভাবে গণনা করা হয়, ধাপে ধাপে

বাইসেকশন (Bisection) হলো প্রথম শেখার মতো পদ্ধতি। এটি কখনোই ডাইভার্জ করে না এবং এতে কোনো ক্যালকুলাসের প্রয়োজন হয় না।

  1. উত্তরটিকে 0.01 (বছরে 1%) এবং 5.0 (500%) এর মধ্যে সীমাবদ্ধ করুন। প্রতিটি ট্রেড করা অপশন এই সীমার মধ্যেই থাকে।
  2. ব্র্যাকেটের মধ্যবিন্দুতে অপশনটির দাম নির্ধারণ করুন।
  3. যদি মডেলের দাম বাজারের কোট বা মূল্যের উপরে থাকে, তবে অনুমানটি খুব বেশি ছিল: ব্র্যাকেটের উপরের সীমাটিকে মধ্যবিন্দুতে নামিয়ে আনুন। যদি এটি নিচে থাকে, তবে নিচের সীমাটিকে উপরে তুলুন।
  4. মডেলের দাম কোটের এক সেন্টের মধ্যে চলে এলে থামুন।
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 ইটারেশনের সীমা কখনোই বাধা হয়ে দাঁড়ায় না।

কেন Newton-Raphson দ্রুত কাজ করে এবং কোথায় এটি ব্যর্থ হয়

Bisection পদ্ধতি মডেলের কাছে থাকা তথ্যকে কাজে লাগায় না। Vega হলো অস্থিরতার (volatility) প্রতি ইউনিটের বিপরীতে অপশনের মূল্যের পরিবর্তন, যা Black-Scholes মডেলে সরাসরি গাণিতিক আকারে পাওয়া যায়। Newton-Raphson একে একটি ঢাল (slope) হিসেবে বিবেচনা করে: মূল্যের ত্রুটি পরিমাপ করে তাকে 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 # ঢাল অবশিষ্ট নেই, কাজ Bisection-এর কাছে হস্তান্তর করুন
 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

At the money অপশনের ক্ষেত্রে এটি তিন বা চার ধাপেই সমাধান দেয়, যেখানে Bisection-এর ডজনখানেক ধাপ প্রয়োজন হয়। এর ব্যর্থতার মূল কারণ হর (denominator)-এর মধ্যে লুকিয়ে আছে: স্ট্রাইক প্রাইস শেয়ারের দাম থেকে দূরে সরে গেলে vega কমতে থাকে। একই AAPL কন্ট্রাক্টের ক্ষেত্রে, প্রতিটি জোনের গড় vega-কে at the money রিডিংয়ের শতাংশ হিসেবে নিচে দেখানো হলো:

কুয়েরিযেখানে নিউটন স্টেপ কাজ করে না: স্ট্রাইক জোন অনুযায়ী AAPL ভেগা, জুন 30, 2026
প্রতিটি সংখ্যার পেছনের সঠিক 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)
Run this yourself

উইং বা প্রান্তীয় স্ট্রাইকগুলোতে সংবেদনশীলতা অনেক কম থাকে: 33.1% জোনটিতে at the money vega-এর 0.80-0.90 অংশ এবং 31.6% জোনটিতে 1.10-1.20 অংশ থাকে। মূল্যের ত্রুটিকে এত ছোট সংখ্যা দিয়ে ভাগ করলে একটি বিশাল ধাপ তৈরি হয়, যা অনুমানকে শূন্যের নিচে নামিয়ে দিতে পারে, যেখানে মডেলটি আর কোনো কার্যকর ফলাফল দিতে পারে না। প্রোডাকশন সলভারগুলো এই দুটি পদ্ধতিকে একত্রে ব্যবহার করে; প্রথমে Bisection দিয়ে সীমানা নির্ধারণ করা হয় এবং পরে Newton-Raphson দিয়ে নিখুঁত মান বের করা হয়। Vega এই গ্রিকটির বিস্তারিত ব্যাখ্যা প্রদান করে।

কেন দুটি উৎস ভিন্ন ইমপ্লাইড ভোলাটিলিটি রিপোর্ট করে

মডেলটি সর্বজনীন এবং এর গাণিতিক হিসাব সুনির্দিষ্ট, তাই মতপার্থক্যের কারণ নিহিত থাকে ইনপুটগুলোর মধ্যে।

  • মিড বনাম লাস্ট। সলভারের একটি নির্দিষ্ট দাম প্রয়োজন। একটি কন্ট্রাক্টের বিড 2.00 ডলার এবং অফার 2.20 ডলার হলে এর মিডপয়েন্ট 2.10 ডলার, অথচ নব্বই মিনিট আগের শেষ লেনদেন বা লাস্ট প্রিন্ট হতে পারে 2.02 ডলার। এই ধরনের কন্ট্রাক্টের ক্ষেত্রে, দশ সেন্টের দামের পার্থক্য এক পয়েন্ট ভোলাটিলিটির চেয়েও বেশি প্রভাব ফেলে।
  • ডিভিডেন্ড এবং ক্যারি। উপরের ফাংশনটি এমন একটি স্টকের ইউরোপীয় কল অপশনের দাম নির্ধারণ করে যা কোনো লভ্যাংশ দেয় না। মেয়াদপূর্তির আগে লভ্যাংশ থাকলে তা ফরোয়ার্ড প্রাইস কমিয়ে দেয় এবং প্রতিটি ট্রেডিং ডেস্ক নিজস্ব অ্যাডজাস্টমেন্ট ও রেট প্রয়োগ করে।
  • আমেরিকান আর্লি এক্সারসাইজ। মার্কিন সিঙ্গেল স্টক অপশন যেকোনো দিন এক্সারসাইজ করা যায় এবং এই অধিকারটির নিজস্ব মূল্য রয়েছে, যা ইউরোপীয় ফর্মুলায় অন্তর্ভুক্ত করার কোনো সুযোগ নেই। যে সলভার এটি উপেক্ষা করে, সে এই পার্থক্যটিকে ভোলাটিলিটির ওপর চাপিয়ে দেয়। বাইনোমিয়াল ট্রি সরাসরি এক্সারসাইজ রাইটের মূল্য নির্ধারণ করে।
  • পুরানো কোট। মঙ্গলবার শেষ লেনদেন হওয়া কোনো স্ট্রাইক প্রাইসের কোট এখনো দেখা যেতে পারে এবং সলভার সেটিকে সত্য হিসেবেই গ্রহণ করে।

কনভারজেন্স বা অভিসৃতি শেষ দুটি কারণকে দৃশ্যমান করে তোলে। নিচের প্যানেলে 30 জুন, 2026 তারিখে আটটি পরিচিত কোম্পানির শেয়ারের তথ্য নেওয়া হয়েছে, যেখানে 20 থেকে 45 দিন মেয়াদ অবশিষ্ট থাকা লেনদেনকৃত কন্ট্রাক্টগুলো গণনা করা হয়েছে এবং অ্যাট দ্য মানি ভোলাটিলিটি ও কত শতাংশ কন্ট্রাক্টে সলভার কনভারজেন্স অর্জন করেছে তা রিপোর্ট করা হয়েছে:

কুয়েরিঅ্যাট-দ্য-মানি ইমপ্লাইড ভোলাটিলিটি এবং সলভার কনভারজেন্স, আটটি নাম, জুন 30, 2026
প্রতিটি সংখ্যার পেছনের সঠিক 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
Run this yourself

TSLA-এর অ্যাট দ্য মানি রিডিং 8 সংখ্যক নামের মধ্যে সর্বোচ্চ, যা 47.7%; অন্যদিকে SPY-এর রিডিং সর্বনিম্ন, যা 14.4%। TSLA চেইনে, লেনদেনকৃত কন্ট্রাক্টের 97.8% শতাংশে কনভারজড উত্তর পাওয়া গেছে। বাকিগুলো এমন স্ট্রাইক প্রাইস যেখানে সলভারকে দেওয়া দামটি এমন সীমার বাইরে যা কোনো ভোলাটিলিটি দিয়ে মেলানো সম্ভব নয়, যেমন ইন্ট্রিনসিক ভ্যালুর নিচে থাকা কোট বা ক্রসড মার্কেট। এই ধরনের সংখ্যাকে উচ্চ হিসেবে গণ্য করা হবে কি না তা একটি ভিন্ন প্রশ্ন: 30% IV কি বেশি এই বিষয়টি নিয়ে আলোচনা করে এবং প্রত্যাশিত মুভমেন্ট সেটিকে ডলারের পরিসরে রূপান্তর করে।

প্রতি সেশনে নতুন করে সমাধান করা একই কন্ট্রাক্ট

ইমপ্লাইড ভোলাটিলিটি (implied volatility) সম্পর্কে কোনো তথ্য সংরক্ষণ করা হয় না। স্ক্রিনে থাকা যেকোনো প্রাইস থেকে এটি নতুন করে হিসাব করা হয়। নিচে 17 জুলাই, 2026 তারিখে মেয়াদোত্তীর্ণ হওয়া AAPL-এর সবচেয়ে বেশি ট্রেড হওয়া কন্ট্রাক্টটি দেওয়া হলো, যা 1 জুন থেকে মেয়াদ শেষ হওয়া পর্যন্ত অনুসরণ করা হয়েছে। স্ট্রাইক প্রাইস বা মেয়াদোত্তীর্ণের তারিখ কখনোই পরিবর্তিত হয়নি:

কুয়েরিএকটি AAPL কন্ট্রাক্ট, জুলাই 17, 2026 এক্সপায়ারি পর্যন্ত প্রতি সেশনে পুনরায় সলভ করা হয়েছে
প্রতিটি সংখ্যার পেছনের সঠিক 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
Run this yourself

মোট 29 সেশন জুড়ে, সমাধানকৃত রিডিং 25.1%-এ শুরু হয়েছিল যখন মেয়াদ শেষ হতে 46 দিন বাকি ছিল এবং এটি 26.6%-এ শেষ হয়েছে যখন মেয়াদ শেষ হতে 4 দিন বাকি ছিল। ওই লাইনের প্রতিটি বিন্দু হলো সেই সেশনের কোটের বিপরীতে উপরের লুপের একটি রান। আমাদের প্রতিটি টিকার পেজে একই সমাধান প্রকাশ করা হয়: AAPL ইমপ্লাইড ভোলাটিলিটি এটি প্রতিদিন পুরো চেইন জুড়ে চালায়, যাতে একজন পাঠক এই পৃষ্ঠায় থাকা কোড ব্যবহার করে যেকোনো ফিগার পুনরায় তৈরি করতে পারেন।

ইমপ্লাইড ভোলাটিলিটি গণনার সাধারণ জিজ্ঞাসা

ইমপ্লাইড ভোলাটিলিটির কি কোনো নির্দিষ্ট সূত্র আছে?

না। Black-Scholes মডেল ভোলাটিলিটিকে মূল্যের সাথে সম্পর্কিত করে, কিন্তু এই সম্পর্কের কোনো প্রাথমিক বিপরীত (inverse) ফাংশন নেই, কারণ সিগমা (sigma) স্বাভাবিক বিন্যাসের (normal distribution) ভেতরে দুইবার থাকে। আপনি এখানে বা অন্য যেকোনো স্থানে যে ইমপ্লাইড ভোলাটিলিটি সংখ্যা দেখেন, তা একটি ইটারেটিভ সলভার (iterative solver) থেকে আসে।

এই গণনায় কতগুলো ইটারেশন বা ধাপ প্রয়োজন হয়?

প্রতিটি বাইসেকশন (bisection) ধাপ ব্র্যাকেটকে অর্ধেক করে ফেলে, তাই 0.01 থেকে 5.0 পরিসরটি বিশটি ধাপের মধ্যে 0.00001-এর নিচে নেমে আসে। সাধারণত নিকটতম সেন্টের সাথে কোট মেলানোর জন্য প্রায় বারোটি ধাপের প্রয়োজন হয়। মানি-র কাছাকাছি (near the money) নিউটন-র‍্যাফসন (Newton-Raphson) পদ্ধতি তিন বা চারটি ধাপেই সমাধান দিতে পারে, তবে যেখানে ভেগা (vega) কম, সেখানে এই পদ্ধতিটি অস্থিতিশীল হতে পারে।

আমার ব্রোকার এবং ডেটা ভেন্ডর কেন ভিন্ন ভিন্ন ইমপ্লাইড ভোলাটিলিটি দেখায়?

তারা সলভারে ভিন্ন ভিন্ন ইনপুট ব্যবহার করেছে। সাধারণ পার্থক্যের কারণগুলো হলো মিড কোট বনাম সর্বশেষ ট্রেড, সুদের হার ও লভ্যাংশের অনুমান, এবং মডেলটি আমেরিকান আর্লি এক্সারসাইজ (American early exercise) সমর্থন করে কি না। কম লেনদেন হওয়া স্ট্রাইক প্রাইসের ক্ষেত্রে, শুধুমাত্র একটি পুরনো কোটই উত্তরের মধ্যে কয়েক পয়েন্টের পার্থক্য তৈরি করতে পারে।

একই স্ট্রাইক প্রাইসে কল এবং পুট অপশনের ইমপ্লাইড ভোলাটিলিটি কি একই হয়?

তাত্ত্বিকভাবে হ্যাঁ, পুট-কল প্যারিটি (put-call parity) একই স্ট্রাইক এবং মেয়াদের ক্ষেত্রে তাদের সংযুক্ত করে। বাস্তবে, দুটি কোট স্বাধীনভাবে নির্ধারিত হয় এবং সমাধানকৃত সংখ্যাগুলোর মধ্যে সামান্য পার্থক্য থাকে, যা ভেন্ডরদের মধ্যে চেইন-ব্যাপী গড় ভিন্ন হওয়ার অন্যতম কারণ।

বাজার ডেটা ছাড়া কি আমি ইমপ্লাইড ভোলাটিলিটি গণনা করতে পারি?

হ্যাঁ, একটি কাল্পনিক কোটের জন্য এটি সম্ভব। উপরের কোডটি একটি মূল্য, স্ট্রাইক, স্পট, মেয়াদের সময় এবং সুদের হার গ্রহণ করে, যা হাতে টাইপ করা যায়। লাইভ ভেন্ডর নম্বরের সাথে মেলানোটা কঠিন অংশ: এর জন্য ভেন্ডর যে ইনপুটগুলো ব্যবহার করেছে, ঠিক সেগুলোই প্রয়োজন।


এখানে প্রতিটি প্যানেল তার পেছনের SQL সংরক্ষণ করে। একটি ওপেন করুন, তারপর Strasmore টার্মিনালে একটি লাইভ চেইনের বিপরীতে একই সমাধানটি রান করুন।

#implied volatility#options#black-scholes#python#how-to