R-Bloggers

ساخت وبلاگ

R-bloggers

اخبار و آموزش های R توسط صدها وبلاگ نویس R

حساسیت دلتا مبادله نرخ بهره

ارسال شده در 23 ژوئیه 2021 توسط سانگ-هون لی در وبلاگ نویسان |0 نظر

[این مقاله برای اولین بار در K& L Fintech Modeling منتشر شد و با مهربانی به R-Bloggers کمک کرد].(می توانید در مورد محتوای این صفحه در اینجا شماره را گزارش دهید) آیا می خواهید محتوای خود را در R-Bloggers به اشتراک بگذارید؟اگر یک وبلاگ دارید ، اینجا را کلیک کنید ، یا اگر این کار را نمی کنید اینجا.

این پست نحوه محاسبه حساسیت دلتا یا بردار دلتا مبادله نرخ بهره ، به ویژه دلتا را توضیح می دهد. دلتا را می توان با 1) صفر دلتا یا 2) دلتا بازار محاسبه کرد. به بهترین دانش ما ، FRTB می تواند از این دو روش استفاده کند اما SIMM از یونانیان بازار استفاده می کند. ما کد R را برای دو رویکرد پیاده سازی می کنیم

حساسیت دلتا مبادله نرخ بهره Libor

برای کسب اطلاعات دقیق در مورد قیمت گذاری مبادله LIBOR IRS و راه اندازی صفر منحنی ، به پست های زیر مراجعه کنید.

  • قیمت مبادله نرخ بهره با استفاده از کد R
  • راه اندازی منحنی صفر از نرخ مبادله IRS با استفاده از کد R

در پست های قبلی ، ما یک مبادله 5y Libor IRS را قیمت گذاری کرده ایم و با استفاده از bootstrapping یک منحنی صفر از نرخ مبادله بازار ایجاد کرده ایم. بر اساس این آثار ، یونانی های IRS را محاسبه می کنیم. از آنجا که IRS هیچ ویژگی گزینه ای ندارد ، تمرکز ما محاسبه حساسیت دلتا است. و برای راحتی ، مقدار مبادله به عنوان (پای شناور - پا ثابت) تعریف شده است.

حساسیت دلتا

ISDA SIMM از تعاریف زیر در مورد Delta Risk Risk نرخ بهره استفاده می کند ( (x ) یک عامل خطر است). البته چندین نسخه از آن وجود دارد اما همه آنها اساساً یکسان هستند.

برای سهولت در نماد ، بگذارید (z (t) ) و (s (t) ) نرخ صفر (bootstrapped) و (بازار مشاهده شده) را به ترتیب در زمان t نشان دهد.

برای محاسبه دلتا دو رویکرد وجود دارد: 1) Delta Zero ، 2) Delta Market.

صفر دلتا

رویکرد صفر دلتا حساسیت دلتا را با ضرب و شتم بالا یا پایین نرخ صفر یک به یک محاسبه می کند.

Once the zero curve ((z(t))) is generated from market swap rates ((s(t))), [x08egin s(t) &= )> \ z(t) &= Bootstrap(s(t)) \ &= )> end] Bumping up ((z(t;t_i+0.5bp))) or down ((z(t;t_i-0.5bp))), ( ext(t_i)) is calculated and this process is applied for all (t_i). [x08egin z(t;t_i+0.5bp) &= )> \ z(t;t_i-0.5bp) &= )>\ text (t_i) & = v (z (t ؛ t_i+0. 5bp))-v (z (t ؛ t_i-0. 5bp)) end ] در اینجا ، (t_i ) ، (i =1،2 ،… ، n_i ) بلوغ یا تاریخ نرخ مبادله بازار هستند که در آن نرخ صفر مربوطه بوت می شود.

دلتا

Market delta approach calculates delta sensitivities by bumping up or down market swap rates one by one in order. Unlike the zero delta, every time we bump one market swap rate of a selected maturity, we should run a bootstrapping for finding new zero curve. Using this zero curve, we can calculate delta sensitivity at time (t_i) as follows. [x08egin s(t;t_i+0.5bp) &= )> \ s(t;t_i-0.5bp) &= )>\ \ z (t)^ & = bootstrap (s (t ؛ t_i+0. 5bp)) \ & = \ z (t)^ & = bootstrap (s (t ؛ t_i-0. 5bp)) \ & = \ \ text (t_i) & = v (z (t)^) - v (z (t)^) end ]

کد R

کد R زیر حساسیت دلتا از IRS را با استفاده از این دو رویکرد محاسبه می کند.

