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