Example #1
0
    public void Create()
    {
      m_bonds = Generator.Go();

      m_spreads = new Dictionary<BondCurves, List<CTDLine<BondSpreads>>>();
      m_spreads[BondCurves.USDFedFunds] = Generator.GetSpreads(m_bonds, BondCurves.USDFedFunds);
      //m_spreads[BondCurves.USD3mLiborOIS] = Generator.GetSpreads(m_bonds, BondCurves.USD3mLiborOIS);
      m_spreads[BondCurves.USD3mLibor] = Generator.GetSpreads(m_bonds, BondCurves.USD3mLibor);

      {
        var g = m_bonds.DisplayInBoundGrid(null, false);
        g.Dock = DockStyle.Fill;
        utcData.Tabs[0].TabPage.Controls.Add(g);
      }

      {
        var g = m_spreads[BondCurves.USDFedFunds].DisplayInBoundGrid(null, false);
        g.Dock = DockStyle.Fill;
        utcData.Tabs[1].Text = "TrueSpreads vs FedFunds";
        utcData.Tabs[1].TabPage.Controls.Add(g);
      }

      {
        var tab = utcData.Tabs.Add();
        tab.Text = "TrueSpreads vs Libor";
        var g = m_spreads[BondCurves.USD3mLibor].DisplayInBoundGrid(null, false);
        g.Dock = DockStyle.Fill;
        tab.TabPage.Controls.Add(g);
        
      }

      chartControl1.Create(m_spreads,m_bonds);
    }
    public static void Reconcile(DateTime date)
    {
      var dict_source_To_DB = new Dictionary<ConstituentRowCompare.Source, string>();

      dict_source_To_DB.Add(ConstituentRowCompare.Source.DS, DBNames.SQLSERVER_LOCAL_SYMMETRYTS);
      dict_source_To_DB.Add(ConstituentRowCompare.Source.MLP, DBNames.SQLSERVER_SYMMETRYTS);


      var listofTenors = new[] { 0, 2, 3, 5, 7, 10, 30 };

      var curveNameGens = new[]
        {
          "de_<tenor>_eur.6m.euribor",
          "de_<tenor>_eur.ois.eonia",
          "fr_<tenor>_eur.6m.euribor",
          "fr_<tenor>_eur.ois.eonia",
          "ust_<tenor>_usd.3m.libor",
          "ust_<tenor>_usd.3m.libor.oisd",
          "ust_<tenor>_usd.ois.fedfunds"
        };

      var curve_To_Grid = new Dictionary<string, Control>();

      //var curveNameGen = "ust_<tenor>_usd.3m.libor";


      foreach (var curveNameGen in curveNameGens)
      {

        var listOfComparisons = new List<ConstituentRowCompare>();
        foreach (var source in dict_source_To_DB.Keys)
        {
          var list = new List<ConstituentRow>();


          foreach (var tenor in listofTenors)
          {
            var curveName = curveNameGen.Replace("<tenor>", tenor.ToString());

            var sql = string.Format("select * from SObject where MonikerDate='{0}' and MonikerType = 'bondcurveconstituents' and MonikerName='{1}'", date.ToString("dd-MMM-yyyy"), curveName);

            var ds = Singleton<ConnMngr>.Instance.Execute(dict_source_To_DB[source], sql);

            if (!ConnMngr.HasResult(ds))
              continue;

            var dt = getTable(ds.Tables[0].Rows[0]["Content"] as string);
            string csv = dt.ToCsv();

            byte[] arr = Encoding.ASCII.GetBytes(csv);
            MemoryStream ms = new MemoryStream(arr);
            StreamReader reader = new StreamReader(ms);

            foreach (var v in CsvFile.Read<ConstituentRow>(reader))
            {
              list.Add(v);

              var comp = listOfComparisons.Where(x => x.ISIN.Equals(v.ISIN)).FirstOrDefault();

              if (comp == null)
              {
                comp = new ConstituentRowCompare(v);
                listOfComparisons.Add(comp);
              }

              comp.SetPrices(source, v);
            }
          }
        }

        var grid = listOfComparisons.DisplayInBoundGrid(null, false);
        grid.SetHeaderClickSort();
        curve_To_Grid.Add(curveNameGen, grid);

      }

      curve_To_Grid.DisplayInShowForm(date.ToString("dd-MMM-yyyy"));

      {
        var wb = new Infragistics.Documents.Excel.Workbook(Infragistics.Documents.Excel.WorkbookFormat.Excel2007);

        foreach (var curve in curve_To_Grid.Keys)
        {
          var grid = (BoundInfraGrid)curve_To_Grid[curve];
          grid.ExportToExcelWorkBook(wb, curve);
        }

        wb.Save(string.Format(@"c:\temp\MarkDate_{0}__At_{1}.xlsx", date.ToString("dd-MMM-yyyy"), DateTime.Now.ToString("dd-MMM-yyyy_HH_mm_ss")));
      }

    }
