QuantLib Python聊聊(四) : 關於物件OvernightIndexedCoupon

更新 發佈閱讀 18 分鐘

前言

在使用 QuantLib Python建構與定價以隔夜利率為基礎的衍生性金融商品(如 SOFR Swap、ESTR Swap)時,OvernightIndexedCoupon 是一個核心元件。本篇文章將深入解析該物件的設計概念、計算邏輯、內建的定價器(Pricer),以及實務應用上的注意事項。

raw-image

什麼是 OvernightIndexedCoupon?

OvernightIndexedCoupon 是一種以每日隔夜利率累積計息的計算利息工具,其常見應用包括:

  • SOFR、ESTR、TONA、SARON 等隔夜利率互換交易(OIS)中的浮動端現金流
  • 資金調度中的浮動利息計算

建構參數簡介

在 QuantLib Python中建構 OvernightIndexedCoupon 時,基本語法如下:

ql.OvernightIndexedCoupon(
paymentDate, # 利息支付日
nominal, # 名目本金
startDate, # 計息起日
endDate, # 計息終日
overnightIndex, # 隔夜利率指標(如 ql.Sofr())
gearing=1.0,
spread=0.0,
refPeriodStart=ql.Date(),
refPeriodEnd=ql.Date(),
dayCounter=ql.Actual360(),
telescopicValueDates=False, # 開啟效能優化與否
averagingMethod=ql.OvernightIndexedCoupon.Compound,
lookbackDays=0,
lockoutDays=0,
applyObservationShift=False
)

無需手動設定Pricer()

IborCoupon 不同,OvernightIndexedCoupon 在建構時會自動綁定對應的 Pricer,根據選定的 averaging method:

raw-image

因此,除非是要自定義Pricer,一般情況下不需要手動設定 .setPricer()

關於參數telescopicValueDates

在處理每日複利(daily compounding)的 OIS 產品(如 SOFR、FedFunds、SARON 等)時,OvernightIndexedCoupon 需要展開整個利率期間的每日值以計算複利,這在期數很長或大量 instrument 並行計算時會造成效能瓶頸。為了解決這個問題,QuantLib 提供了telescopicValueDates 參數。當設定為 True 時,QuantLib 不會逐日展開所有值,而是利用演算法僅保留必要的日期節點來進行複利計算,以提升計算速度同時保留計算精準度。

底下為QuantLib針對這一參數的描述說明:

telescopicValueDates optimizes the schedule for calculation speed, but might fail to produce correct results if the coupon ages by more than a grace period of 7 days. It is therefore recommended not to set this flag to true unless you know exactly what you are doing. The intended use is rather by the OISRateHelper which is safe, since it reinitialises the instrument each time the evaluation date changes.


計息方式:Compound vs Simple

QuantLib Python支援兩種計息邏輯:

Compounded Averaging Rate

raw-image

Simple Averaging Rate

raw-image

其中:

raw-image

QuantLib Python 範例

底下以SOFR為例,計算2025/3/4至2025/4/1這段區間的Compounded rate以及利息。首先初始SOFR interest rate index物件,以及給定每日fixing rate。

ref_date = ql.Date(4, 3, 2025)
# create SOFR Index and link to dummy term structure (flat curve)
sofr_curve = ql.FlatForward(ref_date, 0.0, ql.Actual365Fixed())
sofr_termStrcuture = ql.YieldTermStructureHandle(sofr_curve)
sofr_index = ql.Sofr(sofr_termStrcuture)
calendar = ql.UnitedStates(ql.UnitedStates.GovernmentBond)

