using MarketData.Generator; using MarketData.MarketDataModel; using MarketData.Utils; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using TradeBlotter.ViewModels; using TradeBlotter.UIUtils; using System.Collections.Specialized; using MarketData; using MarketData.Generator.Momentum; using MarketData.DataAccess; using System.CodeDom; using MarketData.Generator.MGSHMomentum; namespace TradeBlotter.Model { public class MGSHPositionModelCollection : ObservableCollection { public void Add(MGSHActivePositions activePositions) { List slotKeys=new List(activePositions.Keys); for(int keyIndex=0;keyIndexposition.CurrentPrice)priceChangeDirection=-1; else if(prevPrice==position.CurrentPrice)priceChangeDirection=0; else priceChangeDirection=1; prevPrice=position.CurrentPrice; UpdateProperties(); } } public double RSI3 { get{return rsi3;} set { if(rsi3==value)return; rsi3=value; base.OnPropertyChanged("RSI3"); base.OnPropertyChanged("RSI3Color"); } } public DateTime LastUpdated { get{return lastUpdated;} set{lastUpdated=value;base.OnPropertyChanged("LastUpdated");} } public Brush CurrentPriceColor { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if(priceChangeDirection>0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Green); else if(priceChangeDirection<0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); else return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public Brush RSI3Color { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if(RSI3<10||RSI3>80)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public double Exposure { get{return Shares*PurchasePrice;} } public double ActiveExposure { get{return IsActivePosition?Exposure:0.00;} } public Brush ActiveExposureColor { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); else return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public double MarketValue { get{return Shares*CurrentPrice;} } public double ActiveMarketValue { get{return IsActivePosition?MarketValue:0.00;} } public Brush ActiveMarketValueColor { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if (ActiveMarketValue > Exposure) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Green); else if (ActiveMarketValue < Exposure) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); else return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public long Volume { get{return position.Volume;} set{position.Volume=value;base.OnPropertyChanged("Volume");} } public double Return1D { get{return position.Return1D;} set{position.Return1D=value;base.OnPropertyChanged("Return1D");} } public double GainLoss { get{return MarketValue-Exposure;} } public Brush GainLossColor { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if(GainLoss>0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Green); else if(GainLoss<0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); else return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public double GainLossPcnt { get{return (MarketValue-Exposure)/Exposure;} } public Brush GainLossPcntColor { get { if(!IsActivePosition)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if(GainLoss>0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Green); else if(GainLoss<0)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); else return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public double CumReturn252 { get{return position.CumReturn252;} set{position.CumReturn252=value;base.OnPropertyChanged("CumReturn252");} } public double IDIndicator { get{return position.IDIndicator;} set{position.IDIndicator=value;base.OnPropertyChanged("IDIndicator");} } public double Score { get { return position.Score; } set { position.Score=value; base.OnPropertyChanged("Score"); } } public double MaxDrawdown { get{return position.MaxDrawdown;} set{position.MaxDrawdown=value;base.OnPropertyChanged("MaxDrawdown");} } public double MaxUpside { get{return position.MaxUpside;} set{position.MaxUpside=value;base.OnPropertyChanged("MaxUpside");} } public double Velocity { get{return position.Velocity;} set{position.Velocity=value;base.OnPropertyChanged("Velocity");} } public double PE { get{return position.PE;} set{position.PE=value;base.OnPropertyChanged("PE");} } public String ZacksRank { get {return position.ZacksRank;} set{position.ZacksRank=value;base.OnPropertyChanged("ZacksRank");} } public double Beta { get{return position.Beta;} set{position.Beta=value;base.OnPropertyChanged("Beta");} } public bool IsActivePosition { get{return Utility.IsEpoch(SellDate)?true:false;} } public double InitialStopLimit { get { return position.InitialStopLimit; } set { position.InitialStopLimit=value; base.OnPropertyChanged("InitialStopLimit"); base.OnPropertyChanged("InitialStopLimitColor"); } } public Brush InitialStopLimitColor { get { if(!IsActivePosition) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); if(!Utility.IsEpoch(position.LastStopAdjustment)) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); // if we have a trailing stop then we are no longer using the initial stop StopLimit stopLimit=PortfolioDA.GetStopLimit(position.Symbol); if(null==stopLimit||!stopLimit.StopPrice.Equals(Math.Round(position.InitialStopLimit,2))) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Purple); if(currentPriceLow<=position.InitialStopLimit) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } public double TrailingStopLimit { get { return position.TrailingStopLimit; } set { position.TrailingStopLimit=value; base.OnPropertyChanged("TrailingStopLimit"); base.OnPropertyChanged("TrailingStopLimitColor"); } } public Brush TrailingStopLimitColor { get { if(!IsActivePosition) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); StopLimit stopLimit=PortfolioDA.GetStopLimit(position.Symbol); if(null==stopLimit||!stopLimit.StopPrice.Equals(Math.Round(position.TrailingStopLimit,2))) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Purple); if(currentPriceLow<=position.TrailingStopLimit)return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Red); return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } // *** public DateTime LastStopAdjustment { get { return position.LastStopAdjustment; } set { position.LastStopAdjustment=value; base.OnPropertyChanged("LastStopAdjustment"); } } public Brush LastStopAdjustmentColor { get { if(!IsActivePosition) return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Blue); return BrushCollection.GetContextBrush(BrushCollection.BrushColor.Black); } } } }