broker25

Untitled

Apr 12th, 2021
792
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.85 KB | None | 0 0
  1.    private static double delta_sticky_iv(double strike0, int column, int counter, bool ifcall, double koef_sticky, double koef_iv)
  2.            {
  3.                double X, Y, vola0, vola1, fut0 = IVfuture[column, counter], epsilon = 0.1;  
  4.                double price0, price1, vola0ATM, vola1ATM, deltaATM;
  5.                
  6.                double matur0 = Math.Sqrt(maturity[column, counter]);
  7.                X = Math.Log(strike0 / fut0 ) / matur0;  
  8.                Y = X - S0[column, counter];
  9.                vola0 = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
  10.                       + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
  11.  
  12.                X = Math.Log((strike0 - epsilon) / fut0) / matur0;
  13.                Y = X - S0[column, counter];
  14.                vola1 = ( A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
  15.                        + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
  16.  
  17.                vola1 = koef_sticky * vola1 + (1.0 - koef_sticky) * vola0;
  18.  
  19.                // Сдвиг по улыбке вниз_________________________________________________________
  20.                if (koef_iv> 0)
  21.                {
  22.                    X = 0.0; //Math.Log(fut0 / fut0) / matur0;
  23.                    Y = X - S0[column, counter];
  24.                    vola0ATM = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
  25.                              + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
  26.  
  27.                    X = Math.Log((fut0 + epsilon) / fut0) / matur0;
  28.                    Y = X - S0[column, counter];
  29.                    // я знаю, что можно сократить, но не хочу для наглядности
  30.                    vola1ATM = (A0[column, counter] + B0[column, counter] * (1.0 - Math.Exp(-C0[column, counter] * Y * Y))
  31.                               + D0[column, counter] * Math.Atan(E0[column, counter] * Y) / E0[column, counter]) / 100.0;
  32.                    // При сдвиге центра вправо на epsilon
  33.                    // вся улыбка уходит вниз на deltaATM
  34.                    deltaATM = koef_iv * (vola1ATM - vola0ATM);  
  35.                    // применяем добавку
  36.                    vola1 = vola1 + deltaATM;
  37.                }
  38.                // Сдвиг по улыбке_________________________________________________________
  39.  
  40.                price0 = Option.Price(fut0, strike0, maturity[column, counter], vola0, ifcall);  
  41.                price1 = Option.Price(fut0 + epsilon, strike0, maturity[column, counter], vola1, ifcall);
  42.            
  43.                return (price1 - price0) / epsilon;              
  44.            }
Advertisement
Add Comment
Please, Sign In to add comment