পাঠ ৫৪ · ৫৭-এর মধ্যে · মডিউল ১২
Home / Courses / Numerical Methods / ফাইন্যান্সে নিউমেরিক্যাল মেথডস

ফাইন্যান্সে নিউমেরিক্যাল মেথডস — অপশন প্রাইসিং পরিচিতি

Numerical methods in finance — option pricing intro
১১ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • কেন ফাইন্যান্সে অপশন প্রাইসিং একটি নিউমেরিক্যাল সমস্যা, এবং কেন এটি এই কোর্সে শুধু পরিচিতি হিসেবে দেখানো হচ্ছে (উৎপাদন-মানের ফাইন্যান্সিয়াল মডেলিং নয়)
  • একটি সরল বাইনোমিয়াল ট্রি মডেল হাতে-গণনা করে ব্যাকওয়ার্ড ইন্ডাকশনের মাধ্যমে একটি মূল্য অনুমান করা
  • একটি সরলীকৃত মন্টে কার্লো সিমুলেশন দিয়ে একই মূল্য ভিন্নভাবে অনুমান করা এবং দুটো ফলাফল তুলনা করা
  • কেন এই ধরনের সরলীকৃত মডেলকে বাস্তব আর্থিক সিদ্ধান্তের ভিত্তি হিসেবে ব্যবহার করা উচিত নয়

১ · অপশন প্রাইসিং একটি নিউমেরিক্যাল সমস্যা কেন

একটি "অপশন" হলো একটি আর্থিক চুক্তি যা ভবিষ্যতের কোনো নির্দিষ্ট তারিখে একটি নির্দিষ্ট দামে ("স্ট্রাইক প্রাইস") একটি সম্পদ কেনা বা বিক্রি করার অধিকার দেয়, বাধ্যবাধকতা নয়। এই ধরনের চুক্তির "ন্যায্য মূল্য" আজকে কত হওয়া উচিত — তা নির্ভর করে ভবিষ্যতের সম্পদের দাম কীভাবে অনিশ্চিতভাবে পরিবর্তিত হতে পারে তার উপর। যেহেতু ভবিষ্যৎ অনিশ্চিত, এই সমস্যাটি প্রকৃতপক্ষে একটি সম্ভাব্যতা-ভিত্তিক গড় হিসাব — এবং M11/L51-এ শেখা মন্টে কার্লো টেকনিক বা একটি ধাপে-ধাপে সম্ভাব্যতা-ট্রি (বাইনোমিয়াল ট্রি) দিয়ে এই ধরনের সমস্যা সংখ্যাগতভাবে সমাধান করা যায়।

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

২ · বাইনোমিয়াল ট্রি মডেল — একটি হাতে-গণনাযোগ্য উদাহরণ

বাইনোমিয়াল ট্রি মডেল ধরে নেয় প্রতিটি ছোট সময়-ধাপে সম্পদের দাম হয় একটি নির্দিষ্ট গুণকে উপরে (u) যায়, নয়তো নিচে (d) যায় — একটি নির্দিষ্ট "রিস্ক-নিউট্রাল" সম্ভাব্যতা p সহ। এটি M6-এর ODE সলভারদের ধারণার সাথে মিল আছে — সময়কে ছোট ধাপে ভাগ করে ধাপে ধাপে এগিয়ে যাওয়া, শুধু এখানে প্রতিটি ধাপে দুটো সম্ভাব্য দিক আছে (উপরে/নিচে) একটি নির্দিষ্ট দিকের বদলে।

$$ u = e^{\sigma\sqrt{\Delta t}}, \quad d = \frac{1}{u}, \quad p = \frac{e^{r\Delta t} - d}{u - d} $$

চূড়ান্ত ধাপে (T সময়ে) প্রতিটি সম্ভাব্য দামের জন্য অপশনের "পে-অফ" গণনা করে (একটি কল অপশনের জন্য max(দাম − স্ট্রাইক, 0)), তারপর ব্যাকওয়ার্ড ইন্ডাকশন — প্রতিটি ধাপে পিছনে গিয়ে সম্ভাব্যতা-ভারযুক্ত গড় নিয়ে ডিসকাউন্ট করা — দিয়ে আজকের মূল্যে ফিরে আসা হয়।

Python
import math