# اقتصاد سنجی مالی و مشتقات ، ML/DL با استفاده از R ، Python ، Tensorflow # توسط سانگ هون لی # https://kiandlee. blogspot. com # حساسیت دلتا از LIBOR IRS را محاسبه کنید Graphics. Off () # همه نمودارها را پاک کنید RM (لیست = ls ()) # همه پرونده ها را از فضای کاری خود حذف کنید # توابع - تعریف # محاسبه قیمت مبادله IRS f_zero_prr_irs - عملکرد ( fixed_rate ، # نرخ ثابت vd. fixed_date ، vd. float_date ، # تاریخ برای دو پا vd. zero_date ، v. zero_rate ، # منحنی صفر (تاریخ ، نرخ) d. spot_date ، no_amt ، # تاریخ نقطه ، AMT اسمی save_cf_yn)<# “y” : CF save # 0) پیش پردازش # تبدیل تاریخ نقطه از تاریخ (د) به عددی (n) n. spot_date - as . numeric (d. spot_date) # درون یابی منحنی صفر vn. zero_date - as . numeric (vd. zero_date) f_linear - تقریبا (vn. zero_date ، v. zero_rate ، روش = "خطی") vn. zero_date. inter - n. spot_date: max (vn. zero_date) v. zero_rate. inter - f_linear (vn. zero_date) # تعداد CFS NI - طول (vd. fixed_date) NJ - طول (vd. float_date) # داده های خروجی. فریم با تاریخ CF و صفر درون یابی آن df. fixed = data. frame (d. date = vd. fixed_date ، n. date = as . numeric (vd. fixed_date)) df. float = data. frame (d. date = vd. float_date ، n. date = as . numeric (vd. float_date)) شماره 1) پا ثابت # نرخ صفر برای تخفیف df. fixed $ Zero_dc = f_linear (as . numeric (df. fixed $ d. date)) # عامل تخفیف df. fixed $ df - exp ( - df. fixed $ Zero_dc * (df. fixed $ n. date - n. spot_date) / 365) # تاو ، cf برای (من در 1: ni)< ymd - df. fixed $ d. date [i] ymd_prev - df. fixed $ d. date [i - 1] if (i = = 1) ymd_prev - d. spot_date D - به عنوان . numeric (strftime (ymd ، format = "٪ d") M - به عنوان . numeric (strftime (ymd ، format = "٪ m") y - به عنوان . numeric (strftime (ymd ، format = "٪ y") d_prev - as . numeric (strftime (ymd_prev ، format = "٪ d") m_prev - به عنوان . numeric (strftime (ymd_prev ، format = "٪ m") y_prev - as . numeric (strftime (ymd_prev ، فرمت = "٪ y") # 30i/360 تاو - (360 * (y - y_prev) + 30 * (m - m_prev) + (d - d_prev)) / 360 # نرخ جریان نقدی df. fixed نرخ $ [i] - fixed_rate # جریان نقدی در زمان TI df. fixed $ cf [i] - fixed_rate * tau * no_amt # کسر روز # ارزش فعلی CF df. fixed $ pv = df. fixed $ cf * df. fixed $ df شماره 2) پای شناور # نرخ صفر برای تخفیف df. float $ Zero_dc = f_linear (به عنوان . numeric (df. float $ d. date)) # عامل تخفیف df. float $ df - exp ( - df. float $ Zero_dc * (df. float $ n. date - n. spot_date) / 365) # تاو ، نرخ رو به جلو ، CF برای (I در 1: NJ)< تاریخ - df. float $ n. date [i] date_prev - df. float $ n. date [i - 1] df - df. float $ df [i] df_prev - df. float $ df [i - 1] if (i = = 1)< date_prev - n. spot_date df_prev - 1 # عمل/360 تاو - (تاریخ - date_prev) / 360 # نرخ رو به جلو fwd_rate - (1 / tau) * (df_prev / df - 1) # نرخ جریان نقدی df. float $ نرخ [i] - fwd_rate # مبلغ جریان نقدی در زمان ti df. float $ cf [i] - fwd_rate * tau * no_amt # کسر روز # ارزش فعلی CF df. float $ pv = df. float $ cf * df. float $ df # جریان نقدی را بررسی کنید if (save_cf_yn = = "y")< # چاپ (df. float) ؛چاپ (df. fixed) Writ. csv (df. float ، "cf_float. csv") Writ. CSV (df. fixed ، "cf_fixed. csv") بازگشت (جمع (df. float $ pv) - جمع (df. fixed $ pv)) # ژنراتور منحنی صفر IRS f_zero_maker_irs - عملکرد ( df. mt ، # اطلاعات اطلاعات بازار # [d. date ، swap_rate ، منبع]] v. unknown_swap_maty_all ، # همه بلوغ مبادله ناشناخته vd. fixed_date ، # تاریخ برای پا ثابت vd. float_date ، # تاریخ برای پای شناور d. spot_date ، # تاریخ نقطه no_amt)<# nominal principal amount # تبدیل تاریخ نقطه از تاریخ (د) به عددی (n) n. spot_date - as . numeric (d. spot_date) # برای منحنی صفر bootstraped DF. ZR - data. frame ( d. date = df. mt $ d. date ، n. date = as . numeric (df. mt $ d. date) ، tau = as . numeric (df. mt $ d. date) - n. spot_date ، taui = as . numeric (df. mt $ d. date) - n. spot_date ، swap_rate = df. mt $ swap_rate ، Zero_Rate = rep (0 ، طول (df. mt $ d. date)) ، df = rep (0 ، طول (df. mt $ d. date))) # tau (i) = t (i)-t (i-1) df. zr $ taui [2: nrow (df. zr)] - df. zr $ n. date [2: nrow (df. zr)] - df. zr $ n. date [1: (nrow (df. zr) - 1)] # ردیف ها را با توجه به منبع یا نوع ابزار خود تقسیم کنید Rows_deposit - که (df. mt $ منبع = = "سپرده") Rows_futures - که (df. mt $ منبع = = "آینده") rows_swap - که (df. mt $ منبع = = "مبادله") # 3. راه انداز - سپرده برای (i in rows_deposit)< شماره 1) ضریب تخفیف برای واریز را محاسبه کنید df. zr $ df [i] - 1 / (1 + df. zr $ swap_rate [i] * df. zr $ tau [i] / 360) شماره 2) DF را به نرخ نقطه تبدیل کنید df. zr $ Zero_Rate [i] - 365 / df. zr $ tau [i] * log (1 / df. zr $ df [i]) # 4. بوت استرپ - آینده # تنظیم محدب انجام نمی شود برای (i in rows_futures)< شماره 1) فاکتور تخفیف از t (i-1) تا t (i) df. zr $ df [i] - 1 / (1 + df. zr $ swap_rate [i] * df. zr $ taui [i] / 360) شماره 2) ضریب تخفیف از تاریخ نقطه تا t (i) df. zr $ df [i] - df. zr $ df [i - 1] * df. zr $ df [i] شماره 3) نرخ صفر از ضریب تخفیف df. zr $ Zero_Rate [i] - 365 / df. zr $ tau [i] * log (1 / df. zr $ df [i]) # 5. Bootstrapping - مبادله k 1 برای (i in rows_swap)< # بلوغ مبادله ناشناخته در سال swap_maty - v. unknown_swap_maty_all [k] # 1) برای یک بلوغ مبادله یک نرخ صفر ناشناخته پیدا کنید M - بهینه (0. 01 ، objf ، Control = List (Abstol = 10 ^( - 20) ، RELTOL = 10 ^( - 20) ، maxit = 50000 ، ردیابی = 2) ، روش = C ("برنت") ، پایین = 0 ، بالایی = 0. 1 ، # برای برنت v. unknown_swap_maty = swap_maty ، # بلوغ صفر ناشناخته v. swap_rate = df. zr $ swap_rate [i] ، # نرخ مبادله مشاهده شده vd. fixed_date = vd. fixed_date ، # تاریخ برای پا ثابت vd. float_date = vd. float_date ، # تاریخ برای پای شناور vd. zero_date_all = df. zr $ d. date [1: i] ، # تمام تاریخ های منحنی صفر v. zero_rate_nown = df. zr $ Zero_rate [1: (i - 1)] ، # نرخ صفر شناخته شده d. spot_date = d. spot_date ، no_amt = no_amt) شماره 2) این منحنی صفر را با نرخ صفر تازه پیدا شده به روز کنید df. zr $ Zero_Rate [i] - m $ par شماره 3) این نرخ صفر جدید را به ضریب تخفیف تبدیل کنید df. zr $ df [i] - exp ( - df. zr $ Zero_Rate [i] * df. zr $ tau [i] / 365) K - K + 1 بازگشت (df. zr) # تابع هدف به حداقل می رسد OBJF - عملکرد ( v. unknown_swap_zero_rate ، # منحنی صفر ناشناخته (نرخ) V. UNKNOWN_SWAP_MATY ، # بلوغ مبادله ناشناخته v. swap_rate ، # نرخ ثابت vd. fixed_date ، # تاریخ برای پا ثابت vd. float_date ، # تاریخ برای پای شناور vd. zero_date_all ، # تمام تاریخ های منحنی صفر v. zero_rate_known ، # منحنی صفر شناخته شده (نرخ) d. spot_date ، # تاریخ نقطه no_amt)<# nominal principal amount # منحنی صفر با نرخ صفر برای مبادله افزایش یافته است v. zero_rate_all - c (v. zero_rate_known ، v. unknown_swap_zero_rate) V. SWAP_PR - NULL # بردار قیمت مبادله k 1 برای (من در v. unknown_swap_maty)< # محاسبه قیمت مبادله IRS swap_pr - f_zero_prr_irs ( v. swap_rate [k] ، # نرخ ثابت ، vd. fixed_date [1 سیگنالهای معاملاتی...

ما را در سایت سیگنالهای معاملاتی دنبال می کنید

برچسب : نویسنده : عارف لرستانی بازدید : <-PostHit-> تاريخ : چهارشنبه 8 شهريور 1402 ساعت: 23:25