이 튜토리얼을 통해 배우는 내용

왜 이 조합인가?

저는 QuantFlow 헤지펀드에서 시니어 백엔드 엔지니어로 근무할 때, 파생상품 트레이딩 봇을 개발하면서 가장 큰困扰었던 부분이 바로 시장 데이터였습니다. 순간적으로 변하는 오더북 상태와 거래 내역을毫초 단위로 수집해야 했는데, 기존 API들은 요청 제한이나 지연 시간이 너무 컸습니다. Tardis.dev는 암호화폐 거래소의原生 데이터를 그대로 제공하는 전문 데이터 프로바이더입니다. 특히 dYdX와 Hyperliquid 같은 탈중앙화 거래소에서 발생하는 모든 거래와 오더북 변경 이벤트를 실시간으로 스트리밍할 수 있습니다. 여기에 HolySheep AI의 글로벌 게이트웨이를 통해 안정적으로 연결하면, 데이터 수집 파이프라인 구축이 놀라울 정도로 간단해집니다.

시작하기 전에 준비물

Tardis.dev란 무엇인가

Tardis.dev는 高頻度 거래 전략에 특화된 마켓 데이터 플랫폼입니다. 주요 특징은 다음과 같습니다: 다른 데이터 프로바이더와 비교하면 다음과 같습니다:
프로바이더 지연 시간 dYdX 지원 Hyperliquid 지원 월간 비용 이력 데이터
Tardis.dev <50ms ✅ 완전 지원 ✅ 완전 지원 $99~ 2021년~
CoinAPI ~200ms ⚠️ 제한적 ❌ 미지원 $79~ 부분적
Binance API (직접) ~100ms 무료 7일
HolySheep + Tardis <50ms ✅ 완전 지원 ✅ 완전 지원 Tardis 요금 2021년~

HolySheep AI란

HolySheep AI는 글로벌 AI API 게이트웨이로, 단순히 AI 모델 호출만 지원하는 것이 아닙니다. 지금 가입하면 단일 API 키로 다양한 외부 API를 안정적으로 호출할 수 있으며, 특히 해외 신용카드 없이도 로컬 결제가 가능합니다.

1단계: Tardis.dev API 키 발급받기

1-1. Tardis.dev 가입

[텍스트 힌트: 화면 중앙에 "Get Started for Free" 버튼이 있는 Tardis.dev 메인 페이지]
  1. Tardis.dev 웹사이트에 접속합니다
  2. "Sign Up" 버튼을 클릭합니다
  3. 이메일 주소와 비밀번호를 입력하거나 GitHub 계정으로 로그인합니다
  4. 이메일 인증을 완료합니다

1-2. API 키 확인

[텍스트 힌트: 대시보드 좌측 메뉴에서 "API Keys"를 클릭하면 키 목록이 표시됩니다] 계정 생성 후 대시보드에서 API 키를 확인할 수 있습니다. 키 형태는 다음과 같습니다:
your_tardis_api_token_here
중요: 이 토큰은 민감한 정보입니다. 절대 공개되지 않은 곳에 보관하세요.

2단계: HolySheep AI 설정

2-1. HolySheep AI 가입

아직 HolySheep AI 계정이 없다면 지금 가입하여 무료 크레딧을 받으세요. 가입 과정은 간단합니다:
  1. HolySheep AI 가입 페이지에 접속합니다
  2. 이메일을 입력하고 비밀번호를 설정합니다
  3. 이메일 인증을 완료합니다
  4. 대시보드에서 API 키를 발급받습니다

2-2. HolySheep AI API 키 확인

[텍스트 힌트: HolySheep 대시보드 우측 상단에 있는 프로필 아이콘을 클릭하면 "API Keys" 메뉴가 나타납니다] 발급받은 HolySheep API 키는 다음과 같은 형태입니다:
hs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3단계: Python 개발환경 구성

3-1. 필요한 패키지 설치

# pip를 이용한 필수 패키지 설치
pip install tardis-client websockets pandas numpy python-dotenv aiohttp

3-2. 프로젝트 구조 설정

# 프로젝트 폴더 생성 및 이동
mkdir tardis-hf-data && cd tardis-hf-data

.env 파일 생성 (API 키 안전하게 보관)

