From 46e080923f9bfa9dd0d942f34d9e24be51f6838c Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 3 Mar 2025 19:41:45 -0500 Subject: [PATCH] Code cleanup. --- .../Generator/CMMomentum/CMBacktest.cs | 6 +++- .../CMMomentum/CMCandidateGenerator.cs | 35 ++++++++++--------- .../CMTrend/CMTCandidateGenerator.cs | 4 +-- .../Generator/CMTrend/CMTTrendModel..cs | 1 - .../Generator/MGSHMomentum/MGSHBacktest.cs | 1 - .../MGSHMomentum/MGSHMomentumGenerator.cs | 5 +-- MarketDataLib/Generator/Momentum/Backtest.cs | 1 - .../Generator/Momentum/MomentumGenerator.cs | 5 +-- 8 files changed, 32 insertions(+), 26 deletions(-) diff --git a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs index c91e8ee..fe0c339 100644 --- a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs +++ b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs @@ -735,6 +735,11 @@ namespace MarketData.Generator.CMMomentum // **************************************************************************************************************************************** // **************************************************************** S E S S I O N M A N A G E M E N T *********************************** // **************************************************************************************************************************************** + /// + /// Restore the session file from disk. + /// Take note that we do not restore AnalysisDate from the session file. The analysis date must always reflect the current analysis date. + /// + /// public CMSessionParams RestoreSession() { try @@ -746,7 +751,6 @@ namespace MarketData.Generator.CMMomentum TradeDate = sessionParams.TradeDate; if (TradeDate.Date < AnalysisDate.Date) TradeDate = AnalysisDate; StartDate = sessionParams.StartDate; - AnalysisDate = sessionParams.AnalysisDate; Parameters = sessionParams.CMParams; ActivePositions = sessionParams.ActivePositions; AllPositions = sessionParams.AllPositions; diff --git a/MarketDataLib/Generator/CMMomentum/CMCandidateGenerator.cs b/MarketDataLib/Generator/CMMomentum/CMCandidateGenerator.cs index 567532d..4774c15 100644 --- a/MarketDataLib/Generator/CMMomentum/CMCandidateGenerator.cs +++ b/MarketDataLib/Generator/CMMomentum/CMCandidateGenerator.cs @@ -22,6 +22,24 @@ namespace MarketData.Generator.CMMomentum { CMCandidate cmCandidate = new CMCandidate(); + // No trade symbols + if (null!=cmParams.NoTradeSymbolsList&&cmParams.NoTradeSymbolsList.Any(x => x.Equals(symbol))) + { + cmCandidate.Violation = true; + cmCandidate.Reason = String.Format("Candidate in the No-Trade list."); + cmCandidate.ReasonCategory = String.Format("Candidate in the No-Trade list."); + return cmCandidate; + } + + // Check if the symbol is held in any open positions + if (null != symbolsHeld && symbolsHeld.Any(x => x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) + { + cmCandidate.Violation = true; + cmCandidate.Reason = String.Format("Already held."); + cmCandidate.ReasonCategory = String.Format("Already held."); + return cmCandidate; + } + Fundamental fundamental = FundamentalDA.GetFundamentalMaxDate(symbol, tradeDate); if (null == fundamental) { @@ -37,22 +55,7 @@ namespace MarketData.Generator.CMMomentum cmCandidate.ReasonCategory = String.Format("MarketCapLowerLimit constraint violation."); return cmCandidate; } - // Check if the symbol is held in any open positions - if (null != symbolsHeld && symbolsHeld.Any(x => x.Equals(symbol))) - { - cmCandidate.Violation = true; - cmCandidate.Reason = String.Format("Already held."); - cmCandidate.ReasonCategory = String.Format("Already held."); - return cmCandidate; - } - // No trade symbols - if (null!=cmParams.NoTradeSymbolsList&&cmParams.NoTradeSymbolsList.Any(x => x.Equals(symbol))) - { - cmCandidate.Violation = true; - cmCandidate.Reason = String.Format("Candidate in the No-Trade list."); - cmCandidate.ReasonCategory = String.Format("Candidate in the No-Trade list."); - return cmCandidate; - } + // Equity check CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(symbol); if (!companyProfile.IsEquity) diff --git a/MarketDataLib/Generator/CMTrend/CMTCandidateGenerator.cs b/MarketDataLib/Generator/CMTrend/CMTCandidateGenerator.cs index 9a4036d..804398d 100644 --- a/MarketDataLib/Generator/CMTrend/CMTCandidateGenerator.cs +++ b/MarketDataLib/Generator/CMTrend/CMTCandidateGenerator.cs @@ -40,14 +40,14 @@ namespace MarketData.Generator.CMTrend return cmtCandidate; } // Check if the symbol is held in any open positions - if(null!=symbolsHeld&&symbolsHeld.Any(x => x.Equals(symbol))) + if(null!=symbolsHeld&&symbolsHeld.Any(x => x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { cmtCandidate.Violation=true; cmtCandidate.Reason=String.Format("{0} is already held.",symbol); return cmtCandidate; } // No trade symbols - if(null!=cmtParams.NoTradeSymbolsList&&cmtParams.NoTradeSymbolsList.Any(x => x.Equals(symbol))) + if(null!=cmtParams.NoTradeSymbolsList&&cmtParams.NoTradeSymbolsList.Any(x => x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { cmtCandidate.Violation=true; cmtCandidate.Reason=String.Format("{0} is in the No-Trade list.",symbol); diff --git a/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs b/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs index c84ea98..2787315 100644 --- a/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs +++ b/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs @@ -26,7 +26,6 @@ namespace MarketData.Generator.CMTrend public CMTParams Parameters { get; set; } private int MaxDailyPositions { get { return Parameters.MaxDailyPositions; } } private int MaxOpenPositions { get { return Parameters.MaxOpenPositions; } } - private List NoTradeSymbols { get { return Utility.ToList(Parameters.NoTradeSymbols); } } private int MaxPricingExceptions { get { return Parameters.MaxPricingExceptions; } } private ActivePositions ActivePositions { get; set; } private Positions AllPositions { get; set; } diff --git a/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs b/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs index 5f7a30d..1c8eb36 100644 --- a/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs +++ b/MarketDataLib/Generator/MGSHMomentum/MGSHBacktest.cs @@ -23,7 +23,6 @@ namespace MarketData.Generator.MGSHMomentum private int HoldingPeriod{get{return Configuration.HoldingPeriod;}} private int MaxPositions{get{return Configuration.MaxPositions;}} private int MaxPricingExceptions{get{return Configuration.MaxPricingExceptions;}} - //private List NoTradeSymbols{get{return Utility.ToList(Configuration.NoTradeSymbols);}} private MGSHActivePositions ActivePositions{get;set;} private StopLimits StopLimits{get;set;} private MGSHPositions AllPositions{get;set;} diff --git a/MarketDataLib/Generator/MGSHMomentum/MGSHMomentumGenerator.cs b/MarketDataLib/Generator/MGSHMomentum/MGSHMomentumGenerator.cs index a3f35cf..ce81590 100644 --- a/MarketDataLib/Generator/MGSHMomentum/MGSHMomentumGenerator.cs +++ b/MarketDataLib/Generator/MGSHMomentum/MGSHMomentumGenerator.cs @@ -82,15 +82,16 @@ namespace MarketData.Generator.MGSHMomentum { String symbol=symbols[index]; if(0==(index%500))Console.WriteLine("Processing item {0} of {1}",index+1,symbols.Count); + // Check if the symbol is held in any open positions - if(symbolsHeld.Any(x=>x.Equals(symbol))) + if(symbolsHeld.Any(x=>x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { candidateViolations.Add(new CandidateViolation(symbol,"Candidate already held.")); continue; } // Check if the symbol is in the no trade list (i.e.) Bitcoin etc., - if(noTradeSymbols.Any(x=>x.Equals(symbol))) + if(noTradeSymbols.Any(x=>x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { candidateViolations.Add(new CandidateViolation(symbol,"Candidate in NoTradeSymbol.")); continue; diff --git a/MarketDataLib/Generator/Momentum/Backtest.cs b/MarketDataLib/Generator/Momentum/Backtest.cs index f7295ea..922d755 100644 --- a/MarketDataLib/Generator/Momentum/Backtest.cs +++ b/MarketDataLib/Generator/Momentum/Backtest.cs @@ -16,7 +16,6 @@ namespace MarketData.Generator.Momentum private MGConfiguration Configuration{get;set;} private int HoldingPeriod{get{return Configuration.HoldingPeriod;}} private int MaxPositions{get{return Configuration.MaxPositions;}} - private List NoTradeSymbols{get{return Utility.ToList(Configuration.NoTradeSymbols);}} private ActivePositions ActivePositions{get;set;} private Positions AllPositions{get;set;} private int Cycle{get;set;} diff --git a/MarketDataLib/Generator/Momentum/MomentumGenerator.cs b/MarketDataLib/Generator/Momentum/MomentumGenerator.cs index fc180fe..bd7f992 100644 --- a/MarketDataLib/Generator/Momentum/MomentumGenerator.cs +++ b/MarketDataLib/Generator/Momentum/MomentumGenerator.cs @@ -77,15 +77,16 @@ namespace MarketData.Generator.Momentum { String symbol=symbols[index]; if(0==(index%500))Console.WriteLine("Processing item {0} of {1}",index+1,symbols.Count); + // Check if the symbol is held in any open positions - if(symbolsHeld.Any(x=>x.Equals(symbol))) + if(symbolsHeld.Any(x=>x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { candidateViolations.Add(new CandidateViolation(symbol,"Candidate already held.")); continue; } // Check if the symbol is in the no trade list (i.e.) Bitcoin etc., - if(noTradeSymbols.Any(x=>x.Equals(symbol))) + if(noTradeSymbols.Any(x=>x.Equals(symbol, StringComparison.CurrentCultureIgnoreCase))) { candidateViolations.Add(new CandidateViolation(symbol,"Candidate in NoTradeSymbol.")); continue;