Add ClosePosition to MGSHMomentumViewModel
This commit is contained in:
@@ -92,6 +92,7 @@ namespace TradeBlotter.ViewModels
|
||||
private RelayCommand displayHistoricalCommandPosition;
|
||||
private RelayCommand displayHeadlinesCommandPosition;
|
||||
private RelayCommand editPositionCommandPosition;
|
||||
private RelayCommand closePositionCommandPosition;
|
||||
|
||||
// chart plotter
|
||||
private bool showAsGainLoss=true;
|
||||
@@ -225,6 +226,7 @@ namespace TradeBlotter.ViewModels
|
||||
collection.Add(new MenuItem() { Text = "Display DCF Valuation", MenuItemClickedCommand = DisplayDCFValuationPosition, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Text = "Add to Watchlist", MenuItemClickedCommand = AddToWatchListPosition, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Text = "Remove from Watchlist", MenuItemClickedCommand = RemoveFromWatchListPosition, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Text="Close Position...",MenuItemClickedCommand=ClosePosition,StaysOpenOnClick=false });
|
||||
collection.Add(new MenuItem() { Text="Edit Position...",MenuItemClickedCommand=EditPosition,StaysOpenOnClick=false });
|
||||
return collection;
|
||||
}
|
||||
@@ -854,6 +856,22 @@ namespace TradeBlotter.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand ClosePosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if(closePositionCommandPosition==null)
|
||||
{
|
||||
closePositionCommandPosition=new RelayCommand(param => this.ClosePositionCommand(selectedPosition),param =>
|
||||
{
|
||||
if(null==selectedPosition||null==selectedPosition.Symbol) return false;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
return closePositionCommandPosition;
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand EditPosition
|
||||
{
|
||||
get
|
||||
@@ -955,6 +973,26 @@ namespace TradeBlotter.ViewModels
|
||||
// *************************************************************************************************************************************************************
|
||||
// ********************************************************************** C O M M A N D W O R K E R S P O S I T I O N ****************************************
|
||||
// *************************************************************************************************************************************************************
|
||||
public void ClosePositionCommand(MGSHPositionModel selectedPosition)
|
||||
{
|
||||
bool deleteStop=false;
|
||||
MGSHPosition clonedPosition=MGSHPosition.Clone(selectedPosition.Position);
|
||||
bool hasStopLimit=PortfolioDA.HasStopLimit(clonedPosition.Symbol);
|
||||
IPosition changedPosition=ClosePositionDialog.Prompt("Close Position",clonedPosition,hasStopLimit,ref deleteStop);
|
||||
if(null==changedPosition) return;
|
||||
MGSHMomentumBacktest mgshMomentumBacktest = new MGSHMomentumBacktest();
|
||||
if(!mgshMomentumBacktest.ClosePosition(changedPosition.Symbol,changedPosition.PurchaseDate,changedPosition.SellDate,changedPosition.CurrentPrice,pathFileName))
|
||||
{
|
||||
MessageBox.Show("Failed to close the position, check log for details.","Close Position");
|
||||
return;
|
||||
}
|
||||
if(deleteStop) PortfolioDA.DeleteStopLimit(changedPosition.Symbol);
|
||||
String strMessage=String.Format("Closed position for {0}, Purchase Date:{1}, Sell Date{2}, Current Price:{3}, Delete Stop:{4} to {5}. A backup was created.",
|
||||
changedPosition.Symbol,changedPosition.PurchaseDate.ToShortDateString(),changedPosition.SellDate.ToShortDateString(),Utility.FormatCurrency(changedPosition.CurrentPrice),deleteStop,pathFileName);
|
||||
MessageBox.Show(strMessage,"Close Position");
|
||||
LoadSessionFile();
|
||||
}
|
||||
|
||||
public void EditPositionCommand(MGSHPositionModel selectedPosition)
|
||||
{
|
||||
MGSHPosition clonedPosition = MGSHPosition.Clone(selectedPosition.Position);
|
||||
@@ -1416,8 +1454,8 @@ namespace TradeBlotter.ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
if(null==selectedPosition) return "Please select a position by clicking on a row.";
|
||||
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();
|
||||
@@ -1446,14 +1484,67 @@ namespace TradeBlotter.ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
StringBuilder sb=new StringBuilder();
|
||||
if(null==selectedPosition) return "Please select a position by clicking on a row.";
|
||||
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 ToolTipR
|
||||
{
|
||||
get
|
||||
{
|
||||
if(null==selectedPosition)return "Please select a position by clicking on a row.";
|
||||
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 "Please select a position by clicking on a row.";
|
||||
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
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user