From e737b4f2ceb4513be34cfb6cb7390e0781ad3849 Mon Sep 17 00:00:00 2001 From: cryptooda Date: Sat, 7 Jun 2025 23:56:17 +0700 Subject: [PATCH] Enhance TradingBot logic to handle multiple open orders: added checks for order count and elapsed time before canceling unfilled positions. --- .DS_Store | Bin 10244 -> 10244 bytes src/.DS_Store | Bin 14340 -> 14340 bytes src/Managing.Application/Bots/TradingBot.cs | 40 +++++++++++++++++++- src/Managing.Nswag/.DS_Store | Bin 6148 -> 6148 bytes src/Managing.Web3Proxy/.DS_Store | Bin 6148 -> 6148 bytes 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 61f05361312239c003e502c1e1cb65729ac465c4..de40e0009a94d28f1e852d6a7490a49011ca85f9 100644 GIT binary patch delta 161 zcmZn(XbG6$FDk^qz`)4BAi%&-!cgp)lb@WFlb^J)a2or>2Hwr=94s7+LYtigIGL0M z844H@8Il>Yfn+*EDuXUV4nsbeug8$ZPz+?}O;!_-pX@D^F!{ES1>=s%BEp5-64lj4 zCYCx1W(G!+Ckjh5c1>O@EYH}z`K)jPBU2N@W_{5cToW5qH?u4JV&Mcjg@HlY0WAEB F2>@b~DC7VD delta 184 zcmZn(XbG6$FDlHyz`)4BAi%&-#E{CM$Kb(`&rrOva2or>2Hwr=94s8tAQjvUjts>N z1q_+Usu)TpTL{T-<`-aNnj9{apvu7z3^byMp$w=j8OSR3%*jtq%E?ax8UQpOXaoZz z-{dty&Wt-Je-J9Acuo_-G4CHc+re~;sf5z>>Ml-_1X*!47?0_3@Hrx49N`H45iVsGBChQ0rDU^Q-OLj8A`zFlYwL&LmJ2gG@a|w zbg}~N%w$MW09u%cs+3U{S?OjT1!j)P)~X_=E4Sfi@-raVA4Cm`r9U xMlL{2Q7)|~lV81z4X9Lq_c7ty$o8wj3nE_-IQ-uHk delta 79 zcmV-V0I>graD;G>PXRiSP;3YQZb@u!V`6Nv(KZK>;0?0}2m}}bC$p*`0|=AJCKR(3 lDf= 3) + { + var currentTime = Config.IsForBacktest ? OptimizedCandles.Last().Date : DateTime.UtcNow; + var timeSinceRequest = currentTime - positionForSignal.Open.Date; + var waitTimeMinutes = 10; + + if (timeSinceRequest.TotalMinutes >= waitTimeMinutes) + { + await LogWarning( + $"Too many open orders ({orders.Count()}) for unfilled position and {waitTimeMinutes} minutes have passed. Canceling all orders and marking position as canceled."); + + try + { + await ExchangeService.CancelOrder(Account, Config.Ticker); + await LogInformation($"Successfully canceled all orders for {Config.Ticker}"); + } + catch (Exception ex) + { + await LogWarning($"Failed to cancel orders: {ex.Message}"); + } + + await SetPositionStatus(signal.Identifier, PositionStatus.Canceled); + SetSignalStatus(signal.Identifier, SignalStatus.Expired); + return; + } + else + { + var remainingMinutes = waitTimeMinutes - timeSinceRequest.TotalMinutes; + await LogInformation( + $"Position has {orders.Count()} open orders but only {timeSinceRequest.TotalMinutes:F1} minutes have passed. Waiting {remainingMinutes:F1} more minutes before canceling."); + } + } + else + { + await LogInformation( + $"Cannot update Position. Position is still waiting for opening. There is {orders.Count()} open orders."); + } } else { diff --git a/src/Managing.Nswag/.DS_Store b/src/Managing.Nswag/.DS_Store index cebf5ccac92432f74013c71cbb623f379ce0c216..635e842ecc594cf74e5f93d8eacc661b265ab7f4 100644 GIT binary patch delta 208 zcmZoMXfc=|#>B!ku~2NHo+2aX#(>?7iytsEF>+4kVcNi9WMZkKU}j)6`3TdddOikU zhD3%uAWmn<1k&jYjtm7rmL5Y1L$PO0esWSyei8!%g8%~q<4+*1_a6*^ECvQ)9C||- zDuHICG8AJog()4`l+DG=LQI?4Iruq%?%jNm`8)Guei26wMg|5ZkPVw7MAk3^00TZX AL;wH) delta 80 zcmZoMXfc=|#>B)qu~2NHo+2ar#(>?7jO>$nST=ANn_B897#kT+KEkqT^AA>jri~3v jOq;Hw$unXP(S2;>f`O1dI#}ESn=l)-VGAUq}Mk z!G$58A(bdGL`@U delta 40 wcmZoMXfc@J&&a(oU^g=(_hcRx{mIEJE}P%8_%Tk-XY1Hlwux~wJI7ys00oK-TmS$7