# assuming data period is 2025/3/4 ~ 2025/3/31
start_date = ql.Date(4, 3, 2025)
end_date = ql.Date(1, 4, 2025)
# <https://www.newyorkfed.org/markets/reference-rates/sofr>
sofr_rates = [(ql.Date(31,3,2025),4.41),
(ql.Date(28,3,2025),4.34),
(ql.Date(27,3,2025),4.36),
(ql.Date(26,3,2025),4.35),
(ql.Date(25,3,2025),4.33),
(ql.Date(24,3,2025),4.31),
(ql.Date(21,3,2025),4.3),
(ql.Date(20,3,2025),4.29),
(ql.Date(19,3,2025),4.29),
(ql.Date(18,3,2025),4.31),
(ql.Date(17,3,2025),4.32),
(ql.Date(14,3,2025),4.3),
(ql.Date(13,3,2025),4.3),
(ql.Date(12,3,2025),4.31),
(ql.Date(11,3,2025),4.32),
(ql.Date(10,3,2025),4.33),
(ql.Date(7,3,2025),4.34),
(ql.Date(6,3,2025),4.35),
(ql.Date(5,3,2025),4.34),
(ql.Date(4,3,2025),4.33)]

# add daily USD/SOFR fixing rate
for s_rate in sofr_rates:
sofr_index.addFixing(s_rate[0], s_rate[1]/100.0)

利用類別 OvernightIndexedCoupon直接自動計算 SOFR 的浮動利息與複利利率(compounded averaging rate):

# OvernightIndexedCoupon with compounding averaging rate method
coupon_comp = ql.OvernightIndexedCoupon(
paymentDate=end_date,
nominal=1000000.0,
startDate=start_date,
endDate=end_date,
overnightIndex=sofr_index,
gearing=1.0,
spread=0.0,
dayCounter=ql.Actual360(),
averagingMethod = ql.RateAveraging.Compound
)

# calculate compouned interest and rate
payment_amount = coupon_comp.amount()
compounded_rate = coupon_comp.rate()

print(f"SOFR Compounded Rate: {compounded_rate:.6%}")
print(f"Accrued Interest: USD {payment_amount:,.2f}")
SOFR Compounded Rate: 4.331441%
Accrued Interest: USD 3,368.90

同樣的當我們想要計算的是採用Simple averaging方法時,則我們可在物件生成時,指定averagingMethod = ql.RateAveraging.Simple即可。

# OvernightIndexedCoupon with simple averaging rate method
coupon_simple = ql.OvernightIndexedCoupon(
paymentDate=end_date,
nominal=1000000.0,
startDate=start_date,
endDate=end_date,
overnightIndex=sofr_index,
gearing=1.0,
spread=0.0,
dayCounter=ql.Actual360(),
averagingMethod = ql.RateAveraging.Simple
)

# calculate compouned interest and rate
payment_amount = coupon_simple.amount()
compounded_rate = coupon_simple.rate()

print(f"SOFR Compounded Rate: {compounded_rate:.6%}")
print(f"Accrued Interest: USD {payment_amount:,.2f}")
SOFR Compounded Rate: 4.324643%
Accrued Interest: USD 3,363.61

Lag Publication

實務上,SOFR等RFRs 具有「T+1 延遲公布」的特性,這對於實際計算 Compounded Rate和付款利息時,有顯著影響。因此市場上(特別是 ISDA、ARRC 等)發展了幾種主流的處理方式。整理如下:

RFRs延遲發布特性與處理策略

raw-image

類別 OvernightIndexedCoupon 已經可以支援:

  • Lookback Days
  • With or Without Observation Shift

假設我們要計算的SOFR浮動利息是Lookback 5天以及考慮Observation Shift時(即計息區間變為2025/2/25~2025/3/25),可以將這兩參數直接在生成OvernightIndexedCoupon給定,示範程式如下:

# add additional SOFR rates for 5 days lookback
sofr_rates_add = [(ql.Date(3,3,2025),4.33),
(ql.Date(28,2,2025),4.39),
(ql.Date(27,2,2025),4.36),
(ql.Date(26,2,2025),4.33),
(ql.Date(25,2,2025),4.33)]

for s_rate in sofr_rates_add:
sofr_index.addFixing(s_rate[0], s_rate[1]/100.0)

# define Lookback and Observation Shift
lookback_days = 5
use_observation_shift = True # else False,just Lookback, didn't shift observation dates

coupon_obs_shift = ql.OvernightIndexedCoupon(
paymentDate=end_date,
nominal=notional,
startDate=start_date,
endDate=end_date,
overnightIndex=sofr_index,
gearing=1.0,
spread=0.0,
refPeriodStart=ql.Date(),
refPeriodEnd=ql.Date(),
dayCounter=ql.Actual360(),
lookbackDays=lookback_days,
telescopicValueDates=False,
applyObservationShift=use_observation_shift
)

