Add tooltips for MGSHMomentumView
This commit is contained in:
@@ -401,6 +401,13 @@ namespace PortfolioManager.ViewModels
|
||||
{
|
||||
base.OnPropertyChanged("ExpectationDescription");
|
||||
base.OnPropertyChanged("CompanyDescriptionSelectedPosition");
|
||||
base.OnPropertyChanged("ToolTipSold");
|
||||
base.OnPropertyChanged("ToolTipExposure");
|
||||
base.OnPropertyChanged("ToolTipInitialStop");
|
||||
base.OnPropertyChanged("ToolTipTrailingStop");
|
||||
base.OnPropertyChanged("ToolTipR");
|
||||
base.OnPropertyChanged("ToolTipTotalRiskExposure");
|
||||
base.OnPropertyChanged("ToolTipRMultiple");
|
||||
}
|
||||
|
||||
private void UpdatePositionPrices(bool change = true)
|
||||
@@ -685,6 +692,46 @@ namespace PortfolioManager.ViewModels
|
||||
|
||||
// ************************************************** T O O L T I P S *************************************************
|
||||
|
||||
public String ToolTipExposure
|
||||
{
|
||||
get
|
||||
{
|
||||
if (null == selectedPosition) return "No row selected.";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (selectedPosition.IsActivePosition)
|
||||
{
|
||||
sb.Append("Exposure = PurchasePrice * Shares\n");
|
||||
sb.Append($"{Utility.FormatCurrency(selectedPosition.Exposure)} = {Utility.FormatCurrency(selectedPosition.PurchasePrice)} * {Utility.FormatNumber(selectedPosition.Shares, 3)}");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("Original Exposure = PurchasePrice * Shares\n");
|
||||
sb.Append($"{Utility.FormatCurrency(selectedPosition.PurchasePrice * selectedPosition.Shares)} = {Utility.FormatCurrency(selectedPosition.PurchasePrice)} * {Utility.FormatNumber(selectedPosition.Shares, 3)}");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipSold
|
||||
{
|
||||
get
|
||||
{
|
||||
if (null == selectedPosition) return "No row selected.";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (selectedPosition.IsActivePosition)
|
||||
{
|
||||
sb.Append($"{selectedPosition.Symbol} is currently active.");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append($"{selectedPosition.Symbol} {selectedPosition.Comment}.");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ExpectationDescription
|
||||
{
|
||||
get
|
||||
@@ -706,20 +753,127 @@ namespace PortfolioManager.ViewModels
|
||||
sb.Append("The calculations are based on closed positions.");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String CompanyDescriptionSelectedPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if(null== selectedPosition || null==selectedPosition.Symbol)return "No row selected.";
|
||||
CompanyProfile companyProfile=CompanyProfileDA.GetCompanyProfile(selectedPosition.Symbol);
|
||||
if(null==companyProfile || null==companyProfile.Description || "".Equals(companyProfile.Description))return "No description found.";
|
||||
if (null == selectedPosition || null == selectedPosition.Symbol) return "No row selected.";
|
||||
CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(selectedPosition.Symbol);
|
||||
if (null == companyProfile || null == companyProfile.Description || "".Equals(companyProfile.Description)) return "No description found.";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append(companyProfile.Symbol).Append(" - ").Append(companyProfile.CompanyName).Append("\n");
|
||||
sb.Append(companyProfile.Sector).Append("/").Append(companyProfile.Industry).Append("\n").Append(companyProfile.Description);
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipInitialStop
|
||||
{
|
||||
get
|
||||
{
|
||||
if (null == selectedPosition) return "No row selected.";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("[InitialStop]=([InitialStopLimit])").Append("\n");
|
||||
sb.Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit));
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipTrailingStop
|
||||
{
|
||||
get
|
||||
{
|
||||
if (null == selectedPosition) return "No row selected.";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("[TrailingStop]=([TrailingStopLimit])").Append("\n");
|
||||
sb.Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit)).Append("\n");
|
||||
List<MarketData.Generator.Model.StopLimit> stopLimits = GetHistoricalStopLimits();
|
||||
if (selectedPosition.TrailingStopLimit > selectedPosition.PurchasePrice)
|
||||
{
|
||||
sb.Append("Riskless Gain").Append(" = ");
|
||||
sb.Append(String.Format("(Trailing Stop - Purchase Price) * Shares"));
|
||||
sb.Append("\n");
|
||||
sb.Append(String.Format("{0}", Utility.FormatCurrency((selectedPosition.TrailingStopLimit - selectedPosition.PurchasePrice) * selectedPosition.Shares)));
|
||||
sb.Append(String.Format("=({0}-{1})*{2}", Utility.FormatCurrency(selectedPosition.TrailingStopLimit), Utility.FormatCurrency(selectedPosition.PurchasePrice), Utility.FormatNumber(selectedPosition.Shares, 3)));
|
||||
sb.Append("\n");
|
||||
}
|
||||
if (null != stopLimits && 0 != stopLimits.Count)
|
||||
{
|
||||
sb.Append("Stop History").Append("\n");
|
||||
foreach (MarketData.Generator.Model.StopLimit stopLimit in stopLimits)
|
||||
{
|
||||
sb.Append(String.Format("Analysis Date:{0} New Stop:{1} Previous Stop:{2}", Utility.DateTimeToStringMMSDDSYYYY(stopLimit.AnalysisDate), Utility.FormatCurrency(stopLimit.NewStop), Utility.FormatCurrency(stopLimit.PreviousStop)));
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipR
|
||||
{
|
||||
get
|
||||
{
|
||||
if(null==selectedPosition)return "No row selected.";
|
||||
StringBuilder sb=new StringBuilder();
|
||||
sb.Append("Current R/Share. See RMultiple for initial risk assumptions.").Append("\n");
|
||||
sb.Append("R/Share=TrailingStop>PurchasePrice?0.00:PurchasePrice-TrailingStop").Append("\n");
|
||||
if(selectedPosition.TrailingStopLimit>selectedPosition.PurchasePrice)
|
||||
{
|
||||
sb.Append(Utility.FormatCurrency(0)).Append("=").Append(Utility.FormatCurrency(0));
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit>selectedPosition.PurchasePrice?0.00:selectedPosition.PurchasePrice-selectedPosition.TrailingStopLimit));
|
||||
sb.Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipTotalRiskExposure
|
||||
{
|
||||
get
|
||||
{
|
||||
if(null==selectedPosition)return "No row selected.";
|
||||
StringBuilder sb=new StringBuilder();
|
||||
sb.Append("Current Risk. See RMultiple for initial risk assumptions.").Append("\n");
|
||||
sb.Append("[TotalRiskExposure]=([R/Share]*[Shares])").Append("\n");
|
||||
if(null==selectedPosition) return sb.ToString();
|
||||
sb.Append(Utility.FormatCurrency(selectedPosition.TotalRiskExposure)).Append("=(").Append(Utility.FormatCurrency(selectedPosition.R)).Append("*").Append(Utility.FormatNumber(selectedPosition.Shares,0)).Append(")");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public String ToolTipRMultiple
|
||||
{
|
||||
get
|
||||
{
|
||||
if(null==selectedPosition)return "Please select a position by clicking on a row.";
|
||||
StringBuilder sb=new StringBuilder();
|
||||
sb.Append("RMultiple is based on original position setup.").Append("\n");
|
||||
sb.Append("Original Exposure=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice*selectedPosition.Shares)).Append("\n");
|
||||
sb.Append("Original R/Share=PurchasePrice-InitialStop").Append("\n");
|
||||
sb.Append(Utility.FormatCurrency(selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append("\n");
|
||||
sb.Append("Original Risk=Original R/Share*Shares").Append("\n");
|
||||
sb.Append(Utility.FormatCurrency((selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)*selectedPosition.Shares)).Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)).Append("*").Append(selectedPosition.Shares).Append("\n");
|
||||
sb.Append("RMultiple=(CurrentPrice-PurchasePrice)/(PurchasePrice-InitialStop)").Append("\n");
|
||||
sb.Append(selectedPosition.RMultipleAsString).Append("=").Append("(").Append(Utility.FormatCurrency(selectedPosition.CurrentPrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append(")");
|
||||
sb.Append("/").Append("(").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append(")");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************** T O O L T I P H E L P E R S **************************************************************
|
||||
public MarketData.Generator.Model.StopLimits GetHistoricalStopLimits()
|
||||
{
|
||||
if (null == sessionParams || null == selectedPosition) return null;
|
||||
MarketData.Generator.Model.StopLimits stopLimits = new MarketData.Generator.Model.StopLimits(
|
||||
(from MarketData.Generator.Model.StopLimit stopLimit in sessionParams.StopLimits where stopLimit.StopLimitId.Equals(selectedPosition.Symbol + Utility.DateTimeToStringYYYYMMDDMMSSTT(selectedPosition.PurchaseDate)) select stopLimit)
|
||||
.OrderByDescending(x => x.AnalysisDate).ToList());
|
||||
return stopLimits;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user