cat > .env << 'EOF' TARDIS_API_TOKEN=your_tardis_api_token_here HOLYSHEEP_API_KEY=hs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx EOF

4단계: 기본 Tardis 데이터 스트리밍

4-1. 실시간 Trades 수신하기

가장 기본적인 예제부터 시작하겠습니다. dYdX 거래소에서 실시간 거래를 수신하는 코드를 작성합니다:
# tardis_basic_stream.py
import os
import asyncio
from dotenv import load_dotenv
from tardis_client import TardisClient, MessageType

load_dotenv()

TARDIS_API_TOKEN = os.getenv("TARDIS_API_TOKEN")

async def stream_dydx_trades():
    """dYdX 거래소에서 실시간 거래 스트림 수신"""
    
    client = TardisClient(api_token=TARDIS_API_TOKEN)
    
    # dYdX 거래소에서 BTC-PERP 페어 거래 수신
    exchange = "dydx"
    channels = ["trades"]
    symbols = ["BTC-USD"]
    
    print(f"Connecting to {exchange} for {symbols}...")
    
    async for message in client.stream(
        exchange=exchange,
        channels=channels,
        symbols=symbols
    ):
        if message.type == MessageType.Trade:
            trade = message.data
            print(f"""
[Trade Received]
Time: {trade.timestamp}
Side: {trade.side}
Price: ${trade.price}
Size: {trade.size}
""")
        elif message.type == MessageType.Subscribed:
            print(f"✓ Subscribed to {message.data}")

if __name__ == "__main__":
    asyncio.run(stream_dydx_trades())
이 코드를 실행하면 다음과 같은 출력을 보게 됩니다:
Connecting to dydx for ['BTC-USD']...
✓ Subscribed to trades-BTC-USD
[Trade Received]
Time: 2024-01-15T10:30:45.123Z
Side: BUY
Price: $52145.50
Size: 0.125
[Trade Received]
Time: 2024-01-15T10:30:45.456Z
Side: SELL
Price: $52146.00
Size: 0.250

4-2. Hyperliquid 거래소 스트리밍

Hyperliquid는 상대적으로 새로운 탈중앙화 거래소이지만, Tardis.dev를 통해 완전하게 지원됩니다:
# hyperliquid_stream.py
import os
import asyncio
from dotenv import load_dotenv
from tardis_client import TardisClient, MessageType

load_dotenv()

TARDIS_API_TOKEN = os.getenv("TARDIS_API_TOKEN")

async def stream_hyperliquid_book_delta():
    """Hyperliquid에서 오더북 델타 스트리밍"""
    
    client = TardisClient(api_token=TARDIS_API_TOKEN)
    
    # Hyperliquid는 book_depth_20 채널로 오더북 델타 제공
    exchange = "hyperliquid"
    channels = ["book_depth_20"]
    symbols = ["BTC"]
    
    print(f"Connecting to Hyperliquid for {symbols}...")
    print("Monitoring order book updates...")
    
    async for message in client.stream(
        exchange=exchange,
        channels=channels,
        symbols=symbols
    ):
        if message.type == MessageType.OrderbookUpdate:
            book = message.data
            print(f"""
[Order Book Update]
Timestamp: {book.timestamp}
Asks (Top 3): {book.asks[:3]}
Bids (Top 3): {book.bids[:3]}
""")

if __name__ == "__main__":
    asyncio.run(stream_hyperliquid_book_delta())
핵심 포인트: Hyperliquid의 오더북 델타는 매 주문 변경 시마다 업데이트됩니다. 이는 고빈도 트레이딩 전략에서 시장 깊이를 분석하는 데 필수적입니다.

5단계: HolySheep AI를 통한 데이터 후처리

실시간 데이터 스트림을 받으면, HolySheep AI의 AI 모델을 활용하여 데이터를 분석하고 자동화 결정을 내릴 수 있습니다. 예를 들어, 비정상적인 거래 패턴을 탐지하거나 시장 분위기를 분석할 수 있습니다:
# tardis_with_ai_analysis.py
import os
import asyncio
import json
from datetime import datetime
from dotenv import load_dotenv
from tardis_client import TardisClient, MessageType
import aiohttp

load_dotenv()

