From b34722ec21238607a7258ee4330aafbceed0189a Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 2 Jun 2025 19:07:11 -0400 Subject: [PATCH] Fix AnalysisDate getting set to Epoch when editing or closing positions. --- .../Generator/CMMomentum/CMBacktest.cs | 14 ++-- .../Generator/CMMomentum/CMSessionManager.cs | 4 +- MarketDataLib/Generator/Momentum/Backtest.cs | 68 ++++++++++--------- .../Generator/Momentum/MGSessionManager.cs | 2 +- 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs index 846e4bc..a135d4a 100644 --- a/MarketDataLib/Generator/CMMomentum/CMBacktest.cs +++ b/MarketDataLib/Generator/CMMomentum/CMBacktest.cs @@ -746,9 +746,10 @@ namespace MarketData.Generator.CMMomentum public void SaveSession() { + DateGenerator dateGenerator = new DateGenerator(); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", PathSessionFileName)); CMSessionParams sessionParams = new CMSessionParams(); - CMSessionManager sessionManager = new CMSessionManager(); + if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today()); Parameters.TradeDate = TradeDate; Parameters.AnalysisDate = AnalysisDate; sessionParams.LastUpdated = Today(); @@ -761,16 +762,15 @@ namespace MarketData.Generator.CMMomentum sessionParams.Cycle = Cycle; sessionParams.CashBalance = CashBalance; sessionParams.NonTradeableCash = NonTradeableCash; - sessionManager.SaveSession(sessionParams, PathSessionFileName); + CMSessionManager.SaveSession(sessionParams, PathSessionFileName); } public bool BackupSession() { - String[] parts=PathSessionFileName.Split('.'); - String backupFileName=parts[0]+"_"+Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now)+".bak"; - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Saving session to '{0}'",backupFileName)); + String[] parts = PathSessionFileName.Split('.'); + String backupFileName = parts[0] + "_" + Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now) + ".bak"; + MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", backupFileName)); CMSessionParams sessionParams = new CMSessionParams(); - CMSessionManager sessionManager = new CMSessionManager(); sessionParams.LastUpdated = Today(); sessionParams.TradeDate = TradeDate; sessionParams.StartDate = StartDate; @@ -781,7 +781,7 @@ namespace MarketData.Generator.CMMomentum sessionParams.Cycle = Cycle; sessionParams.CashBalance = CashBalance; sessionParams.NonTradeableCash = NonTradeableCash; - return sessionManager.SaveSession(sessionParams, backupFileName); + return CMSessionManager.SaveSession(sessionParams, backupFileName); } } } diff --git a/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs b/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs index 19f2828..721a57f 100644 --- a/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs +++ b/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs @@ -36,11 +36,13 @@ namespace MarketData.Generator.CMMomentum public class CMSessionManager { private static String SIGNATURE="CMSESSIONv1.00"; - public bool SaveSession(CMSessionParams sessionParams, String pathSessionFile) + public static bool SaveSession(CMSessionParams sessionParams, String pathSessionFile) { try { + DateGenerator dateGenerator = new DateGenerator(); if (null == pathSessionFile) return false; + if (Utility.IsEpoch(sessionParams.AnalysisDate)) sessionParams.AnalysisDate = dateGenerator.GetPrevBusinessDay(DateTime.Now); pathSessionFile = GetSessionFileName(pathSessionFile); FileStream outStream = new FileStream(pathSessionFile, FileMode.Create); StreamWriter streamWriter = new StreamWriter(outStream); diff --git a/MarketDataLib/Generator/Momentum/Backtest.cs b/MarketDataLib/Generator/Momentum/Backtest.cs index 7907d73..419c977 100644 --- a/MarketDataLib/Generator/Momentum/Backtest.cs +++ b/MarketDataLib/Generator/Momentum/Backtest.cs @@ -336,8 +336,8 @@ namespace MarketData.Generator.Momentum Cycle=0; if(AnalysisDate.Date>Today().Date)return backTestResult; - if(Utility.IsEpoch(AnalysisDate))AnalysisDate=dateGenerator.GetPrevBusinessDay(Today()); - TradeDate=dateGenerator.GetCurrentMonthEnd(StartDate); + if(Utility.IsEpoch(AnalysisDate))AnalysisDate=dateGenerator.GetPrevBusinessDay(Today()); // Ensure AnalysisDate is not a weekend or holiday + TradeDate =dateGenerator.GetCurrentMonthEnd(StartDate); if(TradeDate>AnalysisDate) { int startMonth=StartDate.Month; @@ -665,7 +665,7 @@ namespace MarketData.Generator.Momentum MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Restoring session from '{0}'",PathSessionFileName)); MGSessionParams sessionParams=MGSessionManager.RestoreSession(PathSessionFileName); TradeDate=sessionParams.TradeDate; - if(TradeDate.Date