public void GettingYieldCurveValuesIsQuick()
        {
            var snapshotManager = Context.MarketDataSnapshotManager;

            using (var dataSnapshotProcessor = snapshotManager.CreateFromViewDefinition(ViewDefinitionName))
            {
                var           beforeCurves = dataSnapshotProcessor.GetYieldCurves();
                YieldCurveKey curveKey     = beforeCurves.First(k => k.Value != null).Key;
                var           beforeCurve  = beforeCurves[curveKey].Item1.Curve;

                var manageableMarketDataSnapshot = dataSnapshotProcessor.Snapshot;
                var ycSnapshot = manageableMarketDataSnapshot.YieldCurves[curveKey];

                const double f = 1.001;

                foreach (var value1 in ycSnapshot.Values.Values)
                {
                    foreach (var valueSnapshot in value1.Value.Values)
                    {
                        valueSnapshot.OverrideValue = valueSnapshot.MarketValue * f;
                    }
                }

                var afterCurves = dataSnapshotProcessor.GetYieldCurves();
                Assert.NotEmpty(afterCurves);

                Assert.Empty(beforeCurves.Keys.Except(afterCurves.Keys));

                var afterCurve = afterCurves[curveKey].Item1.Curve;

                //Curve should change Ys but not x
                Assert.Equal(beforeCurve.XData, afterCurve.XData);

                var diffs = beforeCurve.YData.Zip(afterCurve.YData, DiffProportion).ToList();
                Assert.NotEmpty(diffs.Where(d => d > 0.001).ToList());

                foreach (var value1 in ycSnapshot.Values.Values)
                {
                    foreach (var valueSnapshot in value1.Value.Values)
                    {
                        valueSnapshot.OverrideValue = null;
                    }
                }

                Dictionary <YieldCurveKey, Tuple <YieldCurve, InterpolatedYieldCurveSpecificationWithSecurities, NodalDoublesCurve> > timedCurves = null;

                TimeSpan time = Time(() => timedCurves = dataSnapshotProcessor.GetYieldCurves());
                Assert.InRange(time, TimeSpan.Zero, TimeSpan.FromSeconds(3)); // TODO faster
                Console.Out.WriteLine(time);

                var diffs2 = beforeCurves[curveKey].Item1.Curve.YData.Zip(timedCurves[curveKey].Item1.Curve.YData, DiffProportion).ToList();
                Assert.Empty(diffs2.Where(d => d > 0.001).ToList());

                //TODO check nodal curves
            }
        }
示例#2
0
        private Dictionary <YieldCurveKey, Tuple <YieldCurve, InterpolatedYieldCurveSpecificationWithSecurities, NodalDoublesCurve> > GetYieldCurves(IViewCycle cycle, IViewComputationResultModel results)
        {
            var ret = new Dictionary <YieldCurveKey, Tuple <YieldCurve, InterpolatedYieldCurveSpecificationWithSecurities, NodalDoublesCurve> >();

            foreach (var kvp in _specs)
            {
                YieldCurveKey key = kvp.Key;
                Dictionary <string, ValueRequirement> specs = kvp.Value;

                var curve        = Get <YieldCurve>(specs[ValueRequirementNames.YieldCurve], results);
                var spec         = Get <InterpolatedYieldCurveSpecificationWithSecurities>(specs[ValueRequirementNames.YieldCurveSpec], results);
                var interpolated = Get <NodalDoublesCurve>(specs[ValueRequirementNames.YieldCurveInterpolated], results);

                if (curve == null || spec == null || interpolated == null)
                {
                    ret.Add(key, null);
                }
                else
                {
                    ret.Add(key, new Tuple <YieldCurve, InterpolatedYieldCurveSpecificationWithSecurities, NodalDoublesCurve>(curve, spec, interpolated));
                }
            }
            return(ret);
        }
        private static UpdateAction <ManageableMarketDataSnapshot> PrepareCurveAddAction(YieldCurveKey key, ManageableYieldCurveSnapshot value)
        {
            var manageableYieldCurveSnapshot = value.Clone();

            return(new UpdateAction <ManageableMarketDataSnapshot>(
                       delegate(ManageableMarketDataSnapshot snap)
            {
                snap._yieldCurves.Add(key, manageableYieldCurveSnapshot.Clone());
                snap.InvokePropertyChanged(new PropertyChangedEventArgs("YieldCurves"));
            }
                       ));
        }
 private static UpdateAction <ManageableMarketDataSnapshot> PrepareCurveRemoveAction(YieldCurveKey key, ManageableYieldCurveSnapshot value)
 {
     return(new UpdateAction <ManageableMarketDataSnapshot>(
                delegate(ManageableMarketDataSnapshot snap)
     {
         snap._yieldCurves.Remove(key);
         snap.InvokePropertyChanged(new PropertyChangedEventArgs("YieldCurves"));
     },
                OverriddenYieldCurveDisappearingWarning.Of(key, value)
                ));
 }
示例#5
0
 public static IEnumerable <Warning> Of(YieldCurveKey key, ManageableYieldCurveSnapshot value)
 {
     return(value.HaveOverrides() ? new Warning[] { new OverriddenYieldCurveDisappearingWarning(key) } : new Warning[] { });
 }
示例#6
0
 private OverriddenYieldCurveDisappearingWarning(YieldCurveKey key)
     : base(string.Format("Yield Curve {0} {1} will not be present in the new snapshot, overrides will be lost", key.Currency, key.Name))
 {
 }
示例#7
0
 public static IEnumerable<Warning> Of(YieldCurveKey key, ManageableYieldCurveSnapshot value)
 {
     return value.HaveOverrides() ? new Warning[] { new OverriddenYieldCurveDisappearingWarning(key) } : new Warning[] { };
 }
示例#8
0
 private OverriddenYieldCurveDisappearingWarning(YieldCurveKey key)
     : base(string.Format("Yield Curve {0} {1} will not be present in the new snapshot, overrides will be lost", key.Currency, key.Name))
 {
 }