# output result
print(f"SOFR Compounded Rate with Lookback {lookback_days} days "
f"({'with shift' if use_observation_shift else 'no shift'}): "
f"{coupon_obs_shift.rate():.6%}")
print(f"Accrued Interest: USD {coupon_obs_shift.amount():,.2f}")
SOFR Compounded Rate with Lookback 5 days (with shift): 4.333231%
Accrued Interest: USD 3,370.29

結語

OvernightIndexedCoupon 是 QuantLib 中計算每日隔夜利息的核心元件。預設使用複利方式計息,並自動附帶對應 pricer。適合用於 SOFR、ESTR等OIS 交易的定價與風險評估。同時我們也提及在目前RFRs發佈上具有延遲一天的特性,因此真正在計算compounded averaging rate時,需考量Lookback days以及Observation shift等交易條件。


如果你覺得這篇文章有幫助,或是有什麼想法想交流,歡迎留言或私訊我,一起討論~接下來我還會陸續更新這個 QuantLib Python 的系列,對金融(財務)工程實務有興趣的朋友可以追蹤關注一下。謝謝你的閱讀!

參考資料

  1. Ballabio, Luigi. Implementing QuantLib. Online resource
  2. Goutham Balaraman, Luigi Ballabio. QuantLib Python Cookbook. Leanpub, 2020. https://leanpub.com/quantlibpythoncookbook
  3. https://www.newyorkfed.org/medialibrary/Microsites/arrc/files/2021/users-guide-to-sofr2021-update.pdf
  4. https://www.newyorkfed.org/markets/reference-rates/additional-information-about-reference-rates#tgcr_bgcr_sofr_calculation_methodology







