145 lines
4.1 KiB
C#
145 lines
4.1 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Controls;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using MarketData.DataAccess;
|
|
using MarketData.Generator.Interface;
|
|
using MarketData.MarketDataModel;
|
|
using MarketData.Numerical;
|
|
using MarketData.Utils;
|
|
using PortfolioManager.ViewModels;
|
|
|
|
namespace PortfolioManager.Dialogs
|
|
{
|
|
public partial class EditPositionDialogViewModel : DialogViewModelBase
|
|
{
|
|
private IPosition sourcePosition;
|
|
private bool syncTrailingStop = true;
|
|
|
|
public EditPositionDialogViewModel(Window dialogWindow, IPosition clonedPosition)
|
|
: base(dialogWindow)
|
|
{
|
|
sourcePosition = clonedPosition;
|
|
DisplayName = "Edit Position";
|
|
}
|
|
|
|
public String Symbol
|
|
{
|
|
get { return sourcePosition.Symbol; }
|
|
}
|
|
|
|
public String CompanyName
|
|
{
|
|
get
|
|
{
|
|
CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(sourcePosition.Symbol);
|
|
return companyProfile.CompanyName;
|
|
}
|
|
}
|
|
|
|
public String PurchaseDate
|
|
{
|
|
get
|
|
{
|
|
return sourcePosition.PurchaseDate.ToShortDateString();
|
|
}
|
|
}
|
|
|
|
public String PurchasePrice
|
|
{
|
|
get
|
|
{
|
|
return Utility.FormatCurrency(sourcePosition.PurchasePrice);
|
|
}
|
|
set
|
|
{
|
|
sourcePosition.PurchasePrice = Utility.ParseCurrency(value);
|
|
base.OnPropertyChanged("PurchasePrice");
|
|
base.OnPropertyChanged("InitialStopRecommendation");
|
|
}
|
|
}
|
|
|
|
public String InitialStopLimit
|
|
{
|
|
get
|
|
{
|
|
return Utility.FormatCurrency(sourcePosition.InitialStopLimit);
|
|
}
|
|
set
|
|
{
|
|
sourcePosition.InitialStopLimit = Utility.ParseCurrency(value);
|
|
base.OnPropertyChanged("InitialStopLimit");
|
|
if (syncTrailingStop)
|
|
{
|
|
TrailingStopLimit = Utility.FormatCurrency(sourcePosition.InitialStopLimit);
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool SyncTrailingStop
|
|
{
|
|
get
|
|
{
|
|
return syncTrailingStop;
|
|
}
|
|
set
|
|
{
|
|
syncTrailingStop = value;
|
|
base.OnPropertyChanged("SyncTrailingStop");
|
|
}
|
|
}
|
|
|
|
public String InitialStopRecommendation
|
|
{
|
|
get
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append("Recommended Initial Stop: ").Append(Utility.FormatCurrency(Numerics.Discount(sourcePosition.PurchasePrice,sourcePosition.PositionRiskPercentDecimal), 2));
|
|
sb.Append(" = Discount(").Append(Utility.FormatCurrency(sourcePosition.PurchasePrice,2)).Append(",").Append(Utility.FormatPercent(sourcePosition.PositionRiskPercentDecimal,2)).Append(")");
|
|
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
|
|
public String InitialStopRecommendationDescription
|
|
{
|
|
get
|
|
{
|
|
return "InitialStopRecommendationDescription";
|
|
}
|
|
}
|
|
|
|
public String TrailingStopLimit
|
|
{
|
|
get
|
|
{
|
|
return Utility.FormatCurrency(sourcePosition.TrailingStopLimit);
|
|
}
|
|
set
|
|
{
|
|
if (Utility.ParseCurrency(value).Equals(sourcePosition.TrailingStopLimit)) return;
|
|
sourcePosition.TrailingStopLimit = Utility.ParseCurrency(value);
|
|
base.OnPropertyChanged("TrailingStopLimit");
|
|
}
|
|
}
|
|
|
|
public IPosition GetResult()
|
|
{
|
|
return sourcePosition;
|
|
}
|
|
|
|
[RelayCommand]
|
|
public async Task OkButtonClick()
|
|
{
|
|
IsSuccess = true;
|
|
await Close();
|
|
}
|
|
|
|
[RelayCommand]
|
|
public async Task CancelButtonClick()
|
|
{
|
|
await Close();
|
|
}
|
|
}
|
|
} |