eqDividendCurveBuilder
Syntax
eqDividendCurveBuilder(referenceDate, termDates, method, [futPrices],
[callPrices], [putPrices], [strikes], spot, discountCurve,
dayCountConvention='Actual365', [curveName])
Details
Builds an equity dividend curve.
Parameters
referenceDate: A DATE scalar specifying the curve’s reference date.
termDates: A DATE vector specifying the curve’s term dates, which must be monotonically increasing and larger than referenceDate.
method: A STRING scalar specifying the calculating method, which can be “CallPutParity” or “FuturesPrice”.
-
When method = “CallPutParity”, implied dividend yields are derived via put-call parity. In this case, callPrices, putPrices, and strikes are required.
-
When method = “FuturesPrice”, implied dividend yields are deriving via the futures price formula. In this case, futPrices is required.
futPrices (optional): A positive DOUBLE vector specifying the future prices. It should have the same length as termDates.
callPrices (optional): A positive DOUBLE matrix specifying the call prices, which must have the same length as termDates.
putPrices (optional): A positive DOUBLE matrix specifying the put prices.
strikes (optional): A DOUBLE matrix specifying the strike prices, which must be monotonically increasing.
Notes:
-
callPrices, putPrices, and strikes must have the same shape and the number of columns should match the length of termDates.
-
futPrices must also have the same length as termDates.
spot: A positive DOUBLE scalar specifying the spot price of the underlying asset.
discountCurve: A MKTDATA object of type IrYieldCurve specifying the discount curve.
dayCountConvention: A STRING scalar specifying the day count convention to use, which can be:
- "Actual365" (default): actual/365
- "Actual360": actual/360
- "Thirty360US": US (NASD) 30/360
- "Thirty360EU": European 30/360
- "ActualActualISMA": actual/actual according to ISMA (International Securities Market Association) convention
- "ActualActualISDA": actual/actual according to ISDA (International Swaps and Derivatives Association) convention
curveName (optional): A STRING scalar specifying the curve name.
Returns
A MKTDATA object.
Examples
CallPutParity
Build a dividend curve for the SSE 50 ETF (510050.SH) using the put-call parity method.
referenceDate = 2026.02.13
spot = 3.114 // Close Price Of 510050.SH
// 1. Term Structure (Option Expiry Dates)
termDates = [2026.02.25, 2026.03.25, 2026.06.24, 2026.09.23]
// 2. Raw Data Matrices (Settlement Price)
callPrices = matrix(
[0.2640, 0.2140, 0.1640, 0.1140, 0.0327, 0.0042, 0.0016, 0.0008, 0.0003, 0.0002],
[0.2723, 0.2289, 0.1810, 0.1424, 0.0721, 0.0323, 0.0138, 0.0075, 0.0050, 0.0039],
[0.3150, 0.2770, 0.2391, 0.2073, 0.1519, 0.1061, 0.0731, 0.0519, 0.0379, 0.0280],
[0.3521, 0.3170, 0.2850, 0.2555, 0.2030, 0.1577, 0.1243, 0.0986, 0.0790, 0.0642]
)
putPrices = matrix(
[0.0004, 0.0008, 0.0021, 0.0044, 0.0215, 0.0928, 0.1889, 0.2884, 0.3895, 0.4903],
[0.0090, 0.0124, 0.0170, 0.0260, 0.0590, 0.1225, 0.1993, 0.2928, 0.3918, 0.4903],
[0.0352, 0.0463, 0.0571, 0.0746, 0.1188, 0.1733, 0.2401, 0.3204, 0.4049, 0.4938],
[0.0601, 0.0739, 0.0903, 0.1091, 0.1548, 0.2113, 0.2795, 0.3471, 0.4307, 0.5120]
)
strikes = matrix(
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000]
)
// 3. Discount Curve
// Data From https://www.chinamoney.com.cn/english/bmkycvirc/
terms = [1d, 1w, 2w, 3w, 1M, 2M, 3M, 6M, 9M, 1y, 18M, 2y, 3y]
dates = array(DATE, size(terms))
for(i in 0..(size(terms)-1)){
dates[i] = transFreq(temporalAdd(referenceDate, terms[i]), "CFET", "right", "right")
}
discountCurveDict = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"curveName": "CNY_FR_007",
"referenceDate": referenceDate,
"currency": "CNY",
"dayCountConvention": "Actual365",
"compounding": "Continuous",
"interpMethod": "Linear",
"extrapMethod": "Flat",
"dates": dates,
"values":[1.5577, 1.5247, 1.5181, 1.5181, 1.5195, 1.5216, 1.5167, 1.4964, 1.4758, 1.4732, 1.4859, 1.4985,1.5306] \ 100
}
discountCurve = parseMktData(discountCurveDict)
// 4. Implied Dividend Curve
// Using Call-Put Parity on the full matrices
dividendCurve = eqDividendCurveBuilder(
referenceDate, termDates, "CallPutParity", ,
callPrices, putPrices, strikes, spot, discountCurve, "Actual365"
)
print(dividendCurve)
FuturesPrice
Build a dividend curve for the CSI 300 Index (000300.SH) using the futures price method.
referenceDate = 2026.02.13
spot = 4660.41 // Close Price Of 000300.SH
// 1. Futures Price
termDates = [2026.02.24, 2026.03.20, 2026.06.22, 2026.09.18] // IF2602/03/06/09 Expiry Date
futPrices = [4650.6, 4639.6, 4601.2, 4540.4] // Settlement Price
// 2. Discount Curve
// Data From https://www.chinamoney.com.cn/english/bmkycvirc/
terms = [1d, 1w, 2w, 3w, 1M, 2M, 3M, 6M, 9M, 1y, 18M, 2y, 3y]
dates = array(DATE, size(terms))
for(i in 0..(size(terms)-1)){
dates[i] = transFreq(temporalAdd(referenceDate, terms[i]), "CFET", "right", "right")
}
discountCurveDict = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"curveName": "CNY_FR_007",
"referenceDate": referenceDate,
"currency": "CNY",
"dayCountConvention": "Actual365",
"compounding": "Continuous",
"interpMethod": "Linear",
"extrapMethod": "Flat",
"dates": dates,
"values":[1.5577, 1.5247, 1.5181, 1.5181, 1.5195, 1.5216, 1.5167, 1.4964, 1.4758, 1.4732, 1.4859, 1.4985, 1.5306] \ 100
}
discountCurve = parseMktData(discountCurveDict)
//3. Build Dividend Curve
dividendCurve = eqDividendCurveBuilder(referenceDate, termDates, "FuturesPrice", futPrices,
, , , spot, discountCurve, "Actual365", "HS300")
print(dividendCurve)
Related Function: parseMktData