留言
avatar-img
Quantivor
2會員
10內容數
在金融市場中,從外匯、利率交換、選擇權,到複雜結構型商品,每一種商品背後,都仰賴嚴謹的模型運算與穩定的計算工具。QuantLib 作為一套專為金融商品設計的開源程式庫,提供了從定價模型、利率與波動率曲線到風險分析的完整能力,讓理論走向實務。透過這裡跟大家分享如何使用QuantLib-Python這強大的工具。
Quantivor的其他內容
2025/05/04
浮動利率利息(Floating Rate Interest)往往是根據某種銀行間拆款(Interbank Bank Offering Rate, IBOR) 指標利率(如過往的USD LIBOR、TAIBOR)來決定。QuantLib 提供的 IborCoupon物件能幫助我們迅速計算出浮動利息。
Thumbnail
2025/05/04
浮動利率利息(Floating Rate Interest)往往是根據某種銀行間拆款(Interbank Bank Offering Rate, IBOR) 指標利率(如過往的USD LIBOR、TAIBOR)來決定。QuantLib 提供的 IborCoupon物件能幫助我們迅速計算出浮動利息。
Thumbnail
2025/04/27
在金融市場中,利率無所不在,從存放款利率、債券殖利率到衍生性金融商品定價,無不與「時間價值」息息相關。隨著全球轉向無風險利率(RFRs)作為新一代定價基準,如SOFR(美國)、ESTR(歐元區)、TONA(日本)等,這篇文章帶你認識這些新的利率指標與QuantLib Python中的應用。
Thumbnail
2025/04/27
在金融市場中,利率無所不在,從存放款利率、債券殖利率到衍生性金融商品定價,無不與「時間價值」息息相關。隨著全球轉向無風險利率(RFRs)作為新一代定價基準,如SOFR(美國)、ESTR(歐元區)、TONA(日本)等,這篇文章帶你認識這些新的利率指標與QuantLib Python中的應用。
Thumbnail
2025/04/27
在使用 QuantLib Python建構金融商品或是利率衍生商品現金流時,Date、Calendar 與 Schedule 是最基本且重要的元件。這些元件看似簡單,實際上在處理金融市場中的現金流日期展開邏輯扮演著重要的角色。了解這些基礎物件的運作將有助於後續對這程式庫的學習。
Thumbnail
2025/04/27
在使用 QuantLib Python建構金融商品或是利率衍生商品現金流時,Date、Calendar 與 Schedule 是最基本且重要的元件。這些元件看似簡單,實際上在處理金融市場中的現金流日期展開邏輯扮演著重要的角色。了解這些基礎物件的運作將有助於後續對這程式庫的學習。
Thumbnail
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
在使用 QuantLib Python建構金融商品或是利率衍生商品現金流時,Date、Calendar 與 Schedule 是最基本且重要的元件。這些元件看似簡單,實際上在處理金融市場中的現金流日期展開邏輯扮演著重要的角色。了解這些基礎物件的運作將有助於後續對這程式庫的學習。
Thumbnail
在使用 QuantLib Python建構金融商品或是利率衍生商品現金流時,Date、Calendar 與 Schedule 是最基本且重要的元件。這些元件看似簡單,實際上在處理金融市場中的現金流日期展開邏輯扮演著重要的角色。了解這些基礎物件的運作將有助於後續對這程式庫的學習。
Thumbnail
「價值投資」專欄每月分享至少 4 篇文章介紹優質公司,內容並未對證券價值進行分析,還請各位依據自身狀況作出交易決策。專欄訂閱費用每月 99元,歡迎訂閱支持我。 每年 $999 訂閱方案 價值投資 - 基本面研究 X 法人最新財測的方案|方格子 vocus 每月 $99 訂閱方案 價值投資 - 基
Thumbnail
「價值投資」專欄每月分享至少 4 篇文章介紹優質公司,內容並未對證券價值進行分析,還請各位依據自身狀況作出交易決策。專欄訂閱費用每月 99元,歡迎訂閱支持我。 每年 $999 訂閱方案 價值投資 - 基本面研究 X 法人最新財測的方案|方格子 vocus 每月 $99 訂閱方案 價值投資 - 基
Thumbnail
本週內容:(1)投資懷抱夢想並不愚蠢、(2)單筆投資0050最後會把股票賣光嗎、(3)你可以選擇慢慢變富、(4)主人遛狗的各種發想、(5)公債還得起才有價值、(6)營建股合約負債觀察與選股邏輯、(7)第八波信用管制?、(8)潛力股資訊總整理、(9)潛力股追蹤:八方雲集、材料-KY、迅得、威宏-KY
Thumbnail
本週內容:(1)投資懷抱夢想並不愚蠢、(2)單筆投資0050最後會把股票賣光嗎、(3)你可以選擇慢慢變富、(4)主人遛狗的各種發想、(5)公債還得起才有價值、(6)營建股合約負債觀察與選股邏輯、(7)第八波信用管制?、(8)潛力股資訊總整理、(9)潛力股追蹤:八方雲集、材料-KY、迅得、威宏-KY
Thumbnail
最近趁著閒暇之餘想要學習Python,上了幾堂課後,突然想活用一下Python來解決生活上的財務小問題,試了一下後還真的可行,就讓我們來看看怎麼做吧!附帶一提非常推薦LearnPyhon.com的學習資源,會一步一步的帶你學習創作自己的Code,對文組初學者來說非常的好上手。
Thumbnail
最近趁著閒暇之餘想要學習Python,上了幾堂課後,突然想活用一下Python來解決生活上的財務小問題,試了一下後還真的可行,就讓我們來看看怎麼做吧!附帶一提非常推薦LearnPyhon.com的學習資源,會一步一步的帶你學習創作自己的Code,對文組初學者來說非常的好上手。
Thumbnail
哈囉。 歡迎,來到股市收心操。
Thumbnail
哈囉。 歡迎,來到股市收心操。
Thumbnail
 大家好。很高興在這個新的部落格上面。有機會能再跟大家一起討論交易的兩三事。未來我們將在這個新的地方上面;與大家一步一步地,建立起屬於我們自己個性化的量化交易平臺;敬請期待。
Thumbnail
 大家好。很高興在這個新的部落格上面。有機會能再跟大家一起討論交易的兩三事。未來我們將在這個新的地方上面;與大家一步一步地,建立起屬於我們自己個性化的量化交易平臺;敬請期待。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News