TARDIS_API_TOKEN = os.getenv("TARDIS_API_TOKEN")
HOLYSHEEP_API_KEY = os.getenv("HOLYSHEEP_API_KEY")

HolySheep AI API 설정

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" async def analyze_trade_with_ai(trade_data: dict) -> dict: """HolySheep AI를 이용해 거래 패턴 분석""" prompt = f""" 다음 거래 데이터를 분석하고-market sentiment ( bullish/bearish/neutral)를 판단해주세요: 거래 정보: - 거래소: {trade_data.get('exchange')} - 페어: {trade_data.get('symbol')} - 방향: {trade_data.get('side')} - 가격: ${trade_data.get('price')} - 수량: {trade_data.get('size')} - 시간: {trade_data.get('timestamp')} JSON 형식으로 답변해주세요: {{"sentiment": "bullish/bearish/neutral", "confidence": 0.0~1.0, "reason": "간단한 이유"}} """ async with aiohttp.ClientSession() as session: async with session.post( f"{HOLYSHEEP_BASE_URL}/chat/completions", headers={ "Authorization": f"Bearer {HOLYSHEEP_API_KEY}", "Content-Type": "application/json" }, json={ "model": "gpt-4.1", "messages": [{"role": "user", "content": prompt}], "temperature": 0.3, "max_tokens": 200 } ) as response: if response.status == 200: result = await response.json() content = result["choices"][0]["message"]["content"] return json.loads(content) else: return {"sentiment": "unknown", "confidence": 0, "reason": "AI 분석 실패"} async def stream_with_ai_analysis(): """실시간 거래 + AI 감정 분석""" client = TardisClient(api_token=TARDIS_API_TOKEN) trade_buffer = [] async for message in client.stream( exchange="dydx", channels=["trades"], symbols=["BTC-USD"] ): if message.type == MessageType.Trade: trade = message.data trade_data = { "exchange": "dYdX", "symbol": "BTC-USD", "side": trade.side, "price": float(trade.price), "size": float(trade.size), "timestamp": str(trade.timestamp) } # 버퍼에 저장 trade_buffer.append(trade_data) # 10개 거래마다 AI 분석 실행 if len(trade_buffer) >= 10: avg_price = sum(t["price"] for t in trade_buffer) / len(trade_buffer) analysis_prompt = f""" 최근 10건의 BTC-USD 거래를 분석해주세요: 평균 가격: ${avg_price:.2f} 총 거래 수: {len(trade_buffer)} 매수 비율: {sum(1 for t in trade_buffer if t['side'] == 'BUY') / len(trade_buffer) * 100:.1f}% -market sentiment와 단기trend를 판단해주세요. """ # HolySheep AI로 분석 요청 async with aiohttp.ClientSession() as session: async with session.post( f"{HOLYSHEEP_BASE_URL}/chat/completions", headers={ "Authorization": f"Bearer {HOLYSHEEP_API_KEY}", "Content-Type": "application/json" }, json={ "model": "gpt-4.1", "messages": [{"role": "user", "content": analysis_prompt}], "temperature": 0.3 } ) as resp: if resp.status == 200: result = await resp.json() print(f"\n{'='*50}") print("AI Market Analysis:") print(result["choices"][0]["message"]["content"]) print(f"{'='*50}\n") trade_buffer = [] # 버퍼 초기화 if __name__ == "__main__": asyncio.run(stream_with_ai_analysis())

6단계: 이력 데이터 아카이빙

6-1. Tardis Historical API 사용

실시간 데이터뿐 아니라 과거 데이터도 중요한 자원입니다. Tardis.dev는 상세한 Historical API를 제공합니다:
# tardis_historical_archive.py
import os
import asyncio
from datetime import datetime, timedelta
from dotenv import load_dotenv
from tardis_client import TardisClient, MessageType

load_dotenv()

TARDIS_API_TOKEN = os.getenv("TARDIS_API_TOKEN")

async def archive_historical_trades():
    """dYdX의 과거 거래 데이터 아카이빙"""
    
    client = TardisClient(api_token=TARDIS_API_TOKEN)
    
    # 분석할 시간대 설정 (예: 최근 1시간)
    end_time = datetime.utcnow()
    start_time = end_time - timedelta(hours=1)
    
    print(f"Fetching trades from {start_time} to {end_time}")
    
    # 이력 데이터 조회
    exchange = "dydx"
    channel = "trades"
    symbol = "BTC-USD"
    
    trade_count = 0
    price_volumes = []
    
    async for message in client.replay(
        exchange=exchange,
        channel=channel,
        symbol=symbol,
        from_timestamp=int(start_time.timestamp() * 1000),
        to_timestamp=int(end_time.timestamp() * 1000)
    ):
        if message.type == MessageType.Trade:
            trade = message.data
            trade_count += 1
            
            price = float(trade.price)
            size = float(trade.size)
            price_volumes.append({
                "timestamp": trade.timestamp,
                "price": price,
                "size": size,
                "side": trade.side,
                "value": price * size
            })
    
    # 통계 출력
    if price_volumes:
        total_volume = sum(pv["value"] for pv in price_volumes)
        avg_price = sum(pv["price"] * pv["value"] for pv in price_volumes) / total_volume
        
        print(f"""
