Send notif on good backtest
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Common;
|
||||
using Managing.Domain.Backtests;
|
||||
using Managing.Domain.Statistics;
|
||||
using Managing.Domain.Trades;
|
||||
using Managing.Domain.Users;
|
||||
@@ -77,14 +78,14 @@ public class MessengerService : IMessengerService
|
||||
{
|
||||
var direction = position.OriginDirection.ToString();
|
||||
var status = position.Status.ToString();
|
||||
|
||||
|
||||
var message = $"🎯 Position {status}\n" +
|
||||
$"Symbol: {position.Ticker}\n" +
|
||||
$"Direction: {direction}\n" +
|
||||
$"Account: {position.AccountName}\n" +
|
||||
$"Identifier: {position.Identifier}\n" +
|
||||
$"Initiator: {position.Initiator}\n" +
|
||||
$"Date: {position.Date:yyyy-MM-dd HH:mm:ss}";
|
||||
$"Symbol: {position.Ticker}\n" +
|
||||
$"Direction: {direction}\n" +
|
||||
$"Account: {position.AccountName}\n" +
|
||||
$"Identifier: {position.Identifier}\n" +
|
||||
$"Initiator: {position.Initiator}\n" +
|
||||
$"Date: {position.Date:yyyy-MM-dd HH:mm:ss}";
|
||||
|
||||
if (position.Open != null)
|
||||
{
|
||||
@@ -155,4 +156,111 @@ public class MessengerService : IMessengerService
|
||||
{
|
||||
await _discordService.SendFundingRateUpdate(oldRate, newRate);
|
||||
}
|
||||
|
||||
public async Task SendBacktestNotification(Backtest backtest)
|
||||
{
|
||||
try
|
||||
{
|
||||
var configMessage = BuildBacktestConfigMessage(backtest);
|
||||
var resultsMessage = BuildBacktestResultsMessage(backtest);
|
||||
|
||||
// Send configuration message first
|
||||
await _webhookService.SendMessage(configMessage, "2775292276");
|
||||
|
||||
// Send results message second
|
||||
await _webhookService.SendMessage(resultsMessage, "2775292276");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Failed to send backtest notification: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private string BuildBacktestConfigMessage(Backtest backtest)
|
||||
{
|
||||
var config = backtest.Config;
|
||||
|
||||
// Get indicators list as comma-separated string
|
||||
var indicators = config.Scenario?.Indicators != null && config.Scenario.Indicators.Any()
|
||||
? string.Join(", ", config.Scenario.Indicators.Select(i => i.Type.ToString()))
|
||||
: "N/A";
|
||||
|
||||
// MoneyManagement summary
|
||||
var mmSl = config.MoneyManagement != null ? (config.MoneyManagement.StopLoss * 100).ToString("F2") : "N/A";
|
||||
var mmTp = config.MoneyManagement != null ? (config.MoneyManagement.TakeProfit * 100).ToString("F2") : "N/A";
|
||||
var mmLev = config.MoneyManagement != null ? config.MoneyManagement.Leverage.ToString("F2") : "N/A";
|
||||
|
||||
return $"🚀 Excellent Backtest Results! 🚀\n\n" +
|
||||
$"🔹 {config.Ticker} | ⏱️ {config.Timeframe}\n" +
|
||||
$"💰 {config.BotTradingBalance:C}\n" +
|
||||
$"🛡️ SL: {mmSl}% | 🎯 TP: {mmTp}% | 📈 Lev: {mmLev}x\n" +
|
||||
$"🧩 {indicators}\n" +
|
||||
$"📅 {backtest.StartDate:yyyy-MM-dd} to {backtest.EndDate:yyyy-MM-dd}";
|
||||
}
|
||||
|
||||
private string BuildBacktestResultsMessage(Backtest backtest)
|
||||
{
|
||||
var config = backtest.Config;
|
||||
var score = backtest.Score;
|
||||
var winRate = backtest.WinRate;
|
||||
var tradeCount = backtest.Positions?.Count ?? 0;
|
||||
var finalPnl = backtest.FinalPnl;
|
||||
var growthPercentage = backtest.GrowthPercentage;
|
||||
var maxDrawdown = backtest.Statistics?.MaxDrawdownPc ?? 0;
|
||||
var sharpeRatio = backtest.Statistics?.SharpeRatio ?? 0;
|
||||
|
||||
return $"📈 Performance Metrics:\n" +
|
||||
$"⭐ Score: {score:F1}/100 | 🏆 Win Rate: {winRate:F1}%\n" +
|
||||
$"📊 Trades: {tradeCount} | 💰 PnL: ${finalPnl:F2}\n" +
|
||||
$"📈 Growth: {growthPercentage:F1}% | 📉 DD: {maxDrawdown:F1}%\n" +
|
||||
$"📊 Sharpe: {sharpeRatio:F2}\n\n" +
|
||||
$"🆔 ID: {backtest.Id}";
|
||||
}
|
||||
|
||||
private string BuildBacktestMessage(Backtest backtest)
|
||||
{
|
||||
var config = backtest.Config;
|
||||
var score = backtest.Score;
|
||||
var winRate = backtest.WinRate;
|
||||
var tradeCount = backtest.Positions?.Count ?? 0;
|
||||
var finalPnl = backtest.FinalPnl;
|
||||
var growthPercentage = backtest.GrowthPercentage;
|
||||
var maxDrawdown = backtest.Statistics?.MaxDrawdownPc ?? 0;
|
||||
var sharpeRatio = backtest.Statistics?.SharpeRatio ?? 0;
|
||||
|
||||
// Get indicators list as comma-separated string
|
||||
var indicators = config.Scenario?.Indicators != null && config.Scenario.Indicators.Any()
|
||||
? string.Join(", ", config.Scenario.Indicators.Select(i => i.Name ?? i.Type.ToString()))
|
||||
: "N/A";
|
||||
|
||||
// MoneyManagement summary
|
||||
var mmSl = config.MoneyManagement != null ? config.MoneyManagement.StopLoss.ToString("F2") : "N/A";
|
||||
var mmTp = config.MoneyManagement != null ? config.MoneyManagement.TakeProfit.ToString("F2") : "N/A";
|
||||
var mmLev = config.MoneyManagement != null ? config.MoneyManagement.Leverage.ToString("F2") : "N/A";
|
||||
|
||||
var message = $"🚀 Excellent Backtest Results! 🚀\n\n" +
|
||||
$"📊 Configuration:\n" +
|
||||
$"🔹 Symbol: {config.Ticker}\n" +
|
||||
$"⏱️ Timeframe: {config.Timeframe}\n" +
|
||||
$"👤 Account: {config.AccountName}\n" +
|
||||
$"💼 Money Management: 🛡️ SL: {mmSl}% | 🎯 TP: {mmTp}% | 📈 Lev: {mmLev}x\n" +
|
||||
$"💰 Balance: {config.BotTradingBalance}\n" +
|
||||
$"🧩 Indicators: {indicators}\n" +
|
||||
$"📅 Period: {backtest.StartDate:yyyy-MM-dd} to {backtest.EndDate:yyyy-MM-dd}\n" +
|
||||
$"⏳ Cooldown: {config.CooldownPeriod} | 🔥 Max Loss Streak: {config.MaxLossStreak}\n" +
|
||||
$"🔄 Flip Position: {(config.FlipPosition ? "Yes" : "No")} | 🔒 Flip Only When In Profit: {(config.FlipOnlyWhenInProfit ? "Yes" : "No")}\n" +
|
||||
$"👀 Watching Only: {(config.IsForWatchingOnly ? "Yes" : "No")} | 🧪 Backtest Mode: {(config.IsForBacktest ? "Yes" : "No")}\n" +
|
||||
$"⏰ Max Position Time (hrs): {(config.MaxPositionTimeHours?.ToString() ?? "N/A")} | 🏁 Close Early When Profitable: {(config.CloseEarlyWhenProfitable ? "Yes" : "No")}\n" +
|
||||
$"📈 Performance Metrics:\n" +
|
||||
$"⭐ Score: {score:F1}/100\n" +
|
||||
$"🏆 Win Rate: {winRate:F1}%\n" +
|
||||
$"📊 Total Trades: {tradeCount}\n" +
|
||||
$"💰 Final PnL: ${finalPnl:F2}\n" +
|
||||
$"📈 Growth: {growthPercentage:F1}%\n" +
|
||||
$"📉 Max Drawdown: {maxDrawdown:F1}%\n" +
|
||||
$"📊 Sharpe Ratio: {sharpeRatio:F2}\n\n" +
|
||||
$"🆔 Backtest ID: {backtest.Id}";
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user