public void Create(WtsSeriesAnalyzer analyzer_, DateTime? startDate_=null, DateTime? endDate_=null)
    {
      m_analyzer = analyzer_;
      m_startDate = startDate_;
      m_endDate = endDate_;

      if (m_wtsChart == null)
      {
        m_wtsChart = new DataCollectionDisplay();
        m_wtsChart.Dock = DockStyle.Fill;
        panel3.ClientArea.Controls.Add(m_wtsChart);
      }

      if (m_perfAndWeightsChart == null)
      {
        m_perfAndWeightsChart = new ZoneChart();
        m_perfAndWeightsChart.Dock = DockStyle.Fill;
        panel1.ClientArea.Controls.Add(m_perfAndWeightsChart);
      }

      if (m_c2vWeightsChart == null)
      {
        m_c2vWeightsChart = new ZoneChart();
        m_c2vWeightsChart.Dock = DockStyle.Fill;
        panel2.ClientArea.Controls.Add(m_c2vWeightsChart);
      }

      if (m_monthlyPnlChart == null)
      {
        m_monthlyPnlChart = new SimpleWtsColumnChart();
        m_monthlyPnlChart.Dock = DockStyle.Fill;
        panel4.ClientArea.Controls.Add(m_monthlyPnlChart);
      }

      if (m_annotatedChart == null)
      {
        m_annotatedChart = new LineChartWithAnnotations();
        m_annotatedChart.Dock = DockStyle.Fill;
        panel5.ClientArea.Controls.Add(m_annotatedChart);
      }

      ultraListBar1.Groups[0].Items.Clear();

      for(int i=0;i<m_analyzer.SourceWts.ColumnHeadings.Length;++i)
      {
        string s = m_analyzer.SourceWts.ColumnHeadings[i];
        
        //Currency c = Singleton<FXIDs>.Instance[s];

        Infragistics.Win.UltraWinListBar.Item item =  ultraListBar1.Groups[0].Items.Add(key: s, text: s);

        item.Tag = i;
      }
      
    }
Пример #2
0
    internal void Create(BindingList<CurveReconciler.CompareItem> items_)
    {
      var grid = new BoundInfraGrid();
      grid.Bind(items_);
      grid.Dock=DockStyle.Fill;
      this.splitContainer1.Panel1.Controls.Add(grid);

      var chart = new SimpleWtsColumnChart();
      var sorted = items_.OrderBy(x => x.FIID);

      var headings = sorted.Select(x => x.SymmetryCode.Split(' ')[0]).ToArray();
      var values = sorted.Select(x => (x.DiffAsBps.HasValue) ? x.DiffAsBps.Value : 0d).ToArray();

      chart.SetYAxisFormat("##0.000#");
      chart.Dock = DockStyle.Fill;
      chart.Create(headings, values);
      this.splitContainer1.Panel2.Controls.Add(chart);
    }
    private void btnPersistence_Click(object sender, EventArgs e)
    {
      FlowLayoutPanel flp = new FlowLayoutPanel();

      Size controlSize = new Size(600, 200);

      foreach (WtsSeriesAnalyzer anal in m_seriesAnalyzers)
      {
        SI.Controls.GroupBox gb = new SI.Controls.GroupBox();
        gb.Text = anal.Name;
        gb.Size = controlSize;

        SI.Controls.SimpleWtsColumnChart swc = new SI.Controls.SimpleWtsColumnChart();
        swc.Dock = DockStyle.Fill;
        gb.Controls.Add(swc);

        //QC.Common.WtsAnalysis.OverallPersistenceDisplay.setupPersistenceAvgLongShortChart(swc, anal);
        //flp.Controls.Add(gb);
      }

      flp.DisplayInShowForm("Avg holding period for strategies on individual currencies");
    }
    public void Create(WtsSeriesAnalyzer analyzer_, DateTime? startDate_=null, DateTime? endDate_=null)
    {
      var wtsDisplay = new SimpleWtsColumnChart();
      var c2vDisplay = new SimpleWtsColumnChart();
      var pnlDisplay = new SimpleWtsColumnChart();

      wtsDisplay.Dock = DockStyle.Fill;
      panel1.ClientArea.Controls.Add(wtsDisplay);

      c2vDisplay.Dock = DockStyle.Fill;
      panel2.ClientArea.Controls.Add(c2vDisplay);

      pnlDisplay.Dock = DockStyle.Fill;
      panel3.ClientArea.Controls.Add(pnlDisplay);

      ConstructGen<double> sourceWts = analyzer_.SourceWts;
      ConstructGen<double> sourceC2V = analyzer_.SourceC2V;
      ConstructGen<double> perf = analyzer_.Performance;

      if (startDate_ != null && endDate_ != null)
      {
        sourceWts = sourceWts.GetSubValues(startDate_.Value,endDate_.Value);
        sourceC2V = sourceC2V.GetSubValues(startDate_.Value, endDate_.Value);
        perf = perf.GetSubValues(startDate_.Value, endDate_.Value);
      }


      {
        IDictionary<string, double[]> wts = new Dictionary<string, double[]>();

        for (int i = 0; i < sourceWts.ArrayLength; ++i)
        {
          double[] w = sourceWts.GetColumnValues(i);
          double[] vals = new double[]
        {
          w.Min(),
          w.Average(),
          w.Max()
        };

          wts.Add(sourceWts.ColumnHeadings[i], vals);
        }

        wtsDisplay.Create<string, string>(wts, new string[] { "Min", "Avg", "Max" });
      }

      {
        IDictionary<string, double[]> c2v = new Dictionary<string, double[]>();

        for (int i = 0; i < sourceC2V.ArrayLength; ++i)
        {
          double[] w = sourceC2V.GetColumnValues(i);
          double[] vals = new double[]
        {
          w.Min(),
          w.Average(),
          w.Max()
        };

          c2v.Add(sourceC2V.ColumnHeadings[i], vals);
        }

        c2vDisplay.Create<string, string>(c2v, new string[] { "Min", "Avg", "Max" });
      }

      {
        double[] ds=new double[perf.ArrayLength];
        for(int i=0;i<ds.Length;++i)
          ds[i]=perf.GetColumnValues(i).Sum();
        pnlDisplay.Create(analyzer_.SourceWts.ColumnHeadings, ds);
      }

    }
Пример #5
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_);
      }

    }
Пример #6
0
    private void rebind()
    {
      var finestGranulatiry = 
        m_evaluator.Daily.Length > (2*m_evaluator.Weekly.Length)
          ? Period.Daily
          : m_evaluator.Weekly.Length > (2*m_evaluator.Monthly.Length) 
            ? Period.Weekly 
            : Period.Monthly;

      lblCumReturn.Bind(m_evaluator.Daily, "CumulativeReturn", new Validators.DoubleValidator("#0.00%"));
      lblAvgReturnPA.Bind(m_evaluator.Daily, "AverageReturnsPerAnnum", new Validators.DoubleValidator("#0.00%"));


      lblAnnualSharpe.Bind(m_evaluator[finestGranulatiry], "AnnualSharpeRatio", new Validators.DoubleValidator("#0.00"));
      lblRealisedVolPA.Bind(m_evaluator[finestGranulatiry], "RealisedVolPerAnnum", new Validators.DoubleValidator("#0.00%"));


      lblYTD.Bind(m_evaluator.Daily, "YTD", new Validators.DoubleValidator("#0.00%"));
      lblSortino.Bind(m_evaluator.Daily, "AnnualSortinoRatio", new Validators.DoubleValidator("#0.00"));

      // periodic returns
      dailyReturnsDisplay.Bind(m_evaluator.Daily);
      weeklyReturnsDisplay.Bind(m_evaluator.Weekly);
      monthlyReturnsDisplay.Bind(m_evaluator.Monthly);

      monthlyReturnsChart.Bind(m_evaluator, ReturnsEval.Period.Monthly, "MMM-yy");

      // drawdowns
      for (int i = 0; i < m_drawdownControls.Length; ++i)
      {
        // ReSharper disable once AssignmentInConditionalExpression
        if (m_drawdownControls[i].Visible = (i < m_evaluator.Daily.DrawDowns.Length))
          m_drawdownControls[i].Bind(m_evaluator, i, true);
      }
      drawdownAnalysisControl1.Bind(m_evaluator);
      cumulativeChart.Bind(m_evaluator, ReturnsEval.Period.Daily);

      if (m_evaluator.InnerSeries.Count > 0)
      {
        #region Add overall attribution

        if (m_overallAttributionChart == null)
        {
          Infragistics.Win.UltraWinTabControl.UltraTab tab = ultraTabControl1.Tabs.Add();
          tab.Text = "Attribution";
          m_overallAttributionChart = new Controls.SimpleWtsColumnChart();
          m_overallAttributionChart.Dock = DockStyle.Fill;
          m_overallAttributionChart.SetXAxisExtent(80);
          tab.TabPage.Controls.Add(m_overallAttributionChart);
        }

        m_overallAttributionChart.Create(m_evaluator.InnerSeries.Select(x => x.Name).ToArray(), m_evaluator.InnerSeries.Select(x => x.Daily.CumulativeReturn).ToArray());
        m_overallAttributionChart.SetXAxisExtent(80);

        #endregion

        #region Add Monthly Attribution

        //if (m_datedReturnsChartAttributed == null)
        //{
        //  Infragistics.Win.UltraWinTabControl.UltraTab tab = ultraTabControl1.Tabs.Add();
        //  tab.Text = "Monthly Attribution";
        //  m_datedReturnsChartAttributed = new DatedReturnsChartAttributed();
        //  m_datedReturnsChartAttributed.Dock = DockStyle.Fill;
        //  tab.TabPage.Controls.Add(m_datedReturnsChartAttributed);
        //}

        //if(m_datedReturnsChartAttributed!=null)
        //  m_datedReturnsChartAttributed.Bind(m_evaluator, ReturnsEval.Period.Monthly, "MMM yy");

        #endregion

        #region Add Cumulative returns comparison

        //if (m_cumulativeWithInnerAttributedChart == null)
        //{
        //  Infragistics.Win.UltraWinTabControl.UltraTab tab = ultraTabControl1.Tabs.Add();
        //  tab.Text = "Cumulative Returns Attribution";
        //  m_cumulativeWithInnerAttributedChart = new CumulativeWithInnerAttributedChart();
        //  m_cumulativeWithInnerAttributedChart.Dock = DockStyle.Fill;
        //  tab.TabPage.Controls.Add(m_cumulativeWithInnerAttributedChart);
        //}

        //if(m_cumulativeWithInnerAttributedChart!=null)
        //  m_cumulativeWithInnerAttributedChart.Bind(m_evaluator);

        #endregion

      }

      bindRW();
    }