{"id":1439,"date":"2021-06-17T09:28:00","date_gmt":"2021-06-17T09:28:00","guid":{"rendered":"https:\/\/nag.com\/?post_type=insights&#038;p=1141"},"modified":"2023-07-05T14:56:09","modified_gmt":"2023-07-05T14:56:09","slug":"optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques","status":"publish","type":"insights","link":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/","title":{"rendered":"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques"},"content":{"rendered":"<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>In this post, we demonstrate how <strong>DFO can speed up a practical calibration problem arising frequently in the finance industry<\/strong>: calibrating an option pricing model to market data.<\/p>\n<p>The following material is based on a recent webinar we presented, a recording is available\u00a0<a href=\"https:\/\/support.nag.com\/form\/watch-dfo-webinar\">here<\/a>.<\/p>\n<h3>Recent improvements in DFO solvers<\/h3>\n<p>DFO has seen enormous activity in the last years since our previous\u00a0<a href=\"https:\/\/www.nag.com\/blog\/optcorner-price-derivatives-derivative-free-optimization\">DFO post<\/a>. <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG collaborated on a research project with\u00a0<a href=\"https:\/\/www.maths.ox.ac.uk\/people\/coralia.cartis\" target=\"_blank\" rel=\"noopener\">Coralia Cartis<\/a>\u00a0and\u00a0<a href=\"https:\/\/maths.anu.edu.au\/people\/academics\/lindon-roberts\" target=\"_blank\" rel=\"noopener\">Lindon Roberts<\/a>\u00a0from the University of Oxford. This research led to significant improvements, such as noise resilience and enhancements to interpolation models for structured problems, and brought the state of the art of DFO techniques [1] into the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library. We now offer a bound-constrained nonlinear least squares solver suitable for data fitting problems,\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04ffc.html\">handle_solve_dfls<\/a>\u00a0(<a href=\"https:\/\/www.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04fff.html\">e04ff<\/a>), as well as one that is aimed at general nonlinear functions,\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04jdc.html\">handle_solve_dfno<\/a>\u00a0(<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04jdf.html\">e04jd<\/a>). We also provide alternative interfaces (<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04intro.html#recomm_2a\">reverse communication<\/a>) to pass the function values to the solvers,\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04fgc.html\">handle_solve_dfls_rcomm<\/a>\u00a0(<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04fgf.html\">e04fg<\/a>) and\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04jec.html\">handle_solve_dfno_rcomm<\/a>\u00a0(<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04jef.html\">e04je<\/a>), respectively.<\/p>\n<h3>Pricing European Options: calibrating the Heston model<\/h3>\n<p>A European option is a contract giving the buyer the option to buy (call) or sell (put) an underlying at a given price (strike) and expiration date (maturity). Pricing the option consists in attributing it a price based on the probability that the buyer will want to exercise the option at maturity.<\/p>\n<p>Many numerical pricing methods have been introduced throughout the years, the most common ones still being based on the Black-Scholes equations. However, the Black-Scholes model has some shortcomings, among which the assumption that the volatility is constant over time. It is in fact observed that market implied volatilities are smile-shaped. Stochastic volatility models such as Heston\u2019s were introduced to try to explain this shape. The model consists in the following set of equations:<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<math class=\"equation\" xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\">\n  <mtable class=\"aligned\">\n    <mtr>\n      <mtd columnalign=\"right\">\n        <mi>d<\/mi>\n        <msub>\n          <mrow>\n            <mi>S<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n        <\/msub>\n      <\/mtd>\n      <mtd columnalign=\"left\">\n        <mo class=\"MathClass-rel\">=<\/mo>\n        <mi>&#x3BC;<\/mi>\n        <msub>\n          <mrow>\n            <mi>S<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n        <\/msub>\n        <msub>\n          <mrow>\n            <mi>d<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n        <\/msub>\n        <mo class=\"MathClass-bin\">+<\/mo>\n        <mi>&#x3C3;<\/mi>\n        <msqrt>\n          <mrow>\n            <msub>\n              <mrow>\n                <mi>v<\/mi>\n              <\/mrow>\n              <mrow>\n                <mi>t<\/mi>\n              <\/mrow>\n            <\/msub>\n          <\/mrow>\n        <\/msqrt>\n        <msub>\n          <mrow>\n            <mi>S<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n        <\/msub>\n        <mi>d<\/mi>\n        <msubsup>\n          <mrow>\n            <mi>W<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n          <mrow>\n            <mn>1<\/mn>\n          <\/mrow>\n        <\/msubsup>\n      <\/mtd>\n      <mtd columnalign=\"right\" \/>\n    <\/mtr>\n    <mtr>\n      <mtd columnalign=\"right\">\n        <mi>d<\/mi>\n        <msub>\n          <mrow>\n            <mi>v<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n        <\/msub>\n      <\/mtd>\n      <mtd columnalign=\"left\">\n        <mo class=\"MathClass-rel\">=<\/mo>\n        <mi>&#x3BB;<\/mi>\n        <mrow>\n          <mo class=\"MathClass-open\">(<\/mo>\n          <mrow>\n            <mn>1<\/mn>\n            <mo class=\"MathClass-bin\">&#8211;<\/mo>\n            <msub>\n              <mrow>\n                <mi>v<\/mi>\n              <\/mrow>\n              <mrow>\n                <mi>t<\/mi>\n              <\/mrow>\n            <\/msub>\n          <\/mrow>\n          <mo class=\"MathClass-close\">)<\/mo>\n        <\/mrow>\n        <mi>d<\/mi>\n        <mi>t<\/mi>\n        <mo class=\"MathClass-bin\">+<\/mo>\n        <mi>&#x3B1;<\/mi>\n        <msqrt>\n          <mrow>\n            <msub>\n              <mrow>\n                <mi>v<\/mi>\n              <\/mrow>\n              <mrow>\n                <mi>t<\/mi>\n              <\/mrow>\n            <\/msub>\n          <\/mrow>\n        <\/msqrt>\n        <mi>d<\/mi>\n        <msubsup>\n          <mrow>\n            <mi>W<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n          <mrow>\n            <mn>2<\/mn>\n          <\/mrow>\n        <\/msubsup>\n      <\/mtd>\n    <\/mtr>\n    <mtr>\n      <mtd columnalign=\"right\">\n        <mi>d<\/mi>\n        <msubsup>\n          <mrow>\n            <mi>W<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n          <mrow>\n            <mn>1<\/mn>\n          <\/mrow>\n        <\/msubsup>\n        <mo class=\"MathClass-bin\">&#x22C5;<\/mo>\n        <mi>d<\/mi>\n        <msubsup>\n          <mrow>\n            <mi>W<\/mi>\n          <\/mrow>\n          <mrow>\n            <mi>t<\/mi>\n          <\/mrow>\n          <mrow>\n            <mn>2<\/mn>\n          <\/mrow>\n        <\/msubsup>\n      <\/mtd>\n      <mtd columnalign=\"left\">\n        <mo class=\"MathClass-rel\">=<\/mo>\n        <mi>&#x3C1;<\/mi>\n        <mi>d<\/mi>\n        <mi>t<\/mi>\n      <\/mtd>\n    <\/mtr>\n  <\/mtable>\n<\/math>\n\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>where \\(S_{t}\\) is the spot price of the underlying \\(vt\\) is the time-dependent volatility and \\( (dW_{t}^1 , dW_{t}^2) \\) are two Brownian motions.<\/p>\n<p>This model still depends on 4 parameters that are not easy to directly observe in the market: the volatility scaling \\( \u03c3 \\) the mean reversion rate \\( \u03bb \\) the volatility of volatility \\(a\\) and the Brownian motion correlation \\(\u03c1\\). These parameters, therefore, need to be calibrated. This can be done by observing historical data and trying to optimize the parameters to make our model prediction match it as closely as possible. This is a great candidate for DFO due to the lack of readily available derivatives and relatively expensive evaluation.<\/p>\n<h4>Introducing term structure in the Heston model<\/h4>\n<p>The Heston equations still assume that our 4 parameters are constant with respect to time, which does not necessarily correspond to market reality. To alleviate this problem, a possible extension is to add term structure: \\( \u03c3, \u03bb, \u03b1 \\) and \\(\u03c1\\) are only considered constant over fixed time periods. This allows the model to better mimic market behaviour but also multiplies the number of parameters to calibrate by the number of time periods considered.<\/p>\n<p>An implementation of the Heston model with term structure is available in the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library (<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/s\/s30ncc.html\">opt_heston_term<\/a>,\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/s\/s30ncf.html\">s30ncf<\/a>) and is the one used in the following numerical experiments.<\/p>\n<h4>Setting up the calibration problem<\/h4>\n<p>We have access to historical data in the foreign exchange market for the currency pair EUR-USD ranging from 2012 to 2016. For each date, we have data for 7 maturities (2m, 3m, 6m, 1y, 2y, 3y and 5y):<\/p>\n<ul class=\"itemize1\">\n<li class=\"itemize\">EUR risk-free rate<\/li>\n<li class=\"itemize\">USD risk-free rate<\/li>\n<li class=\"itemize\">25- <span id=\"MathJax-Element-13-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot; display=&quot;inline&quot;&gt;&lt;mi&gt;&amp;#x394;&lt;\/mi&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-180\" class=\"math\"><span id=\"MathJax-Span-181\" class=\"mrow\"><span id=\"MathJax-Span-182\" class=\"mi\">\u0394<\/span><\/span><\/span><\/span>\u00a0RR quotes<\/li>\n<li class=\"itemize\">25- <span id=\"MathJax-Element-14-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot; display=&quot;inline&quot;&gt;&lt;mi&gt;&amp;#x394;&lt;\/mi&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-183\" class=\"math\"><span id=\"MathJax-Span-184\" class=\"mrow\"><span id=\"MathJax-Span-185\" class=\"mi\">\u0394 <\/span><\/span><\/span><\/span>BF quotes<\/li>\n<li class=\"itemize\">ATM quote<\/li>\n<\/ul>\n<p>One apparent issue with this data is that we have only 3 quotes and 4 parameters to tune even without considering term structure. To avoid over-fitting, we chose to fix one of the parameters\u00a0<span id=\"MathJax-Element-15-Frame\" class=\"MathJax\" style=\"box-sizing: border-box; display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 16px; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; position: relative;\" tabindex=\"0\" role=\"presentation\" data-mathml=\"&lt;math xmlns=&quot;http:\/\/www.w3.org\/1998\/Math\/MathML&quot; display=&quot;inline&quot;&gt;&lt;mi&gt;&amp;#x3BB;&lt;\/mi&gt;&lt;\/math&gt;\"><span id=\"MathJax-Span-186\" class=\"math\"><span id=\"MathJax-Span-187\" class=\"mrow\"><span id=\"MathJax-Span-188\" class=\"mi\">\u03bb <\/span><\/span><\/span><\/span>to a constant value after some numerical experiments. Without term structure, calibrating the Heston model would then consist in solving the nonlinear least squares optimization problem:<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<math class=\"equation\" xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\">\n  <munder class=\"msub\">\n    <mrow>\n      <mo class=\"qopname\">min<\/mo>\n    <\/mrow>\n    <mrow>\n      <mi>&#x3B1;<\/mi>\n      <mo class=\"MathClass-punc\">,<\/mo>\n      <mi>&#x3C1;<\/mi>\n      <mo class=\"MathClass-punc\">,<\/mo>\n      <mi>&#x3C3;<\/mi>\n    <\/mrow>\n  <\/munder>\n  <mfrac>\n    <mrow>\n      <mn>1<\/mn>\n    <\/mrow>\n    <mrow>\n      <mn>2<\/mn>\n    <\/mrow>\n  <\/mfrac>\n  <munderover accent=\"false\" accentunder=\"false\">\n    <mrow>\n      <mo mathsize=\"big\">&#x2211;<\/mo>\n    <\/mrow>\n    <mrow>\n      <mi>i<\/mi>\n      <mo class=\"MathClass-rel\">=<\/mo>\n      <mn>1<\/mn>\n    <\/mrow>\n    <mrow>\n      <mi>m<\/mi>\n    <\/mrow>\n  <\/munderover>\n  <msup>\n    <mrow>\n      <mfenced close=\")\" open=\"(\" separators=\"\">\n        <mrow>\n          <msub>\n            <mrow>\n              <mi>H<\/mi>\n            <\/mrow>\n            <mrow>\n              <mi>i<\/mi>\n            <\/mrow>\n          <\/msub>\n          <mrow>\n            <mo class=\"MathClass-open\">(<\/mo>\n            <mrow>\n              <mi>&#x3B1;<\/mi>\n              <mo class=\"MathClass-punc\">,<\/mo>\n              <mi>&#x3C1;<\/mi>\n              <mo class=\"MathClass-punc\">,<\/mo>\n              <mi>&#x3C3;<\/mi>\n            <\/mrow>\n            <mo class=\"MathClass-close\">)<\/mo>\n          <\/mrow>\n          <mo class=\"MathClass-bin\">&#8211;<\/mo>\n          <msubsup>\n            <mrow>\n              <mi>M<\/mi>\n            <\/mrow>\n            <mrow>\n              <mi>i<\/mi>\n            <\/mrow>\n            <mrow>\n              <mi>m<\/mi>\n              <mi>a<\/mi>\n              <mi>r<\/mi>\n              <mi>k<\/mi>\n              <mi>e<\/mi>\n              <mi>t<\/mi>\n            <\/mrow>\n          <\/msubsup>\n        <\/mrow>\n      <\/mfenced>\n    <\/mrow>\n    <mrow>\n      <mn>2<\/mn>\n    <\/mrow>\n  <\/msup>\n<\/math>\n\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>where \\(H_{i} (\u03b1, \u03c1, \u03c3) \\) are the prices predicted by the model and \\(m_{i}market\\) the actual data.<\/p>\n<p>The next step is to choose the number of time periods to set in the term structure. With 7 maturities it is natural to consider 7 time periods for our term structure: for every date, we consider \\(k\\) time periods for the \\(k^th \\) maturity.<\/p>\n<p>With this structure, each maturity depending on the parameters of the previous ones plus its own, it was also natural to choose to fit the parameters sequentially. The first parameters \\( (<span id=\"MathJax-Span-296\" class=\"mrow\"><span id=\"MathJax-Span-297\" class=\"mi\">\u03b1_{1}, \u03c1_{1}, <span id=\"MathJax-Span-308\" class=\"mrow\"><span id=\"MathJax-Span-309\" class=\"mi\">\u03c3_{1} ) \\) are tuned to the quotes of the 2m maturity, then fixed to their optimal values and \\( (\u03b1_{2}, \u03c1_{2}, \u03c3_{2}) \\) are tuned to the second maturity. the process continues until we end up with a sequence of seven 3-parameters calibration problems:<\/span><\/span><\/span><\/span><\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<math class=\"equation\" xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\">\n  <mfenced close=\"\" open=\"{\" separators=\"\">\n    <mrow>\n      <mtable class=\"array\" align=\"axis\" columnlines=\"none\" equalcolumns=\"false\" equalrows=\"false\" style=\"\">\n        <mtr>\n          <mtd class=\"array\" columnalign=\"left\">\n            <munder class=\"msub\">\n              <mrow>\n                <mo class=\"qopname\">min<\/mo>\n              <\/mrow>\n              <mrow>\n                <msub>\n                  <mrow>\n                    <mi>&#x3B1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>1<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>1<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C3;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>1<\/mn>\n                  <\/mrow>\n                <\/msub>\n              <\/mrow>\n            <\/munder>\n            <munderover accent=\"false\" accentunder=\"false\">\n              <mrow>\n                <mo mathsize=\"big\">&#x2211;<\/mo>\n              <\/mrow>\n              <mrow>\n                <mi>i<\/mi>\n                <mo class=\"MathClass-rel\">=<\/mo>\n                <mn>1<\/mn>\n              <\/mrow>\n              <mrow>\n                <mi>m<\/mi>\n              <\/mrow>\n            <\/munderover>\n            <msup>\n              <mrow>\n                <mfenced close=\")\" open=\"(\" separators=\"\">\n                  <mrow>\n                    <msub>\n                      <mrow>\n                        <mi>H<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                    <mrow>\n                      <mo class=\"MathClass-open\">(<\/mo>\n                      <mrow>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3B1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C3;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                      <\/mrow>\n                      <mo class=\"MathClass-close\">)<\/mo>\n                    <\/mrow>\n                    <mo class=\"MathClass-bin\">&#8211;<\/mo>\n                    <msub>\n                      <mrow>\n                        <mi>M<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                  <\/mrow>\n                <\/mfenced>\n              <\/mrow>\n              <mrow>\n                <mn>2<\/mn>\n              <\/mrow>\n            <\/msup>\n          <\/mtd>\n          <mtd class=\"array\" columnalign=\"right\">\n            <mrow>\n              <mo class=\"MathClass-open\">(<\/mo>\n              <mrow>\n                <mi>P<\/mi>\n                <mn>1<\/mn>\n              <\/mrow>\n              <mo class=\"MathClass-close\">)<\/mo>\n            <\/mrow>\n          <\/mtd>\n        <\/mtr>\n        <mtr>\n          <mtd class=\"array\" columnalign=\"left\">\n            <munder class=\"msub\">\n              <mrow>\n                <mo class=\"qopname\">min<\/mo>\n              <\/mrow>\n              <mrow>\n                <msub>\n                  <mrow>\n                    <mi>&#x3B1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>2<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>2<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C3;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>2<\/mn>\n                  <\/mrow>\n                <\/msub>\n              <\/mrow>\n            <\/munder>\n            <munderover accent=\"false\" accentunder=\"false\">\n              <mrow>\n                <mo mathsize=\"big\">&#x2211;<\/mo>\n              <\/mrow>\n              <mrow>\n                <mi>i<\/mi>\n                <mo class=\"MathClass-rel\">=<\/mo>\n                <mn>1<\/mn>\n              <\/mrow>\n              <mrow>\n                <mi>m<\/mi>\n              <\/mrow>\n            <\/munderover>\n            <msup>\n              <mrow>\n                <mfenced close=\")\" open=\"(\" separators=\"\">\n                  <mrow>\n                    <msub>\n                      <mrow>\n                        <mi>H<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                    <mrow>\n                      <mo class=\"MathClass-open\">(<\/mo>\n                      <mrow>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3B1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3B1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>2<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>2<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C3;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C3;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>2<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                      <\/mrow>\n                      <mo class=\"MathClass-close\">)<\/mo>\n                    <\/mrow>\n                    <mo class=\"MathClass-bin\">&#8211;<\/mo>\n                    <msub>\n                      <mrow>\n                        <mi>M<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                  <\/mrow>\n                <\/mfenced>\n              <\/mrow>\n              <mrow>\n                <mn>2<\/mn>\n              <\/mrow>\n            <\/msup>\n          <\/mtd>\n          <mtd class=\"array\" columnalign=\"right\">\n            <mrow>\n              <mo class=\"MathClass-open\">(<\/mo>\n              <mrow>\n                <mi>P<\/mi>\n                <mn>2<\/mn>\n              <\/mrow>\n              <mo class=\"MathClass-close\">)<\/mo>\n            <\/mrow>\n          <\/mtd>\n        <\/mtr>\n        <mtr>\n          <mtd class=\"array\" columnalign=\"left\">\n            <mo class=\"MathClass-op\">&#x22EE;<\/mo>\n          <\/mtd>\n          <mtd class=\"array\" columnalign=\"right\" \/>\n        <\/mtr>\n        <mtr>\n          <mtd class=\"array\" columnalign=\"left\">\n            <munder class=\"msub\">\n              <mrow>\n                <mo class=\"qopname\">min<\/mo>\n              <\/mrow>\n              <mrow>\n                <msub>\n                  <mrow>\n                    <mi>&#x3B1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>7<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C1;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>7<\/mn>\n                  <\/mrow>\n                <\/msub>\n                <mo class=\"MathClass-punc\">,<\/mo>\n                <msub>\n                  <mrow>\n                    <mi>&#x3C3;<\/mi>\n                  <\/mrow>\n                  <mrow>\n                    <mn>7<\/mn>\n                  <\/mrow>\n                <\/msub>\n              <\/mrow>\n            <\/munder>\n            <munderover accent=\"false\" accentunder=\"false\">\n              <mrow>\n                <mo mathsize=\"big\">&#x2211;<\/mo>\n              <\/mrow>\n              <mrow>\n                <mi>i<\/mi>\n                <mo class=\"MathClass-rel\">=<\/mo>\n                <mn>1<\/mn>\n              <\/mrow>\n              <mrow>\n                <mi>m<\/mi>\n              <\/mrow>\n            <\/munderover>\n            <msup>\n              <mrow>\n                <mfenced close=\")\" open=\"(\" separators=\"\">\n                  <mrow>\n                    <msub>\n                      <mrow>\n                        <mi>H<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                    <mrow>\n                      <mo class=\"MathClass-open\">(<\/mo>\n                      <mrow>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3B1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <mo>&#x2026;<\/mo>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3B1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>7<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <mo>&#x2026;<\/mo>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C1;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>7<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C3;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>1<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <mo>&#x2026;<\/mo>\n                        <mo class=\"MathClass-punc\">,<\/mo>\n                        <msub>\n                          <mrow>\n                            <mi>&#x3C3;<\/mi>\n                          <\/mrow>\n                          <mrow>\n                            <mn>7<\/mn>\n                          <\/mrow>\n                        <\/msub>\n                      <\/mrow>\n                      <mo class=\"MathClass-close\">)<\/mo>\n                    <\/mrow>\n                    <mo class=\"MathClass-bin\">&#8211;<\/mo>\n                    <msub>\n                      <mrow>\n                        <mi>M<\/mi>\n                      <\/mrow>\n                      <mrow>\n                        <mi>i<\/mi>\n                      <\/mrow>\n                    <\/msub>\n                  <\/mrow>\n                <\/mfenced>\n              <\/mrow>\n              <mrow>\n                <mn>2<\/mn>\n              <\/mrow>\n            <\/msup>\n          <\/mtd>\n          <mtd class=\"array\" columnalign=\"right\">\n            <mrow>\n              <mo class=\"MathClass-open\">(<\/mo>\n              <mrow>\n                <mi>P<\/mi>\n                <mn>7<\/mn>\n              <\/mrow>\n              <mo class=\"MathClass-close\">)<\/mo>\n            <\/mrow>\n          <\/mtd>\n        <\/mtr>\n      <\/mtable>\n    <\/mrow>\n  <\/mfenced>\n<\/math>\n\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <h3>Numerical Experiment<\/h3>\n<p>To solve the calibration problem (<a href=\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#x1-4001r1\">1<\/a>), we try two solvers from the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library dedicated to nonlinear least squares problems:<\/p>\n<ul class=\"itemize1\">\n<li class=\"itemize\">a derivative-based solver:\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04ggc.html\">handle_solve_bxnl<\/a>\u00a0(<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04ggf.html\">e04gg<\/a>)<\/li>\n<li class=\"itemize\">a derivative-free solver:\u00a0<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/clhtml\/e04\/e04ffc.html\">handle_solve_dfls<\/a>\u00a0(<a href=\"https:\/\/support.nag.com\/numeric\/nl\/nagdoc_latest\/flhtml\/e04\/e04fff.html\">e04ff<\/a>)<\/li>\n<\/ul>\n<p>Since we don\u2019t have access to the exact derivatives of the Heston model, we estimate the Jacobian of the residuals needed by e04gg with finite differences. Using finite differences effectively can be quite challenging (as discussed in our\u00a0<a href=\"https:\/\/www.nag.com\/blog\/optcorner-price-derivatives-using-finite-differences\">previous post<\/a>). Here we chose a constant perturbation parameter \\(h = 10 ^-6 \\) after some numerical experiments.<\/p>\n<p>For our comparisons, we use the same realistic stopping criterion for both solvers. The fit is considered good if it reaches 1-basis point precision:<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n<math class=\"equation\" xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\" display=\"block\">\n  <mfrac>\n    <mrow>\n      <msub>\n        <mrow>\n          <mfenced close=\"&#x2016;\" open=\"&#x2016;\" separators=\"\">\n            <mrow>\n              <msub>\n                <mrow>\n                  <mi>H<\/mi>\n                <\/mrow>\n                <mrow>\n                  <mi>i<\/mi>\n                <\/mrow>\n              <\/msub>\n              <mrow>\n                <mo class=\"MathClass-open\">(<\/mo>\n                <mrow>\n                  <mi>&#x3B1;<\/mi>\n                  <mo class=\"MathClass-punc\">,<\/mo>\n                  <mi>&#x3C1;<\/mi>\n                  <mo class=\"MathClass-punc\">,<\/mo>\n                  <mi>&#x3C3;<\/mi>\n                <\/mrow>\n                <mo class=\"MathClass-close\">)<\/mo>\n              <\/mrow>\n              <mo class=\"MathClass-bin\">&#8211;<\/mo>\n              <msub>\n                <mrow>\n                  <mi>M<\/mi>\n                <\/mrow>\n                <mrow>\n                  <mi>i<\/mi>\n                <\/mrow>\n              <\/msub>\n            <\/mrow>\n          <\/mfenced>\n        <\/mrow>\n        <mrow>\n          <mi>&#x221E;<\/mi>\n        <\/mrow>\n      <\/msub>\n    <\/mrow>\n    <mrow>\n      <mi>S<\/mi>\n    <\/mrow>\n  <\/mfrac>\n  <mo class=\"MathClass-rel\">&#x2264;<\/mo>\n  <mn>0<\/mn>\n  <mo class=\"MathClass-punc\">.<\/mo>\n  <mn>0<\/mn>\n  <mn>1<\/mn>\n<\/math>\n\n\n<div class=\"container content-area-default \">\n    <div class=\"row justify-content--center\">\n        <div class=\"col-12 col-md-10 col-lg-8 col-xl-6\">\n            <p>The data we use contains 1070 dates defining 1070 sequences of seven calibration problems to solve (7490 total). All were solved using both approaches, the results can be summarized as:<\/p>\n<ul>\n<li>Total number of calls to the Heston model:\n<ul>\n<li class=\"itemize\">DFO: 258540 (avg 241); gradient-based: 963933 (avg 900)<\/li>\n<li class=\"itemize\"><strong><span class=\"cmbx-10\">DFO needed 3.7 times fewer evaluations.<\/span><\/strong><\/li>\n<\/ul>\n<\/li>\n<li>Total number of calibrations that didn\u2019t reach 1-basis point:\n<ul>\n<li>DFO: 32 (20 problems); gradient-based: 180 (138 problems)<\/li>\n<li><strong>DFO solved to required accuracy 98% of the problems in contrast to 87% for the other.<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>Number of calls to the Heston model for problems that both methods solved:\n<ul>\n<li>DFO: 211326 (avg 229); gradient-based: 575379 (avg 626)<\/li>\n<li><strong>DFO required 2.7 times fewer evaluations.<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"indent\">The figure below captures the speedup of the DFO solver over the finite-differences based solver as a ratio of the number of function evaluations needed per problem. Each blue dot represents a problem where the DFO solver was faster whereas each red dot is in favour of the derivative-based solver. It is clear that the\u00a0<strong>DFO solver offers much faster convergence for a majority of problems<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1178 size-full\" src=\"https:\/\/nag.com\/wp-content\/uploads\/2021\/06\/dfo_speedup.png\" alt=\"derivative free speed-up\" width=\"1920\" height=\"1440\" \/><\/p>\n<h3 class=\"field field--name-field-paragraph-title field--type-string field--label-hidden field--item\">Things to remember<\/h3>\n<div class=\"field field--name-field-paragraph-text field--type-text-long field--label-hidden field--item\">\n<p>Calibrating black-box models is not a trivial problem, you should consider using a derivative-free solver if you don\u2019t have access to precise estimations of the derivatives. As shown on the practical Heston calibration example, you are likely to obtain a\u00a0<strong>better fit in fewer model calls with DFO solvers<\/strong>.<\/p>\n<p>You can also find various examples through our <a href=\"https:\/\/github.com\/numericalalgorithmsgroup\/NAGPythonExamples\/tree\/master\/local_optimization\" target=\"_blank\" rel=\"noopener\">GitHub Local optimization<\/a>\u00a0page. See you in the next blog.<\/p>\n<h3 class=\"field field--name-field-paragraph-title field--type-string field--label-hidden field--item\">References<\/h3>\n<div class=\"field field--name-field-paragraph-text field--type-text-long field--label-hidden field--item\">\n<p>[1] Coralia Cartis, Jan Fiala, Benjamin Marteau, and Lindon Roberts. Improving the exibility and robustness of model-based derivative-free optimization solvers. ACM Trans. Math. Softw., 45(3), August 2019.<\/p>\n<\/div>\n<\/div>\n        <\/div>\n    <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p><span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG collaborated on a research project with Coralia Cartis and Lindon Roberts from the University of Oxford. This research led to significant improvements, such as noise resilience and enhancements to interpolation models for structured problems, and brought the state of the art of DFO techniques [1] into the <span class=\"nag-n-override\" style=\"margin-left: 0 !important;\"><i>n<\/i><\/span>AG Library.<\/p>\n","protected":false},"author":10,"featured_media":868,"parent":0,"menu_order":0,"template":"","meta":{"content-type":"","footnotes":""},"post-tag":[33,21],"class_list":["post-1439","insights","type-insights","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG\" \/>\n<meta property=\"og:description\" content=\"NAG collaborated on a research project with Coralia Cartis and Lindon Roberts from the University of Oxford. This research led to significant improvements, such as noise resilience and enhancements to interpolation models for structured problems, and brought the state of the art of DFO techniques [1] into the NAG Library.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/\" \/>\n<meta property=\"og:site_name\" content=\"nAG\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-05T14:56:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2117\" \/>\n\t<meta property=\"og:image:height\" content=\"1237\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@NAGTalk\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/\",\"url\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/\",\"name\":\"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG\",\"isPartOf\":{\"@id\":\"https:\/\/nag.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png\",\"datePublished\":\"2021-06-17T09:28:00+00:00\",\"dateModified\":\"2023-07-05T14:56:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage\",\"url\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png\",\"contentUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png\",\"width\":2117,\"height\":1237},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/nag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Insights\",\"item\":\"https:\/\/nag.com\/insights\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nag.com\/#website\",\"url\":\"https:\/\/nag.com\/\",\"name\":\"NAG\",\"description\":\"Robust, trusted numerical software and computational expertise.\",\"publisher\":{\"@id\":\"https:\/\/nag.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nag.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nag.com\/#organization\",\"name\":\"Numerical Algorithms Group\",\"alternateName\":\"NAG\",\"url\":\"https:\/\/nag.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"contentUrl\":\"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png\",\"width\":1244,\"height\":397,\"caption\":\"Numerical Algorithms Group\"},\"image\":{\"@id\":\"https:\/\/nag.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NAGTalk\",\"https:\/\/www.linkedin.com\/company\/nag\/\",\"https:\/\/www.youtube.com\/user\/NumericalAlgorithms\",\"https:\/\/github.com\/numericalalgorithmsgroup\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/","og_locale":"en_US","og_type":"article","og_title":"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG","og_description":"NAG collaborated on a research project with Coralia Cartis and Lindon Roberts from the University of Oxford. This research led to significant improvements, such as noise resilience and enhancements to interpolation models for structured problems, and brought the state of the art of DFO techniques [1] into the NAG Library.","og_url":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/","og_site_name":"nAG","article_modified_time":"2023-07-05T14:56:09+00:00","og_image":[{"width":2117,"height":1237,"url":"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@NAGTalk","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/","url":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/","name":"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques - nAG","isPartOf":{"@id":"https:\/\/nag.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage"},"image":{"@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage"},"thumbnailUrl":"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png","datePublished":"2021-06-17T09:28:00+00:00","dateModified":"2023-07-05T14:56:09+00:00","breadcrumb":{"@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#primaryimage","url":"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png","contentUrl":"https:\/\/nag.com\/wp-content\/uploads\/2023\/05\/optimization-corner2.png","width":2117,"height":1237},{"@type":"BreadcrumbList","@id":"https:\/\/nag.com\/insights\/optcorner-calibrate-the-heston-model-faster-using-derivative-free-optimization-techniques\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nag.com\/"},{"@type":"ListItem","position":2,"name":"Insights","item":"https:\/\/nag.com\/insights\/"},{"@type":"ListItem","position":3,"name":"Optcorner: Calibrate the Heston Model Faster Using Derivative-Free Optimization Techniques"}]},{"@type":"WebSite","@id":"https:\/\/nag.com\/#website","url":"https:\/\/nag.com\/","name":"NAG","description":"Robust, trusted numerical software and computational expertise.","publisher":{"@id":"https:\/\/nag.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nag.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nag.com\/#organization","name":"Numerical Algorithms Group","alternateName":"NAG","url":"https:\/\/nag.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/","url":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","contentUrl":"https:\/\/nag.com\/wp-content\/uploads\/2023\/11\/NAG-Logo.png","width":1244,"height":397,"caption":"Numerical Algorithms Group"},"image":{"@id":"https:\/\/nag.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NAGTalk","https:\/\/www.linkedin.com\/company\/nag\/","https:\/\/www.youtube.com\/user\/NumericalAlgorithms","https:\/\/github.com\/numericalalgorithmsgroup"]}]}},"_links":{"self":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights"}],"about":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/types\/insights"}],"author":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/users\/10"}],"version-history":[{"count":6,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1439\/revisions"}],"predecessor-version":[{"id":52523,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/insights\/1439\/revisions\/52523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/media\/868"}],"wp:attachment":[{"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/media?parent=1439"}],"wp:term":[{"taxonomy":"post-tag","embeddable":true,"href":"https:\/\/nag.com\/wp-json\/wp\/v2\/post-tag?post=1439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}