# ---- সম্পূর্ণ হাইপোথেটিক্যাল, শিক্ষামূলক ইনপুট -- কোনো বাস্তব বাজার তথ্য নয় ----
S0 = 100.0     # কাল্পনিক প্রাথমিক "শেয়ার" দাম
K = 100.0      # কাল্পনিক স্ট্রাইক প্রাইস
r = 0.05       # কাল্পনিক বার্ষিক "রিস্ক-ফ্রি" হার (শুধু উদাহরণ)
sigma = 0.20   # কাল্পনিক বার্ষিক ভোলাটিলিটি
T = 1.0        # ১ "বছর" মেয়াদ পর্যন্ত
N = 4          # বাইনোমিয়াল ধাপের সংখ্যা (ছোট রাখা হয়েছে, হাতে ট্রেস করার জন্য)

dt = T / N
u = math.exp(sigma * math.sqrt(dt))
d = 1 / u
disc = math.exp(-r * dt)
p = (math.exp(r * dt) - d) / (u - d)

print(f"dt={dt:.6f}  u={u:.6f}  d={d:.6f}  রিস্ক-নিউট্রাল p={p:.6f}  ডিসকাউন্ট/ধাপ={disc:.6f}")
print()

# চূড়ান্ত ধাপের প্রতিটি নোডে সম্ভাব্য দাম
terminal_prices = [S0 * (u ** j) * (d ** (N - j)) for j in range(N + 1)]
values = [max(price - K, 0.0) for price in terminal_prices]

print("নোড | দাম        | পে-অফ")
for j in range(N + 1):
    print(f"j={j:2d} | {terminal_prices[j]:11.4f} | {values[j]:11.4f}")

# ব্যাকওয়ার্ড ইন্ডাকশন
print()
for step in range(N, 0, -1):
    values = [disc * (p * values[j + 1] + (1 - p) * values[j]) for j in range(step)]
    print(f"{step} ধাপ বাকি থাকা অবস্থায় নোড মান -> " + ", ".join(f"{v:.4f}" for v in values))

call_price_tree = values[0]
print()
print(f"বাইনোমিয়াল-ট্রি ইলাস্ট্রেটিভ কল অপশন 'মূল্য' = {call_price_tree:.4f}")

    
কোডের প্রকৃত আউটপুটে u ≈ 1.105171, d ≈ 0.904837, রিস্ক-নিউট্রাল p ≈ 0.537808। চূড়ান্ত ধাপে ৫টি সম্ভাব্য দাম আছে (67.03 থেকে 149.18 পর্যন্ত), যার মধ্যে শুধু সর্বোচ্চ দুটোতে পে-অফ ধনাত্মক (22.14 ও 49.18)। ব্যাকওয়ার্ড ইন্ডাকশনের প্রতিটি ধাপ পিছনে গিয়ে এই মানগুলোকে ডিসকাউন্ট করে, শেষমেশ আজকের ইলাস্ট্রেটিভ মূল্যে পৌঁছায়: ≈ ৯.৯৭ (কাল্পনিক ইউনিটে)।

৩ · একই সমস্যা, ভিন্ন টেকনিক — সরলীকৃত মন্টে কার্লো তুলনা

একই হাইপোথেটিক্যাল সমস্যাটি একটি সম্পূর্ণ ভিন্ন নিউমেরিক্যাল টেকনিক দিয়েও সমাধান করা যায় — সম্পদের দামের হাজার হাজার সম্ভাব্য এলোমেলো "পথ" সিমুলেট করে (একটি সরলীকৃত জ্যামিতিক এলোমেলো হাঁটা মডেল ব্যবহার করে), প্রতিটি পথের চূড়ান্ত পে-অফ গড় করে, তারপর ডিসকাউন্ট করে। এটি M11/L51-এর মন্টে কার্লো এরর-এস্টিমেশন টেকনিকেরই একটি প্রয়োগ — শুধু এখানে "এরর" পরিমাপের বদলে সরাসরি একটি প্রত্যাশিত মান অনুমান করা হচ্ছে। পুনরুৎপাদনযোগ্যতার জন্য random.seed(42) ব্যবহার করা হয়েছে।

Python
import math
import random

# একই হাইপোথেটিক্যাল ইনপুট আগের সেল থেকে
S0, K, r, sigma, T = 100.0, 100.0, 0.05, 0.20, 1.0

random.seed(42)
n_sims = 20000
n_substeps = 50
dt_mc = T / n_substeps

