Ejemplo n.º 1
0
        public Parameter[] WingCenterPara = new Parameter[4]; //ordre: cste, slope, put ordre 2, call ordre 2


        public WingModel(double[,] data, double forwardPrice)
        {
            _data          = data;
            _forwardPrice  = forwardPrice;
            upSm           = 0.5;                                                      //default value
            downSm         = 0.5;
            _dataVolLogMoy = FittingModel.LogMoneynessVolData(_data, _forwardPrice);
            downCutoff     = _dataVolLogMoy[0, 0];
            UpCutoff       = _dataVolLogMoy[_dataVolLogMoy.GetLength(0) - 1, 0];

            InitWingParam();//ordre: cste, slope, put ordre 2, call ordre 2

            var k = new Parameter(0);

            Parameter[] observedParameters = { k };

            Func <double>[] Function =
            {
                () => WingCenterPara[0].Value + WingCenterPara[1].Value * k + Math.Min(1, Math.Truncate(Math.Exp(k))) * WingCenterPara[2].Value * k * k + (1 - Math.Min(1, Math.Truncate(Math.Exp(k)))) * WingCenterPara[3].Value * k * k
            };


            //     var LMregressor = new LevenbergMarquardt(Function, WingCenterPara, observedParameters, _dataVolLogMoy, 5);//for point of derivatives, regarder codeWWWfavouriteP
            WingCenterPara = LevenbergMarquardt.Compute(Function, WingCenterPara, observedParameters, _dataVolLogMoy, 5);

            //    WingCenterPara = LMregressor._regressionParameters;
            interpolationLagrangeExt();
        }
Ejemplo n.º 2
0
        public static Parameter[] GsviAdjustedFit(double[,] data, double forwardPrice)
        {
            double[,] dataVarLogMon = FittingModel.LogMoneynessVarData(data, forwardPrice);
            Parameter[] SVIRawPara = InitSviAdjParam(dataVarLogMon);//ordre: a, b, rho, sigma, m

            var k = new Parameter(0);

            Parameter[] observedParameters = { k };

            Func <double>[] regressionFunction =
            {
                () => SVIRawPara[0].Value + SVIRawPara[1].Value * (SVIRawPara[2].Value * (k - SVIRawPara[4].Value) + Math.Sqrt(Math.Pow((k - SVIRawPara[4].Value), 2) + Math.Pow(SVIRawPara[3].Value, 2)))
            };

            return(LevenbergMarquardt.Compute(regressionFunction, SVIRawPara, observedParameters, dataVarLogMon, 5));
        }