From 8a85cc7248f15f9b965bd0c9d86ed60765b293bb Mon Sep 17 00:00:00 2001 From: yenru0 Date: Sat, 9 May 2026 17:13:55 +0900 Subject: [PATCH] x22 --- bot_x2.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/bot_x2.py b/bot_x2.py index 823040b..59a4b4d 100644 --- a/bot_x2.py +++ b/bot_x2.py @@ -271,20 +271,22 @@ team_name = "HanyangFloorFunction" class OrderRateLimiter: def __init__(self, max_per_second=500): self.max_per_second = max_per_second - self.timestamps = deque(maxlen=max_per_second + 100) + self.tokens = max_per_second + self.last_refill = time.time() - def can_send(self): + def attempt_send(self): now = time.time() - self.timestamps.append(now) - recent = [t for t in self.timestamps if now - t < 1.0] - if len(recent) >= self.max_per_second: - return False - return True + elapsed = now - self.last_refill + if elapsed >= 1.0: + self.tokens = self.max_per_second + self.last_refill = now + if self.tokens > 0: + self.tokens -= 1 + return True + return False def reset_if_needed(self): - now = time.time() - while self.timestamps and now - self.timestamps[0] >= 1.0: - self.timestamps.popleft() + pass def main(): @@ -434,8 +436,7 @@ def main(): return if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema): return - rate_limiter.reset_if_needed() - if not rate_limiter.can_send(): + if not rate_limiter.attempt_send(): return bond_ask = state.ask_prices["BOND"] @@ -511,8 +512,7 @@ def main(): return if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema): return - rate_limiter.reset_if_needed() - if not rate_limiter.can_send(): + if not rate_limiter.attempt_send(): return vale_bid = state.bid_prices["VALE"] @@ -585,8 +585,7 @@ def main(): return if any(mean_rev.position.get(s) is not None for s in symbols_for_mr): return - rate_limiter.reset_if_needed() - if not rate_limiter.can_send(): + if not rate_limiter.attempt_send(): return for symbol in symbols_for_ema: @@ -633,8 +632,7 @@ def main(): return if xlf_state != "IDLE" or vale_state != "IDLE": return - rate_limiter.reset_if_needed() - if not rate_limiter.can_send(): + if not rate_limiter.attempt_send(): return for symbol in symbols_for_mr: