コード例 #1
0
        public Decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Add formula");
            tracer.Indent();
            var     one     = this.oneExpression.Value(ticket, tracer, No.ExpressionName);
            var     another = this.anotherExpression.Value(ticket, tracer, No.ExpressionName);
            Decimal?result;

            if (one.HasValue)
            {
                if (another.HasValue)
                {
                    result = one.Value + another.Value;
                }
                else
                {
                    result = one.Value;
                }
            }
            else
            {
                if (another.HasValue)
                {
                    result = another.Value;
                }
                else
                {
                    result = null;
                }
            }
            tracer.WriteValue("Sum", result);
            tracer.Unindent();
            return(result);
        }
コード例 #2
0
        public decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Base less overlay positive total formula");
            tracer.Indent();

            Decimal?result = this.cashRescaledBase.Value(ticket, tracer, "Cash rescaled base");

            tracer.WriteValue(" + Cash rescaled base", result);
            foreach (var model in models)
            {
                var value = this.baseLessOverlayFormula.Calculate(model, ticket, tracer);
                if (value.HasValue && value.Value > 0)
                {
                    tracer.WriteValue("+ Base less overlay", value);
                    if (result.HasValue)
                    {
                        result = result.Value + value.Value;
                    }
                    else
                    {
                        result = value.Value;
                    }
                }
            }
            tracer.WriteValue("Total", result);
            tracer.Unindent();
            return(result);
        }
コード例 #3
0
        public Decimal?Value(CalculationTicket ticket, ICalculationTracer tracer, String name)
        {
            tracer.WriteLine("Nullable sum: " + (name ?? this.Name));
            tracer.Indent();
            var result = this.defaultValue;

            foreach (var expressionOpt in this.expressions)
            {
                if (expressionOpt == null)
                {
                    continue;
                }
                var value = expressionOpt.Value(ticket);
                tracer.WriteValue("+", value);
                if (value.HasValue)
                {
                    if (result.HasValue)
                    {
                        result = result.Value + value.Value;
                    }
                    else
                    {
                        result = value.Value;
                    }
                }
            }
            tracer.WriteValue("Total", result);
            tracer.Unindent();
            return(result);
        }
コード例 #4
0
        public Decimal?Calculate(IModel model, CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Base less overlay formula");
            tracer.Indent();
            var rescaledBaseValue = this.rescaledBaseForAdjustmentFormula.Calculate(model, ticket, tracer);

            tracer.WriteValue("Rescaled base", rescaledBaseValue);
            Decimal?result;

            if (rescaledBaseValue.HasValue)
            {
                var overlayExpressionOpt = picker.Overlay.TryPickExpression(model);
                if (overlayExpressionOpt == null)
                {
                    throw new ApplicationException("There is no overlay expression.");
                }
                var overlayValue = overlayExpressionOpt.Value(ticket, tracer, "Overlay");
                result = rescaledBaseValue.Value - overlayValue;
            }
            else
            {
                result = null;
            }
            tracer.WriteValue("Result", result);
            tracer.Unindent();
            return(result);
        }
コード例 #5
0
        public Decimal?Calculate(IModel model, CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Base active formula");
            tracer.Indent();
            var baseExpressionOpt      = picker.Base.TryPickExpression(model);
            var benchmarkExpressionOpt = picker.Benchmark.TryPickExpression(model);

            if (baseExpressionOpt == null || benchmarkExpressionOpt == null)
            {
                return(null);
            }
            var     baseValue      = baseExpressionOpt.Value(ticket, tracer, "Base");
            var     benchmarkValue = benchmarkExpressionOpt.Value(ticket, tracer, "Benchmark");
            Decimal?result;

            if (!baseValue.HasValue)
            {
                result = null;
            }
            else
            {
                result = baseValue.Value - benchmarkValue;
            }
            tracer.WriteValue("Base - Benchmark", result);
            tracer.Unindent();
            return(result);
        }
コード例 #6
0
        public TValue Value(CalculationTicket ticket, ICalculationTracer tracer, string name)
        {
            tracer.WriteLine("Model expression: " + (name ?? this.Name));
            tracer.Indent();
            var result = this.Formula.Calculate(this.Model, ticket, tracer);

            tracer.Unindent();
            return(result);
        }
コード例 #7
0
        public Decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Base where portfolio adjustment is set");
            tracer.Indent();
            var models = this.traverser.TraverseGlobe(this.root);
            var result = this.ComputeBaseTotalWherePortfoioAdjustmentSetValue(models, tracer);

            tracer.WriteValue("Total", result);
            tracer.Unindent();
            return(result);
        }
