From 3f73fcb7a08a5987ebed7d08aed049f3dd8c4a3f Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 20 Feb 2025 10:36:27 -0500 Subject: [PATCH] Implement new bollinger band for model position. --- ViewModels/CMTTrendViewModel.cs | 96 +++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/ViewModels/CMTTrendViewModel.cs b/ViewModels/CMTTrendViewModel.cs index 0aead12..0fedc03 100644 --- a/ViewModels/CMTTrendViewModel.cs +++ b/ViewModels/CMTTrendViewModel.cs @@ -82,6 +82,7 @@ namespace TradeBlotter.ViewModels private RelayCommand relativeStrengthCommandPosition; private RelayCommand macdCommandPosition; private RelayCommand bollingerBandCommandPosition; + private RelayCommand bollingerBandCommandPositionAll; private RelayCommand priceHistoryCommandPosition; private RelayCommand stickerValuationCommandPosition; private RelayCommand dcfValuationCommandPosition; @@ -202,7 +203,8 @@ namespace TradeBlotter.ViewModels get { ObservableCollection collection=new ObservableCollection(); - collection.Add(new MenuItem() { Text="Display Bollinger Band",MenuItemClickedCommand=DisplayBollingerBandPosition,StaysOpenOnClick=false }); + collection.Add(new MenuItem() { Text="Display Bollinger Band Model Position",MenuItemClickedCommand=DisplayBollingerBandPosition,StaysOpenOnClick=false }); + collection.Add(new MenuItem() { Text="Display Bollinger Band All",MenuItemClickedCommand=DisplayBollingerBandPositionAll,StaysOpenOnClick=false }); collection.Add(new MenuItem() { Text="Display Headlines",MenuItemClickedCommand=DisplayHeadlinesPosition,StaysOpenOnClick=false }); collection.Add(new MenuItem() { Text="Display Dividend History",MenuItemClickedCommand=DisplayDividendHistoryPosition,StaysOpenOnClick=false }); collection.Add(new MenuItem() { Text="Display Sticker Valuation",MenuItemClickedCommand=DisplayStickerValuationPosition,StaysOpenOnClick=false }); @@ -802,6 +804,17 @@ namespace TradeBlotter.ViewModels return bollingerBandCommandPosition; } } + public ICommand DisplayBollingerBandPositionAll + { + get + { + if(bollingerBandCommandPositionAll==null) + { + bollingerBandCommandPositionAll=new RelayCommand(param => this.DisplayBollingerBandCommandPositionAll(),param => { return null!=selectedPosition&&null!=selectedPosition.Symbol; }); + } + return bollingerBandCommandPositionAll; + } + } public ICommand AddToWatchListPosition { get @@ -952,43 +965,9 @@ 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 DisplayBollingerBandCommandPosition() - //{ - // String strStopLimits=null; - // MarketData.MarketDataModel.StopLimits stopLimits=GetHistoricalStopLimitsMarketDataModel(); - // StringBuilder sb=new StringBuilder(); - // if(null!=stopLimits && 0!=stopLimits.Count) - // { - // sb.Append(","); - // NVPCollections nvpCollections=stopLimits.ToNVPCollections(); - // sb.Append("StopHistoryCount").Append(",").Append(String.Format("{0}",nvpCollections.Count)).Append(","); - // for(int index=0;index x.AnalysisDate).ToList()); + + MarketData.Generator.Model.StopLimits stopLimits = default; + if(selectedPosition.IsActivePosition) + { + stopLimits = new MarketData.Generator.Model.StopLimits( + (from MarketData.Generator.Model.StopLimit stopLimit in sessionParams.StopLimits where stopLimit.Symbol.Equals(selectedPosition.Symbol) && + stopLimit.AnalysisDate > selectedPosition.PurchaseDate select stopLimit).OrderByDescending(x => x.AnalysisDate).ToList()); + } + else + { + stopLimits = new MarketData.Generator.Model.StopLimits( + (from MarketData.Generator.Model.StopLimit stopLimit in sessionParams.StopLimits where stopLimit.Symbol.Equals(selectedPosition.Symbol) && + stopLimit.AnalysisDate > selectedPosition.PurchaseDate && stopLimit.AnalysisDate <= selectedPosition.SellDate select stopLimit). + OrderByDescending(x => x.AnalysisDate).ToList()); + } MarketData.MarketDataModel.StopLimit initialStopLimit=new MarketData.MarketDataModel.StopLimit(); initialStopLimit.Symbol=selectedPosition.Symbol; initialStopLimit.Shares=0; initialStopLimit.StopPrice=selectedPosition.InitialStopLimit; initialStopLimit.StopType=StopLimitConstants.STOP_QUOTE; - initialStopLimit.EffectiveDate=dateGenerator.FindNextBusinessDay(selectedPosition.PurchaseDate); + initialStopLimit.EffectiveDate=selectedPosition.PurchaseDate; initialStopLimit.Active=1; marketDataModelStopLimits.Add(initialStopLimit); + foreach(MarketData.Generator.Model.StopLimit stopLimit in stopLimits) { MarketData.MarketDataModel.StopLimit marketDataModelStopLimit=new MarketData.MarketDataModel.StopLimit();