are you using the same volatility 20% for both black76 and Bachelier?
The black76 is a lognormal model, where volatilities are quoted as relative price changes. The bachelier/normal model quotes volatilities as absolute changes.
That might be what you're missing?
1) The paper Explicit SABR Calibration Through Simple Expansions explains how to calibrate the SABR model in practice.
2) The role of alpha, beta and rho is well explained in the original SABR paper Managing Smile Risk. Beta is most often chosen in advance, to represent a specific dynamic. Although one can find references where people calibrate it to option ...
Error was in the diff line, where it should be the modulus of the difference. We want the difference to be zero, instead of minimum (which is -infinity). Thanks to 'LocalVolatility'.
def objfunc_vol(param = np.array([0.15]), F = 1.0, K = 1.0, time = 1.0, mode = 'normal', quote = 0.5):
sigma = param
if (mode == 'normal') or (mode ==...