get awaiter for openposition command

This commit is contained in:
2025-06-09 21:13:25 +07:00
parent e0f60fcb59
commit 3bcf3a2775

View File

@@ -344,7 +344,8 @@ public class TradingBot : Bot, ITradingBot
var signalForPosition = Signals.FirstOrDefault(s => s.Identifier == position.SignalIdentifier); var signalForPosition = Signals.FirstOrDefault(s => s.Identifier == position.SignalIdentifier);
if (signalForPosition == null) if (signalForPosition == null)
{ {
await LogInformation($"🔍 **Signal Recovery**\nSignal not found for position `{position.Identifier}`\nRecreating signal from position data..."); await LogInformation(
$"🔍 **Signal Recovery**\nSignal not found for position `{position.Identifier}`\nRecreating signal from position data...");
// Recreate the signal based on position information // Recreate the signal based on position information
signalForPosition = await RecreateSignalFromPosition(position); signalForPosition = await RecreateSignalFromPosition(position);
@@ -454,7 +455,8 @@ public class TradingBot : Bot, ITradingBot
try try
{ {
await ExchangeService.CancelOrder(Account, Config.Ticker); await ExchangeService.CancelOrder(Account, Config.Ticker);
await LogInformation($"✅ **Orders Canceled**\nSuccessfully canceled all orders for: `{Config.Ticker}`"); await LogInformation(
$"✅ **Orders Canceled**\nSuccessfully canceled all orders for: `{Config.Ticker}`");
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -544,7 +546,8 @@ public class TradingBot : Bot, ITradingBot
{ {
if (positionForSignal.StopLoss.Price >= lastCandle.Low) if (positionForSignal.StopLoss.Price >= lastCandle.Low)
{ {
await LogInformation($"🛑 **Stop Loss Hit**\nClosing LONG position\nPrice: `${positionForSignal.StopLoss.Price}`"); await LogInformation(
$"🛑 **Stop Loss Hit**\nClosing LONG position\nPrice: `${positionForSignal.StopLoss.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.StopLoss, await CloseTrade(signal, positionForSignal, positionForSignal.StopLoss,
positionForSignal.StopLoss.Price, true); positionForSignal.StopLoss.Price, true);
positionForSignal.StopLoss.SetStatus(TradeStatus.Filled); positionForSignal.StopLoss.SetStatus(TradeStatus.Filled);
@@ -552,14 +555,16 @@ public class TradingBot : Bot, ITradingBot
else if (positionForSignal.TakeProfit1.Price <= lastCandle.High && else if (positionForSignal.TakeProfit1.Price <= lastCandle.High &&
positionForSignal.TakeProfit1.Status != TradeStatus.Filled) positionForSignal.TakeProfit1.Status != TradeStatus.Filled)
{ {
await LogInformation($"🎯 **Take Profit 1 Hit**\nClosing LONG position\nPrice: `${positionForSignal.TakeProfit1.Price}`"); await LogInformation(
$"🎯 **Take Profit 1 Hit**\nClosing LONG position\nPrice: `${positionForSignal.TakeProfit1.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit1, await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit1,
positionForSignal.TakeProfit1.Price, positionForSignal.TakeProfit2 == null); positionForSignal.TakeProfit1.Price, positionForSignal.TakeProfit2 == null);
positionForSignal.TakeProfit1.SetStatus(TradeStatus.Filled); positionForSignal.TakeProfit1.SetStatus(TradeStatus.Filled);
} }
else if (positionForSignal.TakeProfit2?.Price <= lastCandle.High) else if (positionForSignal.TakeProfit2?.Price <= lastCandle.High)
{ {
await LogInformation($"🎯 **Take Profit 2 Hit**\nClosing LONG position\nPrice: `${positionForSignal.TakeProfit2.Price}`"); await LogInformation(
$"🎯 **Take Profit 2 Hit**\nClosing LONG position\nPrice: `${positionForSignal.TakeProfit2.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit2, await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit2,
positionForSignal.TakeProfit2.Price, true); positionForSignal.TakeProfit2.Price, true);
positionForSignal.TakeProfit2.SetStatus(TradeStatus.Filled); positionForSignal.TakeProfit2.SetStatus(TradeStatus.Filled);
@@ -569,7 +574,8 @@ public class TradingBot : Bot, ITradingBot
{ {
if (positionForSignal.StopLoss.Price <= lastCandle.High) if (positionForSignal.StopLoss.Price <= lastCandle.High)
{ {
await LogInformation($"🛑 **Stop Loss Hit**\nClosing SHORT position\nPrice: `${positionForSignal.StopLoss.Price}`"); await LogInformation(
$"🛑 **Stop Loss Hit**\nClosing SHORT position\nPrice: `${positionForSignal.StopLoss.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.StopLoss, await CloseTrade(signal, positionForSignal, positionForSignal.StopLoss,
positionForSignal.StopLoss.Price, true); positionForSignal.StopLoss.Price, true);
positionForSignal.StopLoss.SetStatus(TradeStatus.Filled); positionForSignal.StopLoss.SetStatus(TradeStatus.Filled);
@@ -577,14 +583,16 @@ public class TradingBot : Bot, ITradingBot
else if (positionForSignal.TakeProfit1.Price >= lastCandle.Low && else if (positionForSignal.TakeProfit1.Price >= lastCandle.Low &&
positionForSignal.TakeProfit1.Status != TradeStatus.Filled) positionForSignal.TakeProfit1.Status != TradeStatus.Filled)
{ {
await LogInformation($"🎯 **Take Profit 1 Hit**\nClosing SHORT position\nPrice: `${positionForSignal.TakeProfit1.Price}`"); await LogInformation(
$"🎯 **Take Profit 1 Hit**\nClosing SHORT position\nPrice: `${positionForSignal.TakeProfit1.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit1, await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit1,
positionForSignal.TakeProfit1.Price, positionForSignal.TakeProfit2 == null); positionForSignal.TakeProfit1.Price, positionForSignal.TakeProfit2 == null);
positionForSignal.TakeProfit1.SetStatus(TradeStatus.Filled); positionForSignal.TakeProfit1.SetStatus(TradeStatus.Filled);
} }
else if (positionForSignal.TakeProfit2?.Price >= lastCandle.Low) else if (positionForSignal.TakeProfit2?.Price >= lastCandle.Low)
{ {
await LogInformation($"🎯 **Take Profit 2 Hit**\nClosing SHORT position\nPrice: `${positionForSignal.TakeProfit2.Price}`"); await LogInformation(
$"🎯 **Take Profit 2 Hit**\nClosing SHORT position\nPrice: `${positionForSignal.TakeProfit2.Price}`");
await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit2, await CloseTrade(signal, positionForSignal, positionForSignal.TakeProfit2,
positionForSignal.TakeProfit2.Price, true); positionForSignal.TakeProfit2.Price, true);
positionForSignal.TakeProfit2.SetStatus(TradeStatus.Filled); positionForSignal.TakeProfit2.SetStatus(TradeStatus.Filled);
@@ -706,7 +714,7 @@ public class TradingBot : Bot, ITradingBot
signalIdentifier: signal.Identifier); signalIdentifier: signal.Identifier);
var position = (new OpenPositionCommandHandler(ExchangeService, AccountService, TradingService) var position = (new OpenPositionCommandHandler(ExchangeService, AccountService, TradingService)
.Handle(command)).Result; .Handle(command)).GetAwaiter().GetResult();
if (position != null) if (position != null)
{ {
@@ -798,7 +806,8 @@ public class TradingBot : Bot, ITradingBot
var lastPosition = recentPositions.First(); var lastPosition = recentPositions.First();
if (lastPosition.OriginDirection == signal.Direction) if (lastPosition.OriginDirection == signal.Direction)
{ {
await LogWarning($"🔥 **Loss Streak Limit**\nCannot open position\nMax loss streak: `{Config.MaxLossStreak}` reached\n📉 Last `{recentPositions.Count}` trades were losses\n🎯 Last position: `{lastPosition.OriginDirection}`\nWaiting for opposite direction signal"); await LogWarning(
$"🔥 **Loss Streak Limit**\nCannot open position\nMax loss streak: `{Config.MaxLossStreak}` reached\n📉 Last `{recentPositions.Count}` trades were losses\n🎯 Last position: `{lastPosition.OriginDirection}`\nWaiting for opposite direction signal");
return false; return false;
} }
@@ -1011,7 +1020,8 @@ public class TradingBot : Bot, ITradingBot
// Subtract fees // Subtract fees
Config.BotTradingBalance -= GetPositionFees(position); Config.BotTradingBalance -= GetPositionFees(position);
Logger.LogInformation($"💰 **Balance Updated**\nNew bot trading balance: `${Config.BotTradingBalance:F2}`"); Logger.LogInformation(
$"💰 **Balance Updated**\nNew bot trading balance: `${Config.BotTradingBalance:F2}`");
} }
} }
else else
@@ -1071,7 +1081,8 @@ public class TradingBot : Bot, ITradingBot
if (!position.Status.Equals(positionStatus)) if (!position.Status.Equals(positionStatus))
{ {
Positions.First(p => p.SignalIdentifier == signalIdentifier).Status = positionStatus; Positions.First(p => p.SignalIdentifier == signalIdentifier).Status = positionStatus;
await LogInformation($"📊 **Position Status Change**\nPosition: `{signalIdentifier}`\nStatus: `{position.Status}` → `{positionStatus}`"); await LogInformation(
$"📊 **Position Status Change**\nPosition: `{signalIdentifier}`\nStatus: `{position.Status}` → `{positionStatus}`");
} }
SetSignalStatus(signalIdentifier, SetSignalStatus(signalIdentifier,
@@ -1162,7 +1173,8 @@ public class TradingBot : Bot, ITradingBot
public async Task ToggleIsForWatchOnly() public async Task ToggleIsForWatchOnly()
{ {
Config.IsForWatchingOnly = !Config.IsForWatchingOnly; Config.IsForWatchingOnly = !Config.IsForWatchingOnly;
await LogInformation($"🔄 **Watch Mode Toggle**\nBot: `{Name}`\nWatch Only: `{(Config.IsForWatchingOnly ? "ON" : "OFF")}`"); await LogInformation(
$"🔄 **Watch Mode Toggle**\nBot: `{Name}`\nWatch Only: `{(Config.IsForWatchingOnly ? "ON" : "OFF")}`");
} }
private async Task LogInformation(string message) private async Task LogInformation(string message)
@@ -1297,7 +1309,8 @@ public class TradingBot : Bot, ITradingBot
throw new Exception("Failed to open position"); throw new Exception("Failed to open position");
} }
Logger.LogInformation($"👤 **Manual Position Opened**\nPosition: `{position.Identifier}`\nSignal: `{signal.Identifier}`"); Logger.LogInformation(
$"👤 **Manual Position Opened**\nPosition: `{position.Identifier}`\nSignal: `{signal.Identifier}`");
return position; return position;
} }
@@ -1377,7 +1390,9 @@ public class TradingBot : Bot, ITradingBot
$"📈 Flip Only in Profit: {(Config.FlipOnlyWhenInProfit ? "" : "")}\n" + $"📈 Flip Only in Profit: {(Config.FlipOnlyWhenInProfit ? "" : "")}\n" +
$"⏳ Cooldown: {Config.CooldownPeriod} candles\n" + $"⏳ Cooldown: {Config.CooldownPeriod} candles\n" +
$"📉 Max Loss Streak: {Config.MaxLossStreak}" + $"📉 Max Loss Streak: {Config.MaxLossStreak}" +
(allowNameChange && newConfig.Name != Config.Name ? $"\n🏷 Name: {Config.Name} → {newConfig.Name}" : "")); (allowNameChange && newConfig.Name != Config.Name
? $"\n🏷 Name: {Config.Name} → {newConfig.Name}"
: ""));
// Update the configuration // Update the configuration
Config = newConfig; Config = newConfig;