I am working with a vol surface that was created as a BlackVarianceSurface. Now I would like to compute the "vol" greeks for a product and as such I need to shift that surface by a small dVol uniformally so that I can then compute: Vega = [Price(shifted surface) - Price(base surface)] / shift
And along the same lines I'd need to compute the second derivative (volga) and cross spot/vol derivative (vanna).
So far the only thing I've been able to find was to extract a constant vol from the surface for a vanilla option, and then reprice not with the whole surface but with a constantvol. => This only works for vanilla options and won't work for other products using the entire surface => This method is highly inefficient as it considerably slows down all pricing
Has anyone come across a more efficient method ? Is there a utility that shifts the entire surface at once ?