반응형
맞아요! 1분당 API 제한이 2400회일 경우 더 빠르게 처리하는 방법은 크게 두 가지입니다:
✅ 1. API 소모량을 줄이는 방법 (효율화)
🔹 a. 불필요한 요청 제거
- 이미 받은 데이터나 상태는 캐싱하고, 같은 요청을 반복하지 않기
- 예: 가격이 갱신되지 않았는데도 계속 get_price() 요청하는 경우 차단
🔹 b. 요청 단위 줄이기 (bulk 처리 활용)
- 하나하나 요청하는 대신 multi-symbol, multi-timeframe 요청을 지원하는 경우 이용
(예: Binance의 batchOrders, multi symbol klines 등)
🔹 c. 빈도 낮추기 (debounce / throttle)
- 실시간이 아닌 이상, 예를 들어 3초 단위로 한 번씩만 체크하는 식으로 빈도 줄이기
🔹 d. 필요한 symbol만 필터링
- 조건에 해당하지 않는 심볼까지 전체 요청하지 않고, 사전에 필터링 후 요청
🔹 e. WebSocket 사용 (가능할 경우)
- 반복적인 REST API 요청 대신, 가격/체결 등의 실시간 정보는 WebSocket으로 대체
✅ 2. API 사용량은 그대로, 더 많이 처리하기 (속도 ↑)
🔹 a. 병렬 처리 (비동기/멀티스레드)
- asyncio, aiohttp, httpx 등을 활용해 동시에 여러 요청 처리
(단, 동시에 보내도 제한은 공유되므로 소모량이 문제될 수 있음)
🔹 b. 순서를 최적화
- 조건을 먼저 돌리고, 매매/조회 요청을 나중에 몰아서 실행
(예: loop_table_condition_async() → 조건 충족한 symbol만 get_trade_info)
✅ 3. API Limit 관리 팁
- Binance 기준, 기본은 1분 1200~2400 weight이며, 각 요청마다 weight 다름 → GET /api/v3/account (10 weight), GET /api/v3/ticker/price (1 weight)
➤ API 문서에서 "weight" 확인하고, 고비용 요청은 최소화
➤ 요청 전에 "남은 weight" 체크 가능 (X-MBX-USED-WEIGHT-1M)
필요하다면, 지금 사용 중인 요청 리스트나 코드 흐름을 보여주시면 구체적으로 어떤 걸 줄일 수 있을지 최적화 방안을 드릴 수 있어요.
예: get_trade_info_async() 안에서 뭐가 반복되고 있는지 등!
반응형
'IT > SystemTrading' 카테고리의 다른 글
asyncio가 병렬처럼 느껴지지만, 실제로는 진짜 병렬 처리는 아닙니다. (0) | 2025.04.07 |
---|---|
위험 고지 의무, 알려야할까? (1) | 2024.10.10 |
시스템 트레이딩 전략의 기초 요소 3가지 (0) | 2024.07.15 |
시스템 (알고리즘) 트레이딩 기초 (0) | 2024.06.23 |