Example #3
0
    public static void Test()
    {
      int minutesBefore = 120;
      var dict = Go("NFP", TZ.LN, new DateTime(2013, 1, 1), DateTime.Today, "TY", new TimeSpan(0, minutesBefore, 0), new TimeSpan(0, 1, 0));
      var listOfLines = new List<EventAnalysisLine>();
      var dictToNormalized = new SortedDictionary<DateTime, double[]>();

      var lcd = new SI.Controls.LineChartDataDisplay();

      // display
      {
        var list = dict.ToArray().Select(x => new Tuple<string, DatedDataCollectionGen<double>>(x.Key.ToString("dd-MMM-yyyy HH:mm"), x.Value)).ToList();
        var c = new SI.Controls.LineChartMultiArea();

        int count = dict.Count();

        int root = (int)Math.Sqrt(count);

        c.Create(root, root + 1, list,"HH:mm","###0.00#");
        c.DisplayInShowForm("Test!");
      }

      foreach (DateTime date in dict.Keys)
      {
        //dict[date].DisplayLineChart(date.ToString("dd-MMM-yyyy HH:mm"));
        //var grid = dict[date].DisplayInGrid(date.ToString("dd-MMM-yyyy HH:mm"));
        //grid.Grid.DisplayLayout.Bands[0].Columns[0].Format = "dd-MMM-yyyy HH:mm:ss";

        int minIndex = 0, maxIndex = 0;
        var px = dict[date];
        if (px == null)
          continue;
        for (int i = 0; i < minutesBefore && i < px.Length; ++i)
        {
          minIndex = px.Data[i] <= px.Data[minIndex] ? i : minIndex;
          maxIndex = px.Data[i] >= px.Data[maxIndex] ? i : maxIndex;
        }

        listOfLines.Add(new EventAnalysisLine()
        {
          EventDate = date,
          IndexHighestAt = px.Dates[maxIndex],
          IndexLowestAt = px.Dates[minIndex],
          IndexHigh = px.Data[maxIndex],
          IndexLow = px.Data[minIndex]
        });

        var normalizedSeries = px.Data.Take(minutesBefore).Select(x => (x - px.Data[minIndex]) / (px.Data[maxIndex] - px.Data[minIndex])).ToArray();
        var adjustedDates = px.Dates.Take(minutesBefore).Select(x => new DateTime(2014, 1, 1, x.Hour, x.Minute, 0)).ToArray();

        lcd.AddSeries(adjustedDates, normalizedSeries, date.ToString("dd-MM"));
      }

      listOfLines.DisplayInBoundGrid(string.Format("NFP analysis t-{0}mins", minutesBefore));
      lcd.SetXAxisFormat("HH:mm");
      lcd.DisplayInShowForm(string.Format("Normalized values per event t-{0}mins", minutesBefore));
    }
