Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static double delta_sticky_iv(double strike0, int column, int counter, bool ifcall, double koef_sticky, double koef_iv)
- {
- double X, Y, vola0, vola1, fut0 = IVfuture[column, counter], epsilon = 0.1;
- double price0, price1, vola0ATM, vola1ATM, deltaATM;
- double matur0 = Math.Sqrt(maturity[column, counter]);
- X = Math.Log(strike0 / fut0 ) / matur0;
- Y = X - S0[column, counter];
- vola0 = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
- + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
- X = Math.Log((strike0 - epsilon) / fut0) / matur0;
- Y = X - S0[column, counter];
- vola1 = ( A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
- + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
- vola1 = koef_sticky * vola1 + (1.0 - koef_sticky) * vola0;
- // Сдвиг по улыбке вниз_________________________________________________________
- if (koef_iv> 0)
- {
- X = 0.0; //Math.Log(fut0 / fut0) / matur0;
- Y = X - S0[column, counter];
- vola0ATM = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
- + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
- X = Math.Log((fut0 + epsilon) / fut0) / matur0;
- Y = X - S0[column, counter];
- // я знаю, что можно сократить, но не хочу для наглядности
- vola1ATM = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
- + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
- // При сдвиге центра вправо на epsilon
- // вся улыбка уходит вниз на deltaATM
- deltaATM = koef_iv * (vola1ATM - vola0ATM);
- // применяем добавку
- vola1 = vola1 + deltaATM;
- }
- // Сдвиг по улыбке_________________________________________________________
- price0 = Option.Price(fut0, strike0, maturity[column, counter], vola0, ifcall);
- price1 = Option.Price(fut0 + epsilon, strike0, maturity[column, counter], vola1, ifcall);
- return (price1 - price0) / epsilon;
- }
Advertisement
Add Comment
Please, Sign In to add comment