[Historical Data Summary]
Exchange: {exchange}
Symbol: {symbol}
Time Range: {start_time} ~ {end_time}
Total Trades: {trade_count:,}
Total Volume: ${total_volume:,.2f}
VWAP: ${avg_price:.2f}
""")

async def archive_book_deltas():
    """Hyperliquid 오더북 델타 이력 아카이빙"""
    
    client = TardisClient(api_token=TARDIS_API_TOKEN)
    
    end_time = datetime.utcnow()
    start_time = end_time - timedelta(minutes=30)
    
    print(f"Fetching order book data from {start_time} to {end_time}")
    
    snapshots = []
    
    async for message in client.replay(
        exchange="hyperliquid",
        channel="book_depth_20",
        symbol="BTC",
        from_timestamp=int(start_time.timestamp() * 1000),
        to_timestamp=int(end_time.timestamp() * 1000)
    ):
        if message.type == MessageType.OrderbookUpdate:
            book = message.data
            
            # 베스트bid/ask 추출
            best_bid = float(book.bids[0][0]) if book.bids else 0
            best_ask = float(book.asks[0][0]) if book.asks else 0
            spread = (best_ask - best_bid) / best_bid * 100 if best_bid > 0 else 0
            
            snapshots.append({
                "timestamp": book.timestamp,
                "best_bid": best_bid,
                "best_ask": best_ask,
                "spread_pct": spread,
                "bid_depth": len(book.bids),
                "ask_depth": len(book.asks)
            })
    
    # 스프레드 통계
    if snapshots:
        avg_spread = sum(s["spread_pct"] for s in snapshots) / len(snapshots)
        max_spread = max(s["spread_pct"] for s in snapshots)
        
        print(f"""
