|
|
|
|
@@ -25,6 +25,8 @@ using System.Windows.Threading;
|
|
|
|
|
using MarketData.Generator.Momentum;
|
|
|
|
|
using TradeBlotter.UIUtils;
|
|
|
|
|
using MarketData.Generator.Model;
|
|
|
|
|
using MarketData.Generator.Interface;
|
|
|
|
|
using Position = MarketData.Generator.Momentum.Position;
|
|
|
|
|
|
|
|
|
|
namespace TradeBlotter.ViewModels
|
|
|
|
|
{
|
|
|
|
|
@@ -87,6 +89,8 @@ namespace TradeBlotter.ViewModels
|
|
|
|
|
private RelayCommand movingAverageCommandPosition;
|
|
|
|
|
private RelayCommand displayHistoricalCommandPosition;
|
|
|
|
|
private RelayCommand displayHeadlinesCommandPosition;
|
|
|
|
|
private RelayCommand closePositionCommandPosition;
|
|
|
|
|
private RelayCommand editPositionCommandPosition;
|
|
|
|
|
// chart plotter
|
|
|
|
|
private bool showAsGainLoss=true;
|
|
|
|
|
private bool isLegendVisible=false;
|
|
|
|
|
@@ -209,6 +213,8 @@ 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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -834,6 +840,37 @@ namespace TradeBlotter.ViewModels
|
|
|
|
|
return removeFromWatchListCommandPosition;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
if(editPositionCommandPosition==null)
|
|
|
|
|
{
|
|
|
|
|
editPositionCommandPosition=new RelayCommand(param => this.EditPositionCommand(selectedPosition),param =>
|
|
|
|
|
{
|
|
|
|
|
if(null==selectedPosition||null==selectedPosition.Symbol||!Utility.IsEpoch(selectedPosition.SellDate)) return false;
|
|
|
|
|
return true;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return editPositionCommandPosition;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// *************************************************************************************************************************************************************
|
|
|
|
|
// ******************************************************************* I C O M M A N D S E S S I O N *********************************************************
|
|
|
|
|
// *************************************************************************************************************************************************************
|
|
|
|
|
@@ -1002,6 +1039,47 @@ namespace TradeBlotter.ViewModels
|
|
|
|
|
System.Windows.MessageBox.Show("Removed '"+symbol+"'","Success", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ClosePositionCommand(MGPositionModel selectedPosition)
|
|
|
|
|
{
|
|
|
|
|
Position clonedPosition=Position.Clone(selectedPosition.Position);
|
|
|
|
|
IPurePosition changedPosition=ClosePositionDialogNoStop.Prompt("Close Position",clonedPosition);
|
|
|
|
|
if(null==changedPosition) return;
|
|
|
|
|
MomentumBacktest momentumModel = new MomentumBacktest();
|
|
|
|
|
if (!momentumModel.ClosePosition(changedPosition.Symbol, changedPosition.PurchaseDate, changedPosition.SellDate, changedPosition.CurrentPrice, pathFileName))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Failed to close the position, check log for details.", "Close Position");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
String strMessage = String.Format("Closed position for {0}, Purchase Date:{1}, Sell Date{2}, Current Price:{3}. Saved to {4}. A backup was created.",
|
|
|
|
|
changedPosition.Symbol,
|
|
|
|
|
changedPosition.PurchaseDate.ToShortDateString(),
|
|
|
|
|
changedPosition.SellDate.ToShortDateString(),
|
|
|
|
|
Utility.FormatCurrency(changedPosition.CurrentPrice),
|
|
|
|
|
pathFileName);
|
|
|
|
|
MessageBox.Show(strMessage, "Close Position");
|
|
|
|
|
LoadSessionFile();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EditPositionCommand(MGPositionModel selectedPosition)
|
|
|
|
|
{
|
|
|
|
|
Position clonedPosition=Position.Clone(selectedPosition.Position);
|
|
|
|
|
IPurePosition changedPosition=EditPositionDialogNoStop.Prompt("Edit Position",clonedPosition);
|
|
|
|
|
if(null==changedPosition) return;
|
|
|
|
|
MomentumBacktest momentumModel = new MomentumBacktest();
|
|
|
|
|
if (!momentumModel.EditPosition(changedPosition.Symbol, changedPosition.PurchaseDate, changedPosition.PurchasePrice, pathFileName))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Failed to edit the position, check log for details.", "Edit Position");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
selectedPosition.PurchaseDate = changedPosition.PurchaseDate;
|
|
|
|
|
selectedPosition.PurchasePrice = changedPosition.PurchasePrice;
|
|
|
|
|
String strMessage = String.Format("Edited Position for {0} Purchase Date:{1} Purchase Price:{2}. A backup was created.",
|
|
|
|
|
selectedPosition.Symbol,
|
|
|
|
|
selectedPosition.PurchaseDate.ToShortDateString(),
|
|
|
|
|
Utility.FormatCurrency(selectedPosition.PurchasePrice));
|
|
|
|
|
MessageBox.Show(strMessage, "Edit Position");
|
|
|
|
|
}
|
|
|
|
|
// **************************************************************************************************************************************************************************
|
|
|
|
|
// ********************************************************************** C O M M A N D W O R K E R S S E S S I O N ********************************************************
|
|
|
|
|
// ***************************************************************************************************************************************************************************
|
|
|
|
|
|