Fix AnalysisDate getting set to Epoch when editing or closing positions.

This commit is contained in:
2025-06-02 19:07:11 -04:00
parent 874efdf416
commit b34722ec21
4 changed files with 46 additions and 42 deletions

View File

@@ -746,9 +746,10 @@ namespace MarketData.Generator.CMMomentum
public void SaveSession() public void SaveSession()
{ {
DateGenerator dateGenerator = new DateGenerator();
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", PathSessionFileName)); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", PathSessionFileName));
CMSessionParams sessionParams = new CMSessionParams(); CMSessionParams sessionParams = new CMSessionParams();
CMSessionManager sessionManager = new CMSessionManager(); if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today());
Parameters.TradeDate = TradeDate; Parameters.TradeDate = TradeDate;
Parameters.AnalysisDate = AnalysisDate; Parameters.AnalysisDate = AnalysisDate;
sessionParams.LastUpdated = Today(); sessionParams.LastUpdated = Today();
@@ -761,16 +762,15 @@ namespace MarketData.Generator.CMMomentum
sessionParams.Cycle = Cycle; sessionParams.Cycle = Cycle;
sessionParams.CashBalance = CashBalance; sessionParams.CashBalance = CashBalance;
sessionParams.NonTradeableCash = NonTradeableCash; sessionParams.NonTradeableCash = NonTradeableCash;
sessionManager.SaveSession(sessionParams, PathSessionFileName); CMSessionManager.SaveSession(sessionParams, PathSessionFileName);
} }
public bool BackupSession() public bool BackupSession()
{ {
String[] parts=PathSessionFileName.Split('.'); String[] parts = PathSessionFileName.Split('.');
String backupFileName=parts[0]+"_"+Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now)+".bak"; String backupFileName = parts[0] + "_" + Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now) + ".bak";
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Saving session to '{0}'",backupFileName)); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", backupFileName));
CMSessionParams sessionParams = new CMSessionParams(); CMSessionParams sessionParams = new CMSessionParams();
CMSessionManager sessionManager = new CMSessionManager();
sessionParams.LastUpdated = Today(); sessionParams.LastUpdated = Today();
sessionParams.TradeDate = TradeDate; sessionParams.TradeDate = TradeDate;
sessionParams.StartDate = StartDate; sessionParams.StartDate = StartDate;
@@ -781,7 +781,7 @@ namespace MarketData.Generator.CMMomentum
sessionParams.Cycle = Cycle; sessionParams.Cycle = Cycle;
sessionParams.CashBalance = CashBalance; sessionParams.CashBalance = CashBalance;
sessionParams.NonTradeableCash = NonTradeableCash; sessionParams.NonTradeableCash = NonTradeableCash;
return sessionManager.SaveSession(sessionParams, backupFileName); return CMSessionManager.SaveSession(sessionParams, backupFileName);
} }
} }
} }

View File