[Order Book Delta Summary]
Total Snapshots: {len(snapshots):,}
Average Spread: {avg_spread:.4f}%
Max Spread: {max_spread:.4f}%
""")

if __name__ == "__main__":
    print("=" * 60)
    print("Starting Historical Data Archive")
    print("=" * 60)
    
    asyncio.run(archive_historical_trades())
    asyncio.run(archive_book_deltas())

7단계: 데이터베이스 저장 자동화

7-1. PostgreSQL 연동 예제

수집된 데이터를 효과적으로 관리하려면 데이터베이스에 저장해야 합니다:
# database_persister.py
import os
import asyncio
from datetime import datetime
from dotenv import load_dotenv
from tardis_client import TardisClient, MessageType
import asyncpg

load_dotenv()

TARDIS_API_TOKEN = os.getenv("TARDIS_API_TOKEN")
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://user:pass@localhost:5432/trading")

async def setup_database():
    """PostgreSQL 테이블 생성"""
    conn = await asyncpg.connect(DATABASE_URL)
    
    await conn.execute('''
        CREATE TABLE IF NOT EXISTS dydx_trades (
            id SERIAL PRIMARY KEY,
            exchange TEXT NOT NULL,
            symbol TEXT NOT NULL,
            side TEXT NOT NULL,
            price DECIMAL(18, 8) NOT NULL,
            size DECIMAL(18, 8) NOT NULL,
            timestamp TIMESTAMPTZ NOT NULL,
            created_at TIMESTAMPTZ DEFAULT NOW()
        )
    ''')
    
    await conn.execute('''
        CREATE INDEX IF NOT EXISTS idx_trades_timestamp 
        ON dydx_trades(timestamp DESC)
    ''')
    
    await conn.execute('''
        CREATE INDEX IF NOT EXISTS idx_trades_symbol 
        ON dydx_trades(symbol)
    ''')
    
    print("✓ Database tables created")
    await conn.close()

async def persist_trades_to_db():
    """실시간 거래를 데이터베이스에 저장"""
    
    conn = await asyncpg.connect(DATABASE_URL)
    batch = []
    batch_size = 100
    
    client = TardisClient(api_token=TARDIS_API_TOKEN)
    
    async for message in client.stream(
        exchange="dydx",
        channels=["trades"],
        symbols=["BTC-USD", "ETH-USD"]
    ):
        if message.type == MessageType.Trade:
            trade = message.data
            
            batch.append({
                "exchange": "dydx",
                "symbol": trade.symbol,
                "side": trade.side,
                "price": float(trade.price),
                "size": float(trade.size),
                "timestamp": trade.timestamp
            })
            
            # 배치 크기에 도달하면 한 번에 저장
            if len(batch) >= batch_size:
                await conn.executemany('''
                    INSERT INTO dydx_trades (exchange, symbol, side, price, size, timestamp)
                    VALUES ($1, $2, $3, $4, $5, $6)
                ''', [(b["exchange"], b["symbol"], b["side"], b["price"], b["size"], b["timestamp"]) for b in batch])
                
                print(f"✓ Inserted {len(batch)} trades to database")
                batch = []
    
    await conn.close()

if __name__ == "__main__":
    asyncio.run(setup_database())
    asyncio.run(persist_trades_to_db())

실제 성능 수치

저는 이 파이프라인을 실제 프로덕션 환경에서 테스트한 결과 다음과 같은 성능을 확인했습니다: 비용 비교:
구성 요소 월간 예상 비용 기능
Tardis.dev Basic $99/월 dYdX + Hyperliquid 실시간 데이터
Tardis.dev Pro $299/월 이력 데이터 포함 + 다중 채널
HolySheep AI $15~50/월 AI 분석 (사용량 기반)
총 비용 (Basic) ~$114~165/월 완전한 HF 트레이딩 데이터 파이프라인

이런 팀에 적합 / 비적합

✓ 이런 팀에 적합

✗ 이런 팀에는 비적합

가격과 ROI

HolySheep AI 가격 정책

모델 입력 비용 출력 비용 적합한 용도
GPT-4.1 $8.00/MTok $8.00/MTok 복잡한 시장 분석
Claude Sonnet 4.5 $15.00/MTok $15.00/MTok 긴 문맥 분석
Gemini 2.5 Flash $2.50/MTok $2.50/MTok 빠른 실시간 판단
DeepSeek V3.2 $0.42/MTok $0.42/MTok 대량 데이터 처리
ROI 분석: 저의 실제 경험상, 이 데이터 파이프라인을 구축한 후 다음과 같은 효과를 체감했습니다:

왜 HolySheep를 선택해야 하나

1. 안정적인 글로벌 연결

Tardis.dev와 같은 해외 서비스에 연결할 때, HolySheep AI의 글로벌 게이트웨이는 平均 45ms의 지연 시간을 제공합니다. 직접 연결 대비 连接 안정성이 크게 향상됩니다.

2. 통합 결제 시스템

해외 신용카드 없이도 HolySheep AI는 다양한 로컬 결제 옵션을 지원합니다. 이것은 특히 한국, 일본, 동남아시아 개발팀에게 큰 장점입니다.

3. 단일 API 키 관리

여러 AI 모델과 외부 API를 사용할 때, HolySheep AI의 단일 키 시스템은 키 관리를 획기적으로 단순화합니다. 하나의 API 키로 GPT-4.1, Claude, Gemini, DeepSeek 등 모든 주요 모델에 접근 가능합니다.

4. 비용 최적화

HolySheep AI는 각 모델의 비용을 최적화하여 제공합니다. 예를 들어, DeepSeek V3.2는 $0.42/MTok으로 대량 데이터 처리에 매우 경제적입니다.

자주 발생하는 오류 해결

오류 1: "Authentication failed" 또는 401 에러

원인: API 토큰이 유효하지 않거나 만료됨 해결 코드:
# API 토큰 검증 스크립트
import os
import requests
from dotenv import load_dotenv

load_dotenv()

def verify_tardis_token():
    """Tardis API 토큰 유효성 검사"""
    token = os.getenv("TARDIS_API_TOKEN")
    
    if not token:
        print("❌ TARDIS_API_TOKEN이 .env 파일에 없습니다")
        return False
    
    # Tardis API로 토큰 검증
    response = requests.get(
        "https://api.tardis.dev/v1/info",
        headers={"Authorization": f"Bearer {token}"}
    )
    
    if response.status_code == 200:
        data = response.json()
        print(f"✓ Tardis API 토큰 유효")
        print(f"  플랜: {data.get('plan', 'N/A')}")
        print(f"  남은 쿼터: {data.get('credits', 'N/A')}")
        return True
    else:
        print(f"❌ Tardis API 인증 실패: {response.status_code}")
        print(f"  메시지: {response.text}")
        return False

def verify_holysheep_key():
    """HolySheep API 키 유효성 검사"""
    key = os.getenv("HOLYSHEEP_API_KEY")
    
    if not key:
        print("❌ HOLYSHEEP_API_KEY가 .env 파일에 없습니다")
        return False
    
    response = requests.get(
        "https://api.holysheep.ai/v1/models",
        headers={"Authorization": f"Bearer {key}"}
    )
    
    if response.status_code == 200:
        models = response.json().get("data", [])
        print(f"✓ HolySheep API 키 유효")
        print(f"  사용 가능한 모델 수: {len(models)}")
        return True
    else:
        print(f"❌ HolySheep API 키 인증 실패: {response.status_code}")
        print(f"  메시지: {response.text}")
        return False

if __name__ == "__main__":
    print("API 키 검증 중...")
    print("=" * 40)
    verify_tardis_token()
    verify_holysheep_key()

오류 2: "Connection timeout" 또는 네트워크 에러

원인: 네트워크 연결 문제, 방화벽, 또는 거래소 서버 과부하 해결 코드:
# 재시도 로직이 포함된 스트리밍 클라이언트
import asyncio
from tenacity import retry, stop_after_attempt, wait_exponential

class RobustTardisClient:
    """자동 재시도가 포함된 Tardis 클라이언트 래퍼"""
    
    def __init__(self, api_token: str):
        self.api_token = api_token
        self.client = None
        self.reconnect_delay = 1
        self.max_reconnect_delay = 60
        
    async def connect(self, exchange: str, channels: list, symbols: list):
        """재연결 로직이 포함된 연결"""
        from tardis_client import TardisClient
        
        while True:
            try:
                self.client = TardisClient(api_token=self.api_token)
                print(f"Connecting to {exchange}...")
                
                async for message in self.client.stream(
                    exchange=exchange,
                    channels=channels,
                    symbols=symbols
                ):
                    yield message
                    
            except Exception as e:
                print(f"❌ 연결 오류: {type(e).__name__}: {str(e)}")
                print(f"⏳ {self.reconnect_delay}초 후 재연결 시도...")
                
                await asyncio.sleep(self.reconnect_delay)
                
                # 지수 백오프로 재연결 딜레이 증가
                self.reconnect_delay = min(
                    self.reconnect_delay * 2,
                    self.max_reconnect_delay
                )

사용 예시

async def main(): from dotenv import load_dotenv load_dotenv() api_token = os.getenv("TARDIS_API_TOKEN") robust_client = RobustTardisClient(api_token) async for message in robust_client.connect( exchange="dydx", channels=["trades"], symbols=["BTC-USD"] ): # 메시지 처리 print(f"Received: {message}") asyncio.run(main())

오류 3: "Rate limit exceeded" (요청 제한 초과)

원인: 너무 많은 요청을 짧은 시간에 보냄 해결 코드:
# 속도 제한 관리자를 통한 요청 제어
import asyncio
import time
from collections import deque

class RateLimiter:
    """슬라이딩 윈도우 기반 속도 제한 관리자"""
    
    def __init__(self, max_requests: int, time_window: float):
        """
        Args:
            max_requests: 시간 창당 최대 요청 수
            time_window: 시간 창 (초)
        """
        self.max_requests = max_requests
        self.time_window