This commit is contained in:
2024-02-23 06:58:53 -05:00
commit 732db8235b
211 changed files with 37084 additions and 0 deletions

View File

@@ -0,0 +1,836 @@
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();
}
}
}
}