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;