payoff_sum = 0.0
for _ in range(n_sims):
    S = S0
    for _ in range(n_substeps):
        z = random.gauss(0.0, 1.0)
        S = S * math.exp((r - 0.5 * sigma * sigma) * dt_mc + sigma * math.sqrt(dt_mc) * z)
    payoff_sum += max(S - K, 0.0)

mc_price = math.exp(-r * T) * (payoff_sum / n_sims)
print(f"মন্টে কার্লো ইলাস্ট্রেটিভ অনুমান ({n_sims}টি সিমুলেটেড পাথ, seed=42): {mc_price:.4f}")

call_price_tree = 9.9705  # আগের কোড সেল থেকে বাইনোমিয়াল-ট্রি ফলাফল
print(f"দুই ইলাস্ট্রেটিভ মেথডের পার্থক্য: {abs(call_price_tree - mc_price):.4f}")

    
কোডের প্রকৃত আউটপুটে ২০,০০০টি সিমুলেটেড পাথ দিয়ে (প্রতিটি ৫০টি সাব-স্টেপে ভাগ করা, seed=42) মন্টে কার্লো অনুমান পাওয়া যায় ≈ ১০.৩২ — বাইনোমিয়াল ট্রি-র ≈ ৯.৯৭-এর কাছাকাছি কিন্তু হুবহু সমান নয়, পার্থক্য মাত্র ≈ ০.৩৫। এই পার্থক্যটি প্রত্যাশিত: বাইনোমিয়াল ট্রি মাত্র ৪টি ধাপ ব্যবহার করেছে (একটি মোটা অ্যাপ্রক্সিমেশন), আর মন্টে কার্লো একটি এলোমেলো নমুনা-ভিত্তিক পদ্ধতি — উভয়েরই নিজস্ব নিউমেরিক্যাল এরর আছে (M11-এ আলোচিত ফরওয়ার্ড এরর ধারণার সাথে সামঞ্জস্যপূর্ণ), তাই কাছাকাছি কিন্তু ভিন্ন ফলাফল আসা স্বাভাবিক।
মূল কথা · Key takeaway

অপশন প্রাইসিং একটি চমৎকার উদাহরণ দেখায় কীভাবে সম্পূর্ণ ভিন্ন নিউমেরিক্যাল টেকনিক (একটি ধাপে-ধাপে সম্ভাব্যতা-ট্রি বনাম একটি র‍্যান্ডম-স্যাম্পলিং সিমুলেশন) একই অন্তর্নিহিত গাণিতিক সমস্যা সমাধান করতে পারে, প্রতিটির নিজস্ব অ্যাপ্রক্সিমেশন ট্রেড-অফ সহ — ঠিক M2-এ রুট-ফাইন্ডিং মেথডগুলোর তুলনার মতো। আবারও মনে রাখুন: এই পাঠের সংখ্যাগুলো সম্পূর্ণ শিক্ষামূলক উদাহরণ, বাস্তব ফাইন্যান্সিয়াল সিদ্ধান্তের জন্য নয় — বাস্তব ফাইন্যান্সিয়াল ইঞ্জিনিয়ারিং অনেক বেশি জটিল মডেল, ডেটা ও রিস্ক-নিয়ন্ত্রণ ব্যবহার করে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ বাইনোমিয়াল ট্রি-তে মাত্র ৪টি ধাপ ব্যবহার করা হয়েছে। ধাপের সংখ্যা অনেক বাড়ালে (যেমন ১০০) ফলাফলে কী পরিবর্তন আসবে বলে আপনার ধারণা?

ধাপের সংখ্যা বাড়ালে বাইনোমিয়াল ট্রি সম্পদের দামের সম্ভাব্য গতিপথকে আরও সূক্ষ্মভাবে (finer resolution) প্রতিনিধিত্ব করবে, এবং এটি ধীরে ধীরে একটি ধারাবাহিক (continuous) মডেলের কাছাকাছি চলে আসবে — এই ধরনের কনভারজেন্স আচরণ M4/M5-এ ইন্টারপোলেশন ও ইন্টিগ্রেশনে n বাড়ানোর সাথে এরর কমার প্যাটার্নের সাথে ধারণাগতভাবে মিলে যায়। ফলাফল সম্ভবত মন্টে কার্লো অনুমানের আরও কাছাকাছি চলে আসবে।