Example #4
0
    public static void Go(DateTime date_)
    {
      LookFeel.SetupNoirModerneLookFeel();

      double thresholdForFlagging = 0.5d;

      var controlDict=new Dictionary<string,SimpleWtsColumnChart>();

      var listOfItems = Retriever.Retrieve(date_);

      var listOfAnomolies = new List<FlagListItem>();

      foreach (var distinctCurve in listOfItems.Select(x => x.CurveName).Distinct())
      {
        var curveSubset = listOfItems.Where(x => x.CurveName.Equals(distinctCurve));

        foreach (var distinctTenor in curveSubset.Select(x => x.Tenor).Distinct().OrderBy(x=>x))
        {
          var tenorAndCurveSubset = curveSubset.Where(x => x.Tenor == distinctTenor);

          var isins = new List<string>();
          var changeInMMS = new List<double>();

          foreach (var isin in tenorAndCurveSubset.OrderBy(x=>x.Maturity).Select(x => x.ISIN).Distinct())
          {
            var isinItems = tenorAndCurveSubset.Where(x => x.ISIN.Equals(isin)).OrderByDescending(x => x.ValueDate).ToArray();

            if (isinItems.Count() > 1)
            {
              isins.Add(isin);
              changeInMMS.Add((isinItems[0].MMS - isinItems[1].MMS) * 10000d);
            }
          }

          if (isins.Count() == 0)
            continue;

          for (int i = 1; i < isins.Count - 1; ++i)
          {
            var neighbourAverage = (changeInMMS[i - 1] + changeInMMS[i + 1]) / 2d;
            var diff = changeInMMS[i] - neighbourAverage;

            var bond = listOfItems.Where(x => string.Compare(isins[i], x.ISIN, true) == 0).First();

            if (Math.Abs(diff) >= thresholdForFlagging)
            {
              var timeToMaturity = bond.Maturity - DateTime.Today;

              // ignore bonds with less than one yeat to maturity
              if (timeToMaturity.Days < 252)
                continue;

              listOfAnomolies.Add(new FlagListItem()
              {
                MarkDate = date_,
                Curve = distinctCurve,
                Tenor = distinctTenor,
                Isin = isins[i],
                ChangeInMMS = changeInMMS[i],
                LeftBond = listOfItems.Where(x => string.Compare(isins[i-1], x.ISIN, true) == 0).First().Bond,
                ChangeInMMSLeft = changeInMMS[i - 1],
                RightBond = listOfItems.Where(x => string.Compare(isins[i+1], x.ISIN, true) == 0).First().Bond,
                ChangeInMMSRight = changeInMMS[i + 1],
                Bond=bond.Bond
              });
            }
          }

          var chart = new Controls.SimpleWtsColumnChart();
          chart.SetYAxisFormat("##0.000#");

          chart.Create(isins.ToArray(), changeInMMS.ToArray());
          chart.SetXAxisExtent(100);

          controlDict.Add(string.Format("{0}_{1}", distinctCurve, distinctTenor), chart);
        }
      }


      if (listOfAnomolies.Count <= 0) return;

      MailMessage msg = new MailMessage("*****@*****.**", "*****@*****.**", "beta: MMS change opportunity / change report", "body");
      msg.To.Clear();
      msg.To.Add("*****@*****.**");
      msg.To.Add("*****@*****.**");
      msg.IsBodyHtml = true;

      var builder = new StringBuilder();

      builder.AppendLine(string.Format("<h3>Unusual bond MMS moves on {0}</h3>", date_.ToString("dd-MMM-yyyy")));
      builder.AppendLine("<p>(Criteria is 0.5 bps difference from the average of the bonds either side)</p>");

      var grid = listOfAnomolies.DisplayInBoundGrid("blah", false);

      builder.AppendLine(grid.ToHTML());

      var resourceDict=new Dictionary<string,string>();

      foreach (string chartKey in listOfAnomolies.Select(x => string.Format("{0}_{1}", x.Curve, x.Tenor)).Distinct())
      {
        builder.AppendLine(string.Format("<h4>{0} - bp change in MMS per bond</h4>", chartKey));
        builder.AppendLine(string.Format("<img src=cid:{0}>", chartKey));

        var path = string.Format("{0}\\{1}_{2}.bmp", Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), chartKey, date_.ToString("ddMMyyyy"));
        controlDict[chartKey].Chart.DataBind();
        LookFeel.ProcessChart(controlDict[chartKey]);
        controlDict[chartKey].Chart.SaveTo(path, System.Drawing.Imaging.ImageFormat.Bmp);
        resourceDict.Add(chartKey, path);
      }

      AlternateView htmlView = AlternateView.CreateAlternateViewFromString(builder.ToString(), null, "text/html");
      foreach (var k in resourceDict.Keys)
      {
        LinkedResource lr = new LinkedResource(resourceDict[k]);
        lr.ContentId = k;
        htmlView.LinkedResources.Add(lr);
      }

      msg.AlternateViews.Add(htmlView);


      try
      {
        Emailer.GetClient().Send(msg);
      }
      catch (Exception ex_)
      {
        Logger.Error("Error sending email", typeof (Analyzer), ex_);
      }

    }