Files
TradeBlotter/ViewModels/YieldCurveViewModel.cs
2024-02-23 06:58:53 -05:00

837 lines
37 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using MarketData;
using MarketData.Utils;
using MarketData.MarketDataModel;
using MarketData.Generator;
using MarketData.DataAccess;
using TradeBlotter.DataAccess;
using TradeBlotter.Command;
using TradeBlotter.Model;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using MarketData.Generator.TermStructure;
using Microsoft.Research.DynamicDataDisplay.PointMarkers;
using System.Threading;
using MarketData.Numerical;
namespace TradeBlotter.ViewModels
{
public class YieldCurveViewModel : WorkspaceViewModel
{
private enum Tasks { SelectedItem};
private Dictionary<Tasks, Semaphore> semaphorePool = new Dictionary<Tasks, Semaphore>();
private List<Int32> dayCounts;
private List<String> curves;
private Int32 selectedDayCount;
private String selectedCurve;
private YieldCurve yieldCurve;
private DMAValues yieldCurveMA5;
private DMAValues yieldCurveMA21;
private DMAValues yieldCurveMA55;
private TermStructureInterpolatorByDate termStrucureInterpolatorByDate;
private DateTime selectedTermStructureDate;
private List<DateTime> termStructureDates;
private CurveData termStructureTenorCurveData;
private CompositeDataSource termStructureTenorPointsDataSource;
private CompositeDataSource termStructureDataSource;
private CurveData termStructureTenorCurveData90;
private CompositeDataSource termStructureTenorPointsDataSource90;
private CompositeDataSource termStructureDataSource90;
private CurveData termStructureTenorCurveData180;
private CompositeDataSource termStructureTenorPointsDataSource180;
private CompositeDataSource termStructureDataSource180;
private CompositeDataSource yieldCurveCompositeDataSource;
private CompositeDataSource ma5CompositeDataSource;
private CompositeDataSource ma21CompositeDataSource;
private CompositeDataSource ma55CompositeDataSource;
private double dataSlope=double.NaN; // This is the slope of whatever data is presently being displayed. If TermStructure then it respresents the slope of the most recent curve
private bool isLegendVisible = true;
private bool busyIndicator = false;
public YieldCurveViewModel()
{
semaphorePool.Add(Tasks.SelectedItem, new Semaphore(1, 1));
base.DisplayName = "YieldCurveView";
curves = new List<String>();
curves.Add("1-Month");
curves.Add("3-Month");
curves.Add("6-Month");
curves.Add("1-Year");
curves.Add("2-Year");
curves.Add("3-Year");
curves.Add("5-Year");
curves.Add("7-Year");
curves.Add("10-Year");
curves.Add("20-Year");
curves.Add("30-Year");
curves.Add("Term Structure");
dayCounts = new List<Int32>();
dayCounts.Add(60);
dayCounts.Add(90);
dayCounts.Add(180);
dayCounts.Add(360);
dayCounts.Add(720);
dayCounts.Add(1440);
dayCounts.Add(3600);
termStructureDates=YieldCurveDA.GetYieldCurveDates();
PropertyChanged += OnYieldCurveViewModelPropertyChanged;
selectedDayCount = dayCounts[1];
selectedCurve = curves[curves.Count-1];
base.OnPropertyChanged("SelectedDayCount");
SelectedTermStructureDate=termStructureDates[0];
}
public override SaveParameters GetSaveParameters()
{
return null;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
}
public override bool CanPersist()
{
return false;
}
public bool BusyIndicator
{
get { return busyIndicator; }
set { busyIndicator = value; base.OnPropertyChanged("BusyIndicator"); }
}
private void OnYieldCurveViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName.Equals("SelectedDayCount") || eventArgs.PropertyName.Equals("SelectedCurve")||eventArgs.PropertyName.Equals("SelectedTermStructureDate"))
{
BusyIndicator = true;
Task workerTask = Task.Factory.StartNew(() =>
{
if (null == selectedCurve) return;
semaphorePool[Tasks.SelectedItem].WaitOne();
InitializeDataSource();
UpdateProperties();
yieldCurve = YieldCurveDA.GetYieldCurve(selectedDayCount * 2);
if (selectedCurve.Equals("1-Month"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo1, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo1, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo1, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Mo1);
CalculateSlope(values);
}
else if (selectedCurve.Equals("3-Month"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo3, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo3, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo3, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Mo3);
CalculateSlope(values);
}
else if (selectedCurve.Equals("6-Month"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo6, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo6, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Mo6, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Mo6);
CalculateSlope(values);
}
else if (selectedCurve.Equals("1-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr1, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr1, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr1, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr1);
CalculateSlope(values);
}
else if (selectedCurve.Equals("2-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr2, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr2, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr2, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr2);
CalculateSlope(values);
}
else if (selectedCurve.Equals("3-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr3, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr3, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr3, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr3);
CalculateSlope(values);
}
else if (selectedCurve.Equals("5-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr5, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr5, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr5, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr5);
CalculateSlope(values);
}
else if (selectedCurve.Equals("7-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr7, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr7, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr7, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr7);
CalculateSlope(values);
}
else if (selectedCurve.Equals("10-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr10, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr10, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr10, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr10);
CalculateSlope(values);
}
else if (selectedCurve.Equals("20-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr20, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr20, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr20, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);;
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr20);
CalculateSlope(values);
}
else if (selectedCurve.Equals("30-Year"))
{
termStrucureInterpolatorByDate=null;
yieldCurveMA5 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr30, 5);
yieldCurveMA21 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr30, 21);
yieldCurveMA55 = yieldCurve.GetMovingAverage(YieldCurve.CurveType.Yr30, 55);
yieldCurveCompositeDataSource=YieldCurveModel.Value(yieldCurveMA5);
ma5CompositeDataSource=YieldCurveModel.MA(yieldCurveMA5);
ma21CompositeDataSource=YieldCurveModel.MA(yieldCurveMA21);
ma55CompositeDataSource=YieldCurveModel.MA(yieldCurveMA55);
double[] values=yieldCurve.GetYieldCurveDataOrderByDateAscending(YieldCurve.CurveType.Yr30);
CalculateSlope(values);
}
else if(selectedCurve.Equals("Term Structure"))
{
termStrucureInterpolatorByDate=new TermStructureInterpolatorByDate();
DateGenerator dateGenerator=new DateGenerator();
DateTime termStructureDate90=dateGenerator.GenerateHistoricalDate(selectedTermStructureDate,90);
DateTime termStructureDate180=dateGenerator.GenerateHistoricalDate(selectedTermStructureDate,180);
termStrucureInterpolatorByDate.Add(selectedTermStructureDate,new TermStructureInterpolator(selectedTermStructureDate));
termStrucureInterpolatorByDate.Add(termStructureDate90,new TermStructureInterpolator(termStructureDate90));
termStrucureInterpolatorByDate.Add(termStructureDate180,new TermStructureInterpolator(termStructureDate180));
termStructureTenorCurveData=TermStructureModel.GetTenorCurve(termStrucureInterpolatorByDate,selectedTermStructureDate);
termStructureDataSource=TermStructureModel.GetInterpolatedRates(termStrucureInterpolatorByDate,selectedTermStructureDate);
termStructureTenorPointsDataSource=TermStructureModel.GetTenorRates(termStrucureInterpolatorByDate,selectedTermStructureDate);
termStructureTenorCurveData90=TermStructureModel.GetTenorCurve(termStrucureInterpolatorByDate,termStructureDate90);
termStructureDataSource90=TermStructureModel.GetInterpolatedRates(termStrucureInterpolatorByDate,termStructureDate90);
termStructureTenorPointsDataSource90=TermStructureModel.GetTenorRates(termStrucureInterpolatorByDate,termStructureDate90);
termStructureTenorCurveData180=TermStructureModel.GetTenorCurve(termStrucureInterpolatorByDate,termStructureDate180);
termStructureDataSource180=TermStructureModel.GetInterpolatedRates(termStrucureInterpolatorByDate,termStructureDate180);
termStructureTenorPointsDataSource180=TermStructureModel.GetTenorRates(termStrucureInterpolatorByDate,termStructureDate180);
double[] values=(from Tenor tenor in termStructureTenorCurveData.CurveTenors select tenor.ValueNum).ToArray();
CalculateSlope(values);
yieldCurve = null;
yieldCurveMA5 = null;
yieldCurveMA21 = null;
yieldCurveMA55 = null;
}
});
workerTask.ContinueWith((continuation) =>
{
BusyIndicator = false;
UpdateProperties();
semaphorePool[Tasks.SelectedItem].Release();
});
}
}
public void CalculateSlope(double[] observations)
{
if(observations==null)return;
LeastSquaresResultWithR2 leastSquaresResult=LeastSquaresHelper.CalculateLeastSquaresWithR2(observations);
dataSlope=leastSquaresResult.Slope;
}
public void InitializeDataSource()
{
termStrucureInterpolatorByDate=null;
if(null!=yieldCurveCompositeDataSource)yieldCurveCompositeDataSource.Clear();
if(null!=termStructureTenorPointsDataSource)termStructureTenorPointsDataSource.Clear();
if(null!=termStructureDataSource)termStructureDataSource.Clear();
if(null!=termStructureTenorPointsDataSource90)termStructureTenorPointsDataSource90.Clear();
if(null!=termStructureDataSource90)termStructureDataSource90.Clear();
if(null!=termStructureTenorPointsDataSource180)termStructureTenorPointsDataSource180.Clear();
if(null!=termStructureDataSource180)termStructureDataSource180.Clear();
if(null!=ma5CompositeDataSource)ma5CompositeDataSource.Clear();
if(null!=ma21CompositeDataSource)ma21CompositeDataSource.Clear();
if(null!=ma55CompositeDataSource)ma55CompositeDataSource.Clear();
}
private void UpdateProperties()
{
base.OnPropertyChanged("Values");
base.OnPropertyChanged("MA5");
base.OnPropertyChanged("MA21");
base.OnPropertyChanged("MA55");
base.OnPropertyChanged("TermStructure");
base.OnPropertyChanged("TermStructure90");
base.OnPropertyChanged("TermStructure180");
base.OnPropertyChanged("TermStructureTenors");
base.OnPropertyChanged("TermStructureTenors90");
base.OnPropertyChanged("TermStructureTenors180");
base.OnPropertyChanged("TermStructureTenorMarkers");
base.OnPropertyChanged("TermStructureTenorMarkers90");
base.OnPropertyChanged("TermStructureTenorMarkers180");
base.OnPropertyChanged("DayCountsEnabled");
base.OnPropertyChanged("TermStructureDatesEnabled");
base.OnPropertyChanged("DataSlope");
base.OnPropertyChanged("DataSlopeDescription");
base.OnPropertyChanged("Title");
}
// **************************************************** C O M P O S I T E D A T A S O U R C E *************************************************
// **********************************************************************************************************************************************
public CompositeDataSource Values
{
get
{
if (null == selectedCurve||selectedCurve.Equals("Term Structure")) return null;
return yieldCurveCompositeDataSource;
}
}
public CompositeDataSource MA5
{
get
{
if (null == selectedCurve||selectedCurve.Equals("Term Structure")) return null;
return ma5CompositeDataSource;
}
}
public CompositeDataSource MA21
{
get
{
if (null == selectedCurve||selectedCurve.Equals("Term Structure")) return null;
return ma21CompositeDataSource;
}
}
public CompositeDataSource MA55
{
get
{
if (null == selectedCurve||selectedCurve.Equals("Term Structure")) return null;
return ma55CompositeDataSource;
// return YieldCurveModel.MA(yieldCurveMA55);
}
}
// ****************************************************************************************************************************************************
// ****************************************************************** T E R M S T R U C T U R E ****************************************************
// ****************************************************************************************************************************************************
public CompositeDataSource TermStructure
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource||!selectedCurve.Equals("Term Structure"))return null;
return termStructureDataSource;
}
}
public CompositeDataSource TermStructureTenors
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureTenorPointsDataSource||!selectedCurve.Equals("Term Structure"))return null;
return termStructureTenorPointsDataSource;
}
}
public CenteredTextMarker[] TermStructureTenorMarkers
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource||!selectedCurve.Equals("Term Structure"))return null;
List<CenteredTextMarker> centeredTextMarkers=new List<CenteredTextMarker>();
if(null==termStructureTenorCurveData)return null;
CenteredTextMarker centeredTextMarker=null;
StringBuilder sb=null;
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("1D")).Append("(").Append("1D").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("1M")).Append("(").Append("1M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("3M")).Append("(").Append("3M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("6M")).Append("(").Append("6M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("1Y")).Append("(").Append("1Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("2Y")).Append("(").Append("2Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("3Y")).Append("(").Append("3Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("5Y")).Append("(").Append("5Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("7Y")).Append("(").Append("7Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("10Y")).Append("(").Append("10Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("20Y")).Append("(").Append("20Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData.GetTenorValue("30Y")).Append("(").Append("30Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarker.VerticalShift="45";
centeredTextMarkers.Add(centeredTextMarker);
return centeredTextMarkers.ToArray();
}
}
public CompositeDataSource TermStructure90
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource90||!selectedCurve.Equals("Term Structure"))return null;
return termStructureDataSource90;
}
}
public CompositeDataSource TermStructureTenors90
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureTenorPointsDataSource90||!selectedCurve.Equals("Term Structure"))return null;
return termStructureTenorPointsDataSource90;
}
}
public CenteredTextMarker[] TermStructureTenorMarkers90
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource90||!selectedCurve.Equals("Term Structure"))return null;
List<CenteredTextMarker> centeredTextMarkers=new List<CenteredTextMarker>();
if(null==termStructureTenorCurveData90)return null;
CenteredTextMarker centeredTextMarker=null;
StringBuilder sb=null;
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("1D")).Append("(").Append("1D").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("1M")).Append("(").Append("1M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("3M")).Append("(").Append("3M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("6M")).Append("(").Append("6M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("1Y")).Append("(").Append("1Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("2Y")).Append("(").Append("2Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("3Y")).Append("(").Append("3Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("5Y")).Append("(").Append("5Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("7Y")).Append("(").Append("7Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("10Y")).Append("(").Append("10Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("20Y")).Append("(").Append("20Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData90.GetTenorValue("30Y")).Append("(").Append("30Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarker.VerticalShift="45";
centeredTextMarkers.Add(centeredTextMarker);
return centeredTextMarkers.ToArray();
}
}
public CompositeDataSource TermStructure180
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource180||!selectedCurve.Equals("Term Structure"))return null;
return termStructureDataSource180;
}
}
public CompositeDataSource TermStructureTenors180
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureTenorPointsDataSource180||!selectedCurve.Equals("Term Structure"))return null;
return termStructureTenorPointsDataSource180;
}
}
public CenteredTextMarker[] TermStructureTenorMarkers180
{
get
{
if(null==termStrucureInterpolatorByDate||null==termStructureDataSource180||!selectedCurve.Equals("Term Structure"))return null;
List<CenteredTextMarker> centeredTextMarkers=new List<CenteredTextMarker>();
if(null==termStructureTenorCurveData180)return null;
CenteredTextMarker centeredTextMarker=null;
StringBuilder sb=null;
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("1D")).Append("(").Append("1D").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("1M")).Append("(").Append("1M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("3M")).Append("(").Append("3M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("6M")).Append("(").Append("6M").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("1Y")).Append("(").Append("1Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("2Y")).Append("(").Append("2Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("3Y")).Append("(").Append("3Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("5Y")).Append("(").Append("5Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("7Y")).Append("(").Append("7Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("10Y")).Append("(").Append("10Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("20Y")).Append("(").Append("20Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarkers.Add(centeredTextMarker);
sb=new StringBuilder();
centeredTextMarker=new CenteredTextMarker();
sb.Append(termStructureTenorCurveData180.GetTenorValue("30Y")).Append("(").Append("30Y").Append(")");
centeredTextMarker.Text=sb.ToString();
centeredTextMarker.VerticalShift="45";
centeredTextMarkers.Add(centeredTextMarker);
return centeredTextMarkers.ToArray();
}
}
// *********************************************************************************************************************************************************
public Boolean CheckBoxLegendVisible
{
get
{
return isLegendVisible;
}
set
{
isLegendVisible = value;
base.OnPropertyChanged("CheckBoxLegendVisible");
base.OnPropertyChanged("LegendVisible");
}
}
public String LegendVisible
{
get
{
if (isLegendVisible) return "true";
return "false";
}
set
{
isLegendVisible = Boolean.Parse(value);
base.OnPropertyChanged("LegendVisible");
}
}
public override String Title
{
get
{
if(selectedCurve.Equals("Term Structure"))
{
return "Treasury Yield Curve - Interest Rates "+"("+selectedCurve+") Curve Date ("+Utility.DateTimeToStringMMSDDSYYYY(selectedTermStructureDate)+")";
}
else
{
if(null==yieldCurve||0==yieldCurve.Count)return "";
return "Treasury Yield Curve - Interest Rates "+"("+selectedCurve+") Thru "+Utility.DateTimeToStringMMSDDSYYYY(yieldCurve[0].Date);
}
}
}
public bool TermStructureDatesEnabled
{
get{return selectedCurve.Equals("Term Structure")?true:false;}
}
public Boolean DayCountsEnabled
{
get{return selectedCurve.Equals("Term Structure")?false:true;}
}
public DateTime SelectedTermStructureDate
{
get{return selectedTermStructureDate;}
set{selectedTermStructureDate=value;base.OnPropertyChanged("SelectedTermStructureDate");}
}
public List<DateTime> TermStructureDates
{
get{return termStructureDates;}
}
public List<Int32> DayCounts
{
get { return dayCounts; }
}
public Int32 SelectedDayCount
{
get { return selectedDayCount; }
set { selectedDayCount = value; base.OnPropertyChanged("SelectedDayCount"); }
}
public List<String> Curves
{
get { return curves; }
}
public String SelectedCurve
{
get { return selectedCurve; }
set { selectedCurve = value; base.OnPropertyChanged("SelectedCurve"); }
}
public String DataSlope
{
get
{
if(dataSlope.Equals(double.NaN))return Utility.FormatNumber(0,3);
return Utility.FormatNumber(dataSlope,3);
}
}
// ***********************************************************************************************************************************************************************************
// ********************************************************************************* T O O L T I P C A L L O U T S ****************************************************************
// ***********************************************************************************************************************************************************************************
public String DataSlopeDescription
{
get
{
StringBuilder sb=new StringBuilder();
if(selectedCurve.Equals("Term Structure"))
{
sb.Append("Term Structure: A positive slope implies the bond market expects the economy to do well,").Append("\n");
sb.Append("and a negative slope implies the bond market expects the economy to do badly.").Append("\n");
sb.Append("A negatively sloped inverted yield curve implies that investors expect interest").Append("\n");
sb.Append(" rates to be lower in the future.");
}
else
{
sb.Append("Slope of selected data tenor.");
}
return sb.ToString();
}
}
}
}