Пример #1
0
        public override void partialRollback(DiscretizedAsset asset, double to)
        {
            double from = asset.time();

            if (Utils.close(from, to))
            {
                return;
            }

            Utils.QL_REQUIRE(from > to, () => " cannot roll the asset back to tile to it is already at time from ");

            DiscretizedConvertible convertible = asset as DiscretizedConvertible;

            int iFrom = t_.index(from);
            int iTo   = t_.index(to);

            for (var i = iFrom - 1; i >= iTo; --i)
            {
                Vector newValues                = new Vector(size(i));
                Vector newSpreadAdjustedRate    = new Vector(size(i));
                Vector newConversionProbability = new Vector(size(i));

                stepback(i, convertible.values(), convertible.conversionProbability(), convertible.spreadAdjustedRate(),
                         newValues, newConversionProbability, newSpreadAdjustedRate);
                convertible.setTime(t_[i]);
                convertible.setValues(newValues);
                convertible.spreadAdjustedRate_    = newSpreadAdjustedRate;
                convertible.conversionProbability_ = newConversionProbability;

                // skip the very last adjustement
                if (i != iTo)
                {
                    convertible.adjustValues();
                }
            }
        }