QuantLib Swaption Vol Cube

Aug 27 2020

ขณะนี้ฉันกำลังพยายามแลกเปลี่ยนราคาภายใต้ QuantLib / Python โดยใช้ลูกบาศก์ความผันผวนโดยใช้ql.SwaptoinVolCube2. จากเอกสารประกอบ:

optionTenors = ['1y', '2y', '3y']
swapTenors = [ '5Y', '10Y']
strikeSpreads = [ -0.01, 0.0, 0.01]
volSpreads = [
    [0.5, 0.55, 0.6],
    [0.5, 0.55, 0.6],
    [0.5, 0.55, 0.6],
    [0.5, 0.55, 0.6],
    [0.5, 0.55, 0.6],
    [0.5, 0.55, 0.6],
]

optionTenors = [ql.Period(tenor) for tenor in optionTenors]
swapTenors = [ql.Period(tenor) for tenor in swapTenors]
volSpreads = [[ql.QuoteHandle(ql.SimpleQuote(v)) for v in row] for row in volSpreads]

swapIndexBase = ql.EuriborSwapIsdaFixA(ql.Period(1, ql.Years), e6m_yts, ois_yts)
shortSwapIndexBase = ql.EuriborSwapIsdaFixA(ql.Period(1, ql.Years), e6m_yts, ois_yts)
vegaWeightedSmileFit = False

volCube = ql.SwaptionVolatilityStructureHandle(
    ql.SwaptionVolCube2(
        ql.SwaptionVolatilityStructureHandle(swaptionVolMatrix),
        optionTenors,
        swapTenors,
        strikeSpreads,
        volSpreads,
        swapIndexBase,
        shortSwapIndexBase,
        vegaWeightedSmileFit)
)

ขณะนี้ฉันสงสัยว่าดัชนีสวอปทั้งสองมีบทบาทอย่างไร

ฉันคิดว่ามันมีส่วนเกี่ยวข้องกับการคำนวณ ATM และสเปรดขีดฆ่าเทียบกับ ATM แต่ฉันไม่เข้าใจว่าทำไมจึงต้องใช้ดัชนีสองตัวสำหรับสิ่งนี้

ขอบคุณสำหรับคำแนะนำ!

คำตอบ

3 DavidDuarte Aug 27 2020 at 04:00

swaption vol cube เป็นชุดของชั้นพื้นผิวแต่ละชั้นหมายถึงการนัดหยุดงานที่กำหนดและมี vols สำหรับการรวมกันของ option expiries และ swap tenors ที่มีพื้นฐานเดียวกัน: swap กับ conventions ที่กำหนด พื้นฐานนั้นกำหนดโดยswapIndexBase.

อย่างไรก็ตามสำหรับการครบกำหนดที่สั้นกว่าการประชุมมักจะแตกต่างกัน ตัวอย่างเช่นในสกุลเงินยูโรคุณมี swap vs 6M Euribor สำหรับ tenors> 1Y และ swap เทียบกับ 3M Euribor สำหรับอายุ 1Y shortSwapIndexBaseจะใช้เพื่อระบุที่สองนี้พื้นฐาน

ตัวอย่างใน readthedocs อาจดีกว่าในแง่นั้น