コード例 #8
0
            public Decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
            {
                tracer.WriteLine("Base active formula");
                tracer.Indent();
                var baseValue      = BaseExpression.Value(ticket, tracer, "Base");
                var benchmarkValue = BenchmarkExpression.Value(ticket, tracer, "Benchmark");
                var result         = baseValue.HasValue ? baseValue - benchmarkValue : null;

                tracer.WriteValue("Base - Benchmark", result);
                tracer.Unindent();
                return(result);
            }
コード例 #9
0
        public decimal?Calculate(IModel model, CalculationTicket ticket, ICalculationTracer tracer)
        {
            tracer.WriteLine("Portfolio scaled formula");
            tracer.Indent();
            var baseLessOverlay = this.baseLessOverlayFormula.Calculate(model, ticket, tracer);

            if (!baseLessOverlay.HasValue)
            {
                return(null);
            }
            if (baseLessOverlay.Value < 0)
            {
                return(0m);
            }

            var positiveTotal = baseLessOverlayPositiveTotal.Value(ticket, tracer, "Base less overlay positive total");

            if (!positiveTotal.HasValue)
            {
                return(null);
            }

            var total = baseLessOverlayTotal.Value(ticket);

            if (!total.HasValue)
            {
                return(null);
            }

            if (positiveTotal.Value == 0)
            {
                throw new NotImplementedException();
            }
            tracer.WriteLine("Undone");
            var result = baseLessOverlay.Value / positiveTotal.Value * total.Value;

            tracer.Unindent();
            return(result);
        }
コード例 #10
0
            public decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
            {
                Decimal?result;
                var     total = this.targetTotalExpression.Value(ticket);

                if (total.HasValue)
                {
                    result = 1.0m - total.Value;
                }
                else
                {
                    result = null;
                }
                tracer.WriteLine("Undone");
                return(result);
            }
コード例 #11
0
        public Decimal?Calculate(CalculationTicket ticket, ICalculationTracer tracer)
        {
            var     baseValue = cashBase.Value(ticket);
            var     baseWherePortfoioAdjustmentSetTotalValue = baseWherePortfoioAdjustmentSetTotal.Value(ticket);
            var     porfolioAdjustmentTotalValue             = porfolioAdjustmentTotal.Value(ticket);
            Decimal?result;

            if (baseValue.HasValue)
            {
                result = baseValue.Value
                         / (1 - (baseWherePortfoioAdjustmentSetTotalValue.HasValue ? baseWherePortfoioAdjustmentSetTotalValue.Value : 0m))
                         * (1 - (porfolioAdjustmentTotalValue.HasValue ? porfolioAdjustmentTotalValue.Value : 0m));
            }
            else
            {
                result = null;
            }
            tracer.WriteLine("Undone");
            return(result);
        }
コード例 #12
0
ファイル: Expression.cs プロジェクト: leewashmore/Greenfield
        public TValue Value(CalculationTicket ticket, ICalculationTracer tracer, String name)
        {
            TValue result;

            tracer.WriteLine("Expession: " + (name ?? this.Name));
            tracer.Indent();
            if (this.ticket == ticket)
            {
                result = this.value;
                tracer.WriteValue("CACHED", result, this.Adapter);
            }
            else
            {
                result      = this.formula.Calculate(ticket, tracer);
                this.ticket = ticket;
                this.value  = result;
            }
            tracer.Unindent();
            return(result);
        }
コード例 #13
0
        public Decimal?Calculate(IModel model, CalculationTicket ticket, ICalculationTracer tracer)
        {
            var overlayExpressionOpt         = this.picker.Overlay.TryPickExpression(model);
            var portfolioScaledExpressionOpt = this.picker.PortfolioScaled.TryPickExpression(model);

            if (overlayExpressionOpt == null || portfolioScaledExpressionOpt == null)
            {
                return(null);
            }
            var overlayValue         = overlayExpressionOpt.Value(ticket);
            var portfolioScaledValue = portfolioScaledExpressionOpt.Value(ticket);

            if (!portfolioScaledValue.HasValue)
            {
                return(null);
            }
            var value = overlayValue + portfolioScaledValue.Value;

            tracer.WriteLine("Undone");
            return(value);
        }
コード例 #14
0
        public Decimal?Calculate(IModel model, CalculationTicket ticket, ICalculationTracer tracer)
        {
            var trueExposureExpressionOpt = this.picker.TrueExposure.TryPickExpression(model);
            var benchmarkExpressionOpt    = this.picker.Benchmark.TryPickExpression(model);

            if (trueExposureExpressionOpt == null || benchmarkExpressionOpt == null)
            {
                return(null);
            }
            var trueExposure = trueExposureExpressionOpt.Value(ticket);

            if (!trueExposure.HasValue)
            {
                return(null);
            }
            var benchmark = benchmarkExpressionOpt.Value(ticket);
            var value     = trueExposure.Value - benchmark;

            tracer.WriteLine("Undone");
            return(value);
        }