Files
polymarket-whale-watcher/src/models/decision.py
T
SII-leiyuandClaude 0254e2c01a Initial commit: Polymarket Whale Watcher
- Add trade monitoring and whale detection system
- Add LLM-powered trade analysis
- Add market data fetching from Polymarket API
- Include example environment configuration
- Add automated report generation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 15:41:05 +08:00

60 lines
1.7 KiB
Python

"""LLM decision models."""
from datetime import datetime
from typing import Optional
from enum import Enum
from pydantic import BaseModel, Field
class TradeAction(str, Enum):
"""Recommended trade action."""
BUY = "BUY"
SELL = "SELL"
HOLD = "HOLD" # Do not trade
class TraderCredibility(str, Enum):
"""Trader credibility level based on leaderboard ranking."""
HIGH = "HIGH" # Top 100
MEDIUM = "MEDIUM" # 100-500
LOW = "LOW" # 500+
UNKNOWN = "UNKNOWN" # Not on leaderboard
class TradeRecommendation(BaseModel):
"""Trade recommendation from LLM."""
action: TradeAction
outcome: str # Which outcome to trade
confidence: float = Field(ge=0.0, le=1.0) # 0-1 confidence score
suggested_price: Optional[float] = None
suggested_size_percent: float = Field(default=0.1, ge=0.0, le=1.0) # % of balance
reasoning: str = ""
# Insider trading assessment fields
insider_trading_likelihood: float = Field(default=0.0, ge=0.0, le=1.0) # 0-1 likelihood
trader_credibility: TraderCredibility = TraderCredibility.UNKNOWN
insider_evidence: str = "" # Evidence supporting insider trading assessment
class LLMDecision(BaseModel):
"""Complete LLM decision for a whale trade."""
whale_trade_id: str
market_id: str
analysis: str # Full LLM analysis text
recommendation: TradeRecommendation
created_at: datetime = Field(default_factory=datetime.utcnow)
executed: bool = False
execution_result: Optional[str] = None
@property
def should_trade(self) -> bool:
"""Check if we should execute this trade."""
return (
self.recommendation.action != TradeAction.HOLD
and self.recommendation.confidence >= 0.6
)