From 4f0f4e79f6ffa6f90bb390c3fc43aa0255fb7014 Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 2 Jun 2025 18:58:41 -0400 Subject: [PATCH] Fix AnalysisDate when Editing/Closing Positions --- MarketData/MarketData/Services/MainService.cs | 16 ++++- .../Generator/CMMomentum/CMBacktest.cs | 14 ++--- .../Generator/CMMomentum/CMSessionManager.cs | 4 +- .../{CMTTrendModel..cs => CMTTrendModel.cs} | 0 .../Generator/Momentum/Backtest.cs | 62 ++++++++++--------- .../Generator/Momentum/MGSessionManager.cs | 2 +- 6 files changed, 58 insertions(+), 40 deletions(-) rename MarketData/MarketDataLib/Generator/CMTrend/{CMTTrendModel..cs => CMTTrendModel.cs} (100%) diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs index d4bbc2e..30aaab3 100755 --- a/MarketData/MarketData/Services/MainService.cs +++ b/MarketData/MarketData/Services/MainService.cs @@ -11,6 +11,9 @@ using MarketData.Cache; using MarketData.Generator; using MarketData.ModelHelper; using MarketData.Numerical; +using MarketData.Generator.Momentum; +using MarketData.Generator.MGSHMomentum; +using MarketData.Generator.CMMomentum; namespace MarketData.Services { @@ -100,9 +103,20 @@ namespace MarketData.Services tasks.Add("ECHO",TaskEcho); GlobalConfig.Instance.Configuration = configuration; // This call sets up configuration stuff so it needs to be first. + String pathSourceFile = "/home/pi/ARM64/MarketData/MarketData/Models/CM20191031.TXT"; + String pathDstFile = "/home/pi/Boneyard/MG20180131.TXT"; + MomentumBacktest backtest = new MomentumBacktest(); + backtest.EditPosition("PSO", DateTime.Parse("4/30/2025"), 1.00, pathDstFile); + + // CMMomentumBacktest backtest = new CMMomentumBacktest(); + // backtest.EditPosition("IEFA", DateTime.Parse("4/30/2025"), 1.00, pathDstFile); + // MGSessionParams sessionParams = MGSessionManager.RestoreSession(pathSourceFile); + // MGSessionManager.SaveSession(sessionParams, pathDstFile); + + if (args.Length < 1 || String.IsNullOrEmpty(args[0])) { - DisplayUsage(); + DisplayUsage(); return; } diff --git a/MarketData/MarketDataLib/Generator/CMMomentum/CMBacktest.cs b/MarketData/MarketDataLib/Generator/CMMomentum/CMBacktest.cs index 9e7d62f..be94fb4 100755 --- a/MarketData/MarketDataLib/Generator/CMMomentum/CMBacktest.cs +++ b/MarketData/MarketDataLib/Generator/CMMomentum/CMBacktest.cs @@ -743,9 +743,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(); @@ -758,16 +759,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; @@ -778,7 +778,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/MarketData/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs b/MarketData/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs index 472188c..2db3515 100755 --- a/MarketData/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs +++ b/MarketData/MarketDataLib/Generator/CMMomentum/CMSessionManager.cs @@ -29,11 +29,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/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs b/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendModel.cs similarity index 100% rename from MarketData/MarketDataLib/Generator/CMTrend/CMTTrendModel..cs rename to MarketData/MarketDataLib/Generator/CMTrend/CMTTrendModel.cs diff --git a/MarketData/MarketDataLib/Generator/Momentum/Backtest.cs b/MarketData/MarketDataLib/Generator/Momentum/Backtest.cs index c631273..acd09ea 100755 --- a/MarketData/MarketDataLib/Generator/Momentum/Backtest.cs +++ b/MarketData/MarketDataLib/Generator/Momentum/Backtest.cs @@ -680,40 +680,42 @@ namespace MarketData.Generator.Momentum } public void SaveSession() { - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Saving session to '{0}'",PathSessionFileName)); - MGSessionParams sessionParams=new MGSessionParams(); - MGSessionManager sessionManager=new MGSessionManager(); - sessionParams.LastUpdated=Today(); - sessionParams.TradeDate=TradeDate; - sessionParams.StartDate=StartDate; - sessionParams.AnalysisDate=AnalysisDate; - sessionParams.Configuration=Configuration; - sessionParams.ActivePositions=ActivePositions; - sessionParams.AllPositions=AllPositions; - sessionParams.Cycle=Cycle; - sessionParams.CashBalance=CashBalance; - sessionParams.NonTradeableCash=NonTradeableCash; - sessionManager.SaveSession(sessionParams,PathSessionFileName); + DateGenerator dateGenerator = new DateGenerator(); + MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", PathSessionFileName)); + MGSessionParams sessionParams = new MGSessionParams(); + if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today()); + sessionParams.LastUpdated = Today(); + sessionParams.TradeDate = TradeDate; + sessionParams.StartDate = StartDate; + sessionParams.AnalysisDate = AnalysisDate; + sessionParams.Configuration = Configuration; + sessionParams.ActivePositions = ActivePositions; + sessionParams.AllPositions = AllPositions; + sessionParams.Cycle = Cycle; + sessionParams.CashBalance = CashBalance; + sessionParams.NonTradeableCash = NonTradeableCash; + MGSessionManager.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)); - MGSessionParams sessionParams=new MGSessionParams(); - MGSessionManager sessionManager=new MGSessionManager(); - sessionParams.LastUpdated=Today(); - sessionParams.TradeDate=TradeDate; - sessionParams.StartDate=StartDate; - sessionParams.AnalysisDate=AnalysisDate; - sessionParams.Configuration=Configuration; - sessionParams.ActivePositions=ActivePositions; - sessionParams.AllPositions=AllPositions; - sessionParams.Cycle=Cycle; - sessionParams.CashBalance=CashBalance; - sessionParams.NonTradeableCash=NonTradeableCash; - return sessionManager.SaveSession(sessionParams,backupFileName); + DateGenerator dateGenerator = new DateGenerator(); + String[] parts = PathSessionFileName.Split('.'); + String backupFileName = parts[0] + "_" + Utility.DateTimeToStringYYYYMMDDMMSSTT(DateTime.Now) + ".bak"; + MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Saving session to '{0}'", backupFileName)); + MGSessionParams sessionParams = new MGSessionParams(); + if (Utility.IsEpoch(AnalysisDate)) AnalysisDate = dateGenerator.GetPrevBusinessDay(Today()); + sessionParams.LastUpdated = Today(); + sessionParams.TradeDate = TradeDate; + sessionParams.StartDate = StartDate; + sessionParams.AnalysisDate = AnalysisDate; + sessionParams.Configuration = Configuration; + sessionParams.ActivePositions = ActivePositions; + sessionParams.AllPositions = AllPositions; + sessionParams.Cycle = Cycle; + sessionParams.CashBalance = CashBalance; + sessionParams.NonTradeableCash = NonTradeableCash; + return MGSessionManager.SaveSession(sessionParams,backupFileName); } } } diff --git a/MarketData/MarketDataLib/Generator/Momentum/MGSessionManager.cs b/MarketData/MarketDataLib/Generator/Momentum/MGSessionManager.cs index 1a01b6d..986a51a 100755 --- a/MarketData/MarketDataLib/Generator/Momentum/MGSessionManager.cs +++ b/MarketData/MarketDataLib/Generator/Momentum/MGSessionManager.cs @@ -5,7 +5,7 @@ namespace MarketData.Generator.Momentum // ***************************************************************************** public class MGSessionManager { - public bool SaveSession(MGSessionParams sessionParams,String pathSessionFile) + public static bool SaveSession(MGSessionParams sessionParams,String pathSessionFile) { try {