This commit is contained in:
2026-05-09 17:13:55 +09:00
parent a9ed42bbba
commit 8a85cc7248

View File

@@ -271,20 +271,22 @@ team_name = "HanyangFloorFunction"
class OrderRateLimiter: class OrderRateLimiter:
def __init__(self, max_per_second=500): def __init__(self, max_per_second=500):
self.max_per_second = max_per_second 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() now = time.time()
self.timestamps.append(now) elapsed = now - self.last_refill
recent = [t for t in self.timestamps if now - t < 1.0] if elapsed >= 1.0:
if len(recent) >= self.max_per_second: self.tokens = self.max_per_second
return False self.last_refill = now
return True if self.tokens > 0:
self.tokens -= 1
return True
return False
def reset_if_needed(self): def reset_if_needed(self):
now = time.time() pass
while self.timestamps and now - self.timestamps[0] >= 1.0:
self.timestamps.popleft()
def main(): def main():
@@ -434,8 +436,7 @@ def main():
return return
if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema): if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema):
return return
rate_limiter.reset_if_needed() if not rate_limiter.attempt_send():
if not rate_limiter.can_send():
return return
bond_ask = state.ask_prices["BOND"] bond_ask = state.ask_prices["BOND"]
@@ -511,8 +512,7 @@ def main():
return return
if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema): if any(cross_ema.last_signal.get(s) is not None for s in symbols_for_ema):
return return
rate_limiter.reset_if_needed() if not rate_limiter.attempt_send():
if not rate_limiter.can_send():
return return
vale_bid = state.bid_prices["VALE"] vale_bid = state.bid_prices["VALE"]
@@ -585,8 +585,7 @@ def main():
return return
if any(mean_rev.position.get(s) is not None for s in symbols_for_mr): if any(mean_rev.position.get(s) is not None for s in symbols_for_mr):
return return
rate_limiter.reset_if_needed() if not rate_limiter.attempt_send():
if not rate_limiter.can_send():
return return
for symbol in symbols_for_ema: for symbol in symbols_for_ema:
@@ -633,8 +632,7 @@ def main():
return return
if xlf_state != "IDLE" or vale_state != "IDLE": if xlf_state != "IDLE" or vale_state != "IDLE":
return return
rate_limiter.reset_if_needed() if not rate_limiter.attempt_send():
if not rate_limiter.can_send():
return return
for symbol in symbols_for_mr: for symbol in symbols_for_mr: