Add startuptime and update creationDate

This commit is contained in:
2025-07-09 18:30:23 +07:00
parent 387948a107
commit 0c1184a22d
11 changed files with 85 additions and 38 deletions

View File

@@ -114,7 +114,12 @@ public class TradingBot : Bot, ITradingBot
CancelAllOrders().GetAwaiter().GetResult();
// Send startup message only for fresh starts (not reboots)
var isReboot = Signals.Any() || Positions.Any();
// Consider it a reboot if the bot was created more than 5 minutes ago
var timeSinceCreation = DateTime.UtcNow - CreateDate;
var isReboot = timeSinceCreation.TotalMinutes > 5;
StartupTime = DateTime.UtcNow;
if (!isReboot)
{
try
@@ -361,38 +366,37 @@ public class TradingBot : Bot, ITradingBot
// TODO : remove this when Synth is stable
// signal.Status = SignalStatus.Expired;
signalText += $"\n\n🚫 *Synth Signal Filter*\n" +
$"Signal `{signal.Identifier}` blocked by Synth risk assessment\n\n" +
$"📊 *Risk Analysis Details*\n" +
$"SL Probability: `{signalValidationResult.StopLossProbability:P2}`\n" +
$"TP Probability: `{signalValidationResult.TakeProfitProbability:P2}`\n" +
$"TP/SL Ratio: `{signalValidationResult.TpSlRatio:F2}x`\n" +
$"Win/Loss: `{signalValidationResult.WinLossRatio:F2}:1`\n" +
$"Expected Value: `${signalValidationResult.ExpectedMonetaryValue:F2}`\n" +
$"Expected Utility: `{signalValidationResult.ExpectedUtility:F4}`\n" +
$"Kelly Criterion: `{signalValidationResult.KellyFraction:P2}`\n" +
$"Kelly Capped: `{signalValidationResult.KellyCappedFraction:P2}`\n" +
$"Risk Assessment: `{signalValidationResult.GetUtilityRiskAssessment()}`\n" +
$"Time Horizon: `{signalValidationResult.TimeHorizonSeconds / 3600:F1}h`\n\n" +
$"📋 *Context*\n`{signalValidationResult.ValidationContext}`";
$"Signal `{signal.Identifier}` blocked by Synth risk assessment\n\n" +
$"📊 *Risk Analysis Details*\n" +
$"SL Probability: `{signalValidationResult.StopLossProbability:P2}`\n" +
$"TP Probability: `{signalValidationResult.TakeProfitProbability:P2}`\n" +
$"TP/SL Ratio: `{signalValidationResult.TpSlRatio:F2}x`\n" +
$"Win/Loss: `{signalValidationResult.WinLossRatio:F2}:1`\n" +
$"Expected Value: `${signalValidationResult.ExpectedMonetaryValue:F2}`\n" +
$"Expected Utility: `{signalValidationResult.ExpectedUtility:F4}`\n" +
$"Kelly Criterion: `{signalValidationResult.KellyFraction:P2}`\n" +
$"Kelly Capped: `{signalValidationResult.KellyCappedFraction:P2}`\n" +
$"Risk Assessment: `{signalValidationResult.GetUtilityRiskAssessment()}`\n" +
$"Time Horizon: `{signalValidationResult.TimeHorizonSeconds / 3600:F1}h`\n\n" +
$"📋 *Context*\n`{signalValidationResult.ValidationContext}`";
}
else
{
signal.SetConfidence(signalValidationResult.Confidence);
signalText += $"\n\n✅ *Synth Risk Assessment Passed*\n" +
$"Confidence: `{signalValidationResult.Confidence}`\n\n" +
$"📊 *Risk Analysis Details*\n" +
$"SL Probability: `{signalValidationResult.StopLossProbability:P2}`\n" +
$"TP Probability: `{signalValidationResult.TakeProfitProbability:P2}`\n" +
$"TP/SL Ratio: `{signalValidationResult.TpSlRatio:F2}x`\n" +
$"Win/Loss: `{signalValidationResult.WinLossRatio:F2}:1`\n" +
$"Expected Value: `${signalValidationResult.ExpectedMonetaryValue:F2}`\n" +
$"Expected Utility: `{signalValidationResult.ExpectedUtility:F4}`\n" +
$"Kelly Criterion: `{signalValidationResult.KellyFraction:P2}`\n" +
$"Kelly Capped: `{signalValidationResult.KellyCappedFraction:P2}`\n" +
$"Risk Assessment: `{signalValidationResult.GetUtilityRiskAssessment()}`\n" +
$"Time Horizon: `{signalValidationResult.TimeHorizonSeconds / 3600:F1}h`\n\n" +
$"📋 *Context*\n`{signalValidationResult.ValidationContext}`";
$"Confidence: `{signalValidationResult.Confidence}`\n\n" +
$"📊 *Risk Analysis Details*\n" +
$"SL Probability: `{signalValidationResult.StopLossProbability:P2}`\n" +
$"TP Probability: `{signalValidationResult.TakeProfitProbability:P2}`\n" +
$"TP/SL Ratio: `{signalValidationResult.TpSlRatio:F2}x`\n" +
$"Win/Loss: `{signalValidationResult.WinLossRatio:F2}:1`\n" +
$"Expected Value: `${signalValidationResult.ExpectedMonetaryValue:F2}`\n" +
$"Expected Utility: `{signalValidationResult.ExpectedUtility:F4}`\n" +
$"Kelly Criterion: `{signalValidationResult.KellyFraction:P2}`\n" +
$"Kelly Capped: `{signalValidationResult.KellyCappedFraction:P2}`\n" +
$"Risk Assessment: `{signalValidationResult.GetUtilityRiskAssessment()}`\n" +
$"Time Horizon: `{signalValidationResult.TimeHorizonSeconds / 3600:F1}h`\n\n" +
$"📋 *Context*\n`{signalValidationResult.ValidationContext}`";
}
}
@@ -1429,7 +1433,8 @@ public class TradingBot : Bot, ITradingBot
Signals = Signals,
Positions = Positions,
WalletBalances = WalletBalances,
StartupTime = StartupTime
StartupTime = StartupTime,
CreateDate = CreateDate
};
BotService.SaveOrUpdateBotBackup(User, Identifier, Status, JsonConvert.SerializeObject(data));
}
@@ -1449,6 +1454,7 @@ public class TradingBot : Bot, ITradingBot
Positions = data.Positions ?? new List<Position>();
WalletBalances = data.WalletBalances ?? new Dictionary<DateTime, decimal>();
PreloadSince = data.StartupTime;
CreateDate = data.CreateDate;
Identifier = backup.Identifier;
User = backup.User;
Status = backup.LastStatus;
@@ -1718,7 +1724,6 @@ public class TradingBot : Bot, ITradingBot
if (allowNameChange && !string.IsNullOrEmpty(newConfig.Name))
{
Name = newConfig.Name;
Identifier = newConfig.Name;
}
// If account changed, reload it
@@ -1893,4 +1898,9 @@ public class TradingBotBackup
/// Runtime state: When the bot was started
/// </summary>
public DateTime StartupTime { get; set; }
/// <summary>
/// Runtime state: When the bot was created
/// </summary>
public DateTime CreateDate { get; set; }
}