@@ -253,10 +253,31 @@ def get_bounds(self) -> Sequence[Bounds] | None:
253
253
vol_range = self .implied_vol_range ()
254
254
vol_lb = 0.5 * vol_range .lb [0 ]
255
255
vol_ub = 1.5 * vol_range .ub [0 ]
256
- return Bounds (
257
- [vol_lb * vol_lb , vol_lb * vol_lb , 0.0 , 0.0 , - 0.9 ],
258
- [vol_ub * vol_ub , vol_ub * vol_ub , np .inf , np .inf , 0.0 ],
259
- )
256
+ lower = [
257
+ (0.5 * vol_lb ) ** 2 , # rate
258
+ (0.5 * vol_lb ) ** 2 , # theta
259
+ 0.001 , # kappa - mean reversion speed
260
+ 0.001 , # sigma - vol of vol
261
+ - 0.9 , # correlation
262
+ 1.0 , # jump intensity
263
+ (0.01 * vol_lb ) ** 2 , # jump variance
264
+ ]
265
+ upper = [
266
+ (1.5 * vol_ub ) ** 2 , # rate
267
+ (1.5 * vol_ub ) ** 2 , # theta
268
+ np .inf , # kappa
269
+ np .inf , # sigma
270
+ 0.0 , # correlation
271
+ np .inf , # jump intensity
272
+ (0.5 * vol_ub ) ** 2 , # jump variance
273
+ ]
274
+ try :
275
+ self .model .jumps .jumps .asymmetry ()
276
+ lower .append (- 2.0 ) # jump asymmetry
277
+ upper .append (2.0 )
278
+ except NotImplementedError :
279
+ pass
280
+ return Bounds (lower , upper )
260
281
261
282
def get_params (self ) -> np .ndarray :
262
283
params = [
0 commit comments