@@ -36,11 +36,13 @@ namespace MarketData.Generator.CMMomentum
public class CMSessionManager public class CMSessionManager
{ {
private static String SIGNATURE="CMSESSIONv1.00"; private static String SIGNATURE="CMSESSIONv1.00";
public bool SaveSession(CMSessionParams sessionParams, String pathSessionFile) public static bool SaveSession(CMSessionParams sessionParams, String pathSessionFile)
{ {
try try
{ {
DateGenerator dateGenerator = new DateGenerator();
if (null == pathSessionFile) return false; if (null == pathSessionFile) return false;
if (Utility.IsEpoch(sessionParams.AnalysisDate)) sessionParams.AnalysisDate = dateGenerator.GetPrevBusinessDay(DateTime.Now);
pathSessionFile = GetSessionFileName(pathSessionFile); pathSessionFile = GetSessionFileName(pathSessionFile);
FileStream outStream = new FileStream(pathSessionFile, FileMode.Create); FileStream outStream = new FileStream(pathSessionFile, FileMode.Create);
StreamWriter streamWriter = new StreamWriter(outStream); StreamWriter streamWriter = new StreamWriter(outStream);

View File

@@ -336,8 +336,8 @@ namespace MarketData.Generator.Momentum
Cycle=0; Cycle=0;
if(AnalysisDate.Date>Today().Date)return backTestResult; if(AnalysisDate.Date>Today().Date)return backTestResult;
if(Utility.IsEpoch(AnalysisDate))AnalysisDate=dateGenerator.GetPrevBusinessDay(Today()); if(Utility.IsEpoch(AnalysisDate))AnalysisDate=dateGenerator.GetPrevBusinessDay(Today()); // Ensure AnalysisDate is not a weekend or holiday
TradeDate=dateGenerator.GetCurrentMonthEnd(StartDate); TradeDate =dateGenerator.GetCurrentMonthEnd(StartDate);
if(TradeDate>AnalysisDate) if(TradeDate>AnalysisDate)
{ {
int startMonth=StartDate.Month; int startMonth=StartDate.Month;
@@ -665,7 +665,7 @@ namespace MarketData.Generator.Momentum
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Restoring session from '{0}'",PathSessionFileName)); MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Restoring session from '{0}'",PathSessionFileName));
MGSessionParams sessionParams=MGSessionManager.RestoreSession(PathSessionFileName); MGSessionParams sessionParams=MGSessionManager.RestoreSession(PathSessionFileName);
TradeDate=sessionParams.TradeDate; TradeDate=sessionParams.TradeDate;
if(TradeDate.Date<AnalysisDate.Date)TradeDate=AnalysisDate; if(TradeDate.Date<AnalysisDate.Date)TradeDate=AnalysisDate; // AnalysisDate will not fall on a weekend or holiday
StartDate=sessionParams.StartDate; StartDate=sessionParams.StartDate;
Configuration=sessionParams.Configuration; Configuration=sessionParams.Configuration;
ActivePositions=sessionParams.ActivePositions; ActivePositions=sessionParams.ActivePositions;
@@ -683,40 +683,42 @@ namespace MarketData.Generator.Momentum
} }
public void SaveSession() public void SaveSession()
{ {
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Saving session to '{0}'",PathSessionFileName)); DateGenerator dateGenerator = new DateGenerator();
MGSessionParams sessionParams=new MGSessionParams(); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", PathSessionFileName));
MGSessionManager sessionManager=new MGSessionManager(); MGSessionParams sessionParams = new MGSessionParams();
sessionParams.LastUpdated=Today(); if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today());
sessionParams.TradeDate=TradeDate; sessionParams.LastUpdated = Today();
sessionParams.StartDate=StartDate; sessionParams.TradeDate = TradeDate;
sessionParams.AnalysisDate=AnalysisDate; sessionParams.StartDate = StartDate;
sessionParams.Configuration=Configuration; sessionParams.AnalysisDate = AnalysisDate;
sessionParams.ActivePositions=ActivePositions; sessionParams.Configuration = Configuration;
sessionParams.AllPositions=AllPositions; sessionParams.ActivePositions = ActivePositions;
sessionParams.Cycle=Cycle; sessionParams.AllPositions = AllPositions;
sessionParams.CashBalance=CashBalance; sessionParams.Cycle = Cycle;
sessionParams.NonTradeableCash=NonTradeableCash; sessionParams.CashBalance = CashBalance;
sessionManager.SaveSession(sessionParams,PathSessionFileName); sessionParams.NonTradeableCash = NonTradeableCash;
MGSessionManager.SaveSession(sessionParams,PathSessionFileName);
} }
public bool BackupSession() public bool BackupSession()
{ {
String[] parts=PathSessionFileName.Split('.'); DateGenerator dateGenerator = new DateGenerator();
String backupFileName=parts[0]+"_"+Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now)+".bak"; String[] parts = PathSessionFileName.Split('.');
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Saving session to '{0}'",backupFileName)); String backupFileName = parts[0] + "_" + Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now) + ".bak";
MGSessionParams sessionParams=new MGSessionParams(); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", backupFileName));
MGSessionManager sessionManager=new MGSessionManager(); MGSessionParams sessionParams = new MGSessionParams();
sessionParams.LastUpdated=Today(); if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today());
sessionParams.TradeDate=TradeDate; sessionParams.LastUpdated = Today();
sessionParams.StartDate=StartDate; sessionParams.TradeDate = TradeDate;
sessionParams.AnalysisDate=AnalysisDate; sessionParams.StartDate = StartDate;
sessionParams.Configuration=Configuration; sessionParams.AnalysisDate = AnalysisDate;
sessionParams.ActivePositions=ActivePositions; sessionParams.Configuration = Configuration;
sessionParams.AllPositions=AllPositions; sessionParams.ActivePositions = ActivePositions;
sessionParams.Cycle=Cycle; sessionParams.AllPositions = AllPositions;
sessionParams.CashBalance=CashBalance; sessionParams.Cycle = Cycle;
sessionParams.NonTradeableCash=NonTradeableCash; sessionParams.CashBalance = CashBalance;
return sessionManager.SaveSession(sessionParams,backupFileName); sessionParams.NonTradeableCash = NonTradeableCash;
return MGSessionManager.SaveSession(sessionParams,backupFileName);
} }
} }
} }

View File

@@ -12,7 +12,7 @@ namespace MarketData.Generator.Momentum
// ***************************************************************************** // *****************************************************************************
public class MGSessionManager public class MGSessionManager
{ {
public bool SaveSession(MGSessionParams sessionParams,String pathSessionFile) public static bool SaveSession(MGSessionParams sessionParams,String pathSessionFile)
{ {
try try
{ {