প্র ০২ মন্টে কার্লো সিমুলেশনে random.seed(42) ব্যবহার করা হয়েছে। সিড পরিবর্তন করলে (যেমন seed(1)) ফলাফল কি বদলে যাবে, এবং এটি কি একটি সমস্যা?

হ্যাঁ, সিড পরিবর্তন করলে সুনির্দিষ্ট সংখ্যাটি সামান্য বদলাবে, কারণ মন্টে কার্লো একটি এলোমেলো নমুনা-ভিত্তিক পদ্ধতি — কিন্তু M11/L51-এ যেমন দেখানো হয়েছে, যথেষ্ট বড় সংখ্যক সিমুলেশন (এখানে ২০,০০০) ব্যবহার করলে বিভিন্ন সিডে ফলাফল একটি ছোট পরিসরের মধ্যেই থাকা উচিত। এটি সমস্যা নয়, বরং মন্টে কার্লো পদ্ধতির একটি স্বাভাবিক বৈশিষ্ট্য — সিমুলেশনের সংখ্যা যত বাড়ে, ফলাফলের স্প্রেড তত কমে।

প্র ০৩ এই পাঠে বারবার বলা হয়েছে সংখ্যাগুলো হাইপোথেটিক্যাল। বাস্তব-বিশ্বের একটি ফাইন্যান্সিয়াল সিস্টেম তৈরি করতে এই ছোট উদাহরণের বাইরে আর কী কী যুক্ত করতে হবে বলে আপনার মনে হয়?

অন্তত: বাস্তব বাজার থেকে ক্যালিব্রেটেড ইনপুট (ঐতিহাসিক ভোলাটিলিটি, প্রকৃত সুদের হার কার্ভ), আরও বাস্তবসম্মত মূল্য-গতিবিধির মডেল (এই উদাহরণের সরলীকৃত জ্যামিতিক এলোমেলো হাঁটার চেয়ে জটিল), লেনদেন খরচ ও তারল্যের প্রভাব বিবেচনা, রিস্ক-ম্যানেজমেন্ট ও রেগুলেটরি কমপ্লায়েন্স স্তর, এবং ব্যাপক ব্যাকটেস্টিং ও মডেল-বৈধতা যাচাই — এই সবকিছু এই পাঠের সুযোগের বাইরে, কিন্তু অন্তর্নিহিত নিউমেরিক্যাল টেকনিক (ট্রি ব্যাকওয়ার্ড-ইন্ডাকশন বা মন্টে কার্লো) একই থাকে।

অনুশীলন

  1. চিন্তা করুন: প্রথম কোড সেলে কাল্পনিক ভোলাটিলিটি sigma-কে 0.20 থেকে 0.40-এ বাড়ালে ইলাস্ট্রেটিভ কল অপশন মূল্যের কী পরিবর্তন আসবে বলে আপনার ধারণা?

    ভোলাটিলিটি বাড়ালে u ও d-এর মধ্যে ব্যবধান বাড়ে — অর্থাৎ সম্পদের দাম আরও চরমভাবে উপরে বা নিচে যেতে পারে। যেহেতু কল অপশনের পে-অফ দাম অনেক বেশি হলে ধনাত্মক (কিন্তু দাম কম হলে সর্বদা শূন্যে সীমাবদ্ধ — কখনো ঋণাত্মক নয়), বেশি ভোলাটিলিটি "উপরে যাওয়ার" সম্ভাবনার মূল্য বাড়িয়ে দেয়, তাই ইলাস্ট্রেটিভ মূল্য বাড়ার কথা।

  2. পরীক্ষা করুন: প্রথম কোড সেলে sigma = 0.20-কে sigma = 0.40-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।

    sigma = 0.40-এ u ও d-এর মধ্যে ব্যবধান আগের চেয়ে অনেক বেশি হয়, চূড়ান্ত ধাপে সর্বোচ্চ দাম আরও বেশি ছড়িয়ে যায়, এবং ব্যাকওয়ার্ড ইন্ডাকশনের ফলে ইলাস্ট্রেটিভ কল অপশন মূল্য আগের ≈ 9.97 থেকে স্পষ্টভাবে বেড়ে যায় — কোডটি চালিয়ে প্রকৃত নতুন মান দেখুন এবং যাচাই করুন এটি আপনার অনুমানের সাথে মিলছে কিনা।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
পদার্থবিজ্ঞান ও ইঞ্জিনিয়ারিং সিমুলেশনে নিউমেরিক্যাল মেথডস