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; } }
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); } }
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_); } }
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(); }