コード例 #1
0
    protected DiscountCurve CallCurveCalculator(ICalculator calculator, KnownCurve knownCurve, string marketSnapCode_, string quotesourceCode_, CarbonClient carbonClient_)
    {
      DateTime startTime = DateTime.Now;
      SLog.log.InfoFormat("Calculation of {0} for {1} starting...", knownCurve.GetDescription(), ValueDate);

      // generate the table of constituents 
      {
        var cp = String.Compare("mlp", quotesourceCode_, StringComparison.OrdinalIgnoreCase) == 0
          ? calculator.BuildConstituentsTable()
          : null;

        if (cp != null)
        {
          var moniker = GenericTable.GenerateSwapCurveConstituentsMoniker(ValueDate, marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), KnownCurveHelpers.GetKnownCurveCode(knownCurve));
          SObjectManager.Instance().SaveSObject(moniker, cp);
        }
      }

      if (mConstituentsOnly)
        return null;

      // this is the old way, which will invoke fincad...
      //var curves = calculator.Calculate();

      var curves = Symmetry.Interop.Carbon.OT.CurveRetriever
        .GetCurvesAsDictionary(knownCurve, ValueDate, carbonClient_, ThrowBehavior.DontThrow);

      foreach (var kvp in curves)
      {
        if (kvp.Value != null)
        {
          Type type = null;
          switch (kvp.Key)
          {
            case "DiscountCurve":
              type = typeof(DiscountCurve);
              break;
            case "RateCurve":
              type = typeof(RateCurve);
              break;
            case "Parameters":
              type = typeof(SwapCurveParameters);
              break;
          }
          if (type != null)
          {
            var moniker = CreateCurveMoniker(marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), knownCurve, type);
            SObjectManager.Instance().SaveSObject(moniker, kvp.Value);
          }
          else if (kvp.Key == "Constituents")
          {
            // don't want to overwrite if mlp (will have been written above
            if (String.Compare("mlp", quotesourceCode_, StringComparison.OrdinalIgnoreCase) == 0)
              continue;

            var moniker = GenericTable.GenerateSwapCurveConstituentsMoniker(ValueDate, marketSnapCode_.ToLower(), quotesourceCode_.ToLower(), KnownCurveHelpers.GetKnownCurveCode(knownCurve));
            SObjectManager.Instance().SaveSObject(moniker, kvp.Value);
          }
        }
      }

      SLog.log.InfoFormat("Calculation of {0} finished in {1} ms...", knownCurve.GetDescription(), (DateTime.Now - startTime).TotalMilliseconds);
      if (curves.ContainsKey("DiscountCurve"))
      {
        return (DiscountCurve)curves["DiscountCurve"];
      }
      return null;
    }