Exemplo n.º 1
0
        public static ITreeAddCmdtySettlementRule <T> WithIntrinsicTree <T>([NotNull] this ITreeAddTreeFactory <T> addTreeFactory)
            where T : ITimePeriod <T>
        {
            if (addTreeFactory == null)
            {
                throw new ArgumentNullException(nameof(addTreeFactory));
            }

            TimeSeries <T, IReadOnlyList <TreeNode> > CreateIntrinsicTree(TimeSeries <T, double> forwardCurve)
            {
                var treeNodes = new IReadOnlyList <TreeNode> [forwardCurve.Count];

                treeNodes[forwardCurve.Count - 1] = new [] { new TreeNode(forwardCurve[forwardCurve.Count - 1], 1.0, 0, new NodeTransition[0]) };

                for (int i = forwardCurve.Count - 2; i >= 0; i--)
                {
                    double forwardPrice = forwardCurve[i];
                    treeNodes[i] = new[] { new TreeNode(forwardPrice, 1.0, 0,
                                                        new[] { new NodeTransition(1.0, treeNodes[i + 1][0]) }) };
                }
                return(new TimeSeries <T, IReadOnlyList <TreeNode> >(forwardCurve.Indices, treeNodes));
            }

            return(addTreeFactory.WithTreeFactory(CreateIntrinsicTree));
        }
Exemplo n.º 2
0
        public static ITreeAddCmdtySettlementRule <T> WithOneFactorTrinomialTree <T>(
            [NotNull] this ITreeAddTreeFactory <T> addTreeFactory,
            TimeSeries <T, double> spotVolatilityCurve, double meanReversion, double onePeriodTimeDelta)
            where T : ITimePeriod <T>
        {
            if (addTreeFactory == null)
            {
                throw new ArgumentNullException(nameof(addTreeFactory));
            }

            return(addTreeFactory.WithTreeFactory(forwardCurve =>
                                                  OneFactorTrinomialTree.CreateTree(forwardCurve, meanReversion, spotVolatilityCurve, onePeriodTimeDelta)));
        }