Năm 2024, khi thị trường phái sinh tiền mã hóa bước vào giai đoạn biến động mạnh với khối lượng giao dịch futures vượt 100 tỷ USD mỗi ngày, một nhà phân tích quantitative tại Singapore — giả sử tên là Minh — nhận ra rằng việc hiểu rõ cấu trúc quyền chọn (options)funding rate có thể giúp dự đoán đảo chiều thị trường với độ chính xác cao hơn. Tuy nhiên, dữ liệu phái sinh chất lượng cao thường có chi phí rất đắt đỏ từ các nhà cung cấp như CryptoCompare, Kaiko hay CoinAPI. Minh đã tìm thấy Tardis (tardis.dev) — một nguồn cung cấp dữ liệu tick-level cho derivatives với định dạng CSV dễ xử lý, hoàn toàn miễn phí cho tier cơ bản. Bài viết này sẽ hướng dẫn bạn cách khai thác Tardis CSV dataset để phân tích options chain và funding rates, đồng thời tích hợp HolySheep AI để xử lý và diễn giải dữ liệu bằng AI.

Tardis CSV Dataset: Nguồn Dữ Liệu Phái Sinh Chất Lượng Cao

Tardis cung cấp dữ liệu historical và real-time cho hơn 20 sàn phái sinh, bao gồm Binance Futures, Bybit, OKX, Deribit, CME Group. Điểm mạnh của Tardis so với các đối thủ nằm ở:

Cách Tải Dữ Liệu Tardis CSV

Tardis cung cấp trang web tải trực tiếp tại tardis.dev. Bạn có thể chọn:

Sau đây là script Python để tự động hóa việc tải dữ liệu từ Tardis:

# tardis_data_loader.py
import requests
import pandas as pd
from datetime import datetime, timedelta
import time
import os

class TardisDataLoader:
    """
    Tardis CSV Data Loader - Tự động tải dữ liệu phái sinh từ Tardis
    Hỗ trợ: trades, quotes, options, funding rates, liquidations
    """
    
    BASE_URL = "https://tardis.dev/downloads"
    
    SUPPORTED_EXCHANGES = [
        'binance-futures',
        'bybit',
        'okx',
        'deribit',
        'binance-options',
        'phemex'
    ]
    
    DATA_TYPES = [
        'trades',
        'quotes',
        'options',
        'funding',
        'liquidations'
    ]
    
    def __init__(self, output_dir='./tardis_data'):
        self.output_dir = output_dir
        os.makedirs(output_dir, exist_ok=True)
    
    def download_options_data(self, exchange, symbol, start_date, end_date):
        """
        Tải dữ liệu quyền chọn (options) từ Tardis
        """
        # URL pattern: https://tardis.dev/downloads/[exchange]/[data_type]/[date].csv.bz2
        date_range = self._generate_date_range(start_date, end_date)
        
        all_data = []
        
        for date in date_range:
            url = f"{self.BASE_URL}/{exchange}/options/{date}.csv.bz2"
            local_path = os.path.join(self.output_dir, f"options_{exchange}_{date}.csv.bz2")
            
            print(f"Tải: {url}")
            
            try:
                response = requests.get(url, timeout=60)
                if response.status_code == 200:
                    # Giải nén và xử lý trực tiếp
                    import bz2
                    import io
                    
                    with bz2.open(io.BytesIO(response.content), 'rt') as f:
                        df = pd.read_csv(f)
                        # Lọc theo symbol nếu cần
                        if 'symbol' in df.columns:
                            df = df[df['symbol'].str.contains(symbol, case=False, na=False)]
                        all_data.append(df)
                        print(f"  ✓ Đã tải {len(df)} records")
                else:
                    print(f"  ✗ Lỗi HTTP {response.status_code}")
                    
                time.sleep(0.5)  # Tránh overload server
                
            except Exception as e:
                print(f"  ✗ Lỗi: {e}")
                continue
        
        if all_data:
            combined_df = pd.concat(all_data, ignore_index=True)
            output_file = os.path.join(self.output_dir, f"options_{exchange}_{symbol}_{start_date}_{end_date}.csv")
            combined_df.to_csv(output_file, index=False)
            print(f"\n✓ Đã lưu: {output_file} ({len(combined_df)} total records)")
            return combined_df
        
        return None
    
    def download_funding_data(self, exchange, symbols, start_date, end_date):
        """
        Tải dữ liệu funding rate từ Tardis
        """
        date_range = self._generate_date_range(start_date, end_date)
        all_data = []
        
        for date in date_range:
            url = f"{self.BASE_URL}/{exchange}/funding/{date}.csv.bz2"
            
            print(f"Tải funding: {url}")
            
            try:
                response = requests.get(url, timeout=60)
                if response.status_code == 200:
                    import bz2
                    import io
                    
                    with bz2.open(io.BytesIO(response.content), 'rt') as f:
                        df = pd.read_csv(f)
                        if 'symbol' in df.columns:
                            df = df[df['symbol'].isin(symbols)]
                        all_data.append(df)
                        print(f"  ✓ {len(df)} records")
                
                time.sleep(0.5)
                
            except Exception as e:
                print(f"  ✗ Lỗi: {e}")
                continue
        
        if all_data:
            combined_df = pd.concat(all_data, ignore_index=True)
            output_file = os.path.join(self.output_dir, f"funding_{exchange}_{start_date}_{end_date}.csv")
            combined_df.to_csv(output_file, index=False)
            print(f"\n✓ Đã lưu: {output_file}")
            return combined_df
        
        return None
    
    def _generate_date_range(self, start_date, end_date):
        """Sinh danh sách ngày từ start đến end"""
        dates = []
        current = datetime.strptime(start_date, '%Y-%m-%d')
        end = datetime.strptime(end_date, '%Y-%m-%d')
        
        while current <= end:
            dates.append(current.strftime('%Y-%m-%d'))
            current += timedelta(days=1)
        
        return dates

=== SỬ DỤNG ===

if __name__ == "__main__": loader = TardisDataLoader(output_dir='./tardis_derivatives') # Tải 7 ngày options BTC trên Deribit print("=== Tải Options Data ===") options_df = loader.download_options_data( exchange='deribit', symbol='BTC', start_date='2024-01-15', end_date='2024-01-21' ) # Tải funding rates từ Binance Futures print("\n=== Tải Funding Rates ===") funding_df = loader.download_funding_data( exchange='binance-futures', symbols=['BTC-PERP', 'ETH-PERP', 'SOL-PERP'], start_date='2024-01-01', end_date='2024-01-31' ) print("\n=== Hoàn tất! ===")

Phân Tích Options Chain Với HolySheep AI

Sau khi tải dữ liệu, bước tiếp theo là phân tích và diễn giải. Ở đây, HolySheep AI với chi phí chỉ $0.42/MTok (DeepSeek V3.2) hoặc $2.50/MTok (Gemini 2.5 Flash) sẽ giúp bạn xử lý hàng triệu rows data một cách hiệu quả về chi phí. Dưới đây là pipeline hoàn chỉnh:

# options_analysis_pipeline.py
import pandas as pd
import numpy as np
from datetime import datetime
import requests
import json

=== HOLYSHEEP AI CONFIGURATION ===

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY" # Thay thế bằng API key của bạn HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" # LUÔN LUÔN dùng HolySheep endpoint class OptionsChainAnalyzer: """ Phân tích Options Chain từ dữ liệu Tardis Tính toán: Open Interest, Max Pain, Put/Call Ratio, Greeks Summary """ def __init__(self, api_key): self.api_key = api_key self.base_url = "https://api.holysheep.ai/v1" def load_tardis_options(self, csv_path): """Load dữ liệu options từ file CSV của Tardis""" df = pd.read_csv(csv_path) # Tardis options columns: symbol, date, expiry, strike, option_type, # open_interest, volume, last_price, bid, ask, delta, gamma, theta, vega print(f"Loaded {len(df)} options records") print(f"Columns: {df.columns.tolist()}") return df def calculate_max_pain(self, df): """ Tính Max Pain - Mức giá mà tại đó tổng thiệt hại của options holders cao nhất """ if 'strike' not in df.columns or 'open_interest' not in df.columns: raise ValueError("Data thiếu columns cần thiết: strike, open_interest") # Lấy expiry gần nhất latest_expiry = df['expiry'].max() expiry_options = df[df['expiry'] == latest_expiry] strikes = expiry_options['strike'].unique() strike_prices = expiry_options['strike'].values pain_data = [] for strike in strikes: # Tính intrinsic value loss at this strike call_pain = 0 put_pain = 0 # Calls: holders lose when price drops below strike calls = expiry_options[expiry_options['option_type'] == 'call'] if 'open_interest' in calls.columns: call_pain = (calls['strike'] - strike).clip(lower=0).fillna(0) * calls['open_interest'] call_pain = call_pain.sum() # Puts: holders lose when price rises above strike puts = expiry_options[expiry_options['option_type'] == 'put'] if 'open_interest' in puts.columns: put_pain = (strike - puts['strike']).clip(lower=0).fillna(0) * puts['open_interest'] put_pain = put_pain.sum() pain_data.append({ 'strike': strike, 'total_pain': call_pain + put_pain }) pain_df = pd.DataFrame(pain_data) max_pain_strike = pain_df.loc[pain_df['total_pain'].idxmin(), 'strike'] return max_pain_strike, pain_df def calculate_put_call_ratio(self, df): """Tính Put/Call Ratio từ Open Interest và Volume""" if 'option_type' not in df.columns: return None calls = df[df['option_type'] == 'call'] puts = df[df['option_type'] == 'put'] # OI-based ratio call_oi = calls['open_interest'].sum() if 'open_interest' in calls.columns else 0 put_oi = puts['open_interest'].sum() if 'open_interest' in puts.columns else 0 # Volume-based ratio call_vol = calls['volume'].sum() if 'volume' in calls.columns else 0 put_vol = puts['volume'].sum() if 'volume' in puts.columns else 0 return { 'oi_ratio': put_oi / call_oi if call_oi > 0 else 0, 'volume_ratio': put_vol / call_vol if call_vol > 0 else 0, 'call_oi': call_oi, 'put_oi': put_oi, 'call_vol': call_vol, 'put_vol': put_vol } def analyze_greeks_exposure(self, df): """Phân tích Greeks exposure của toàn bộ chain""" greeks = ['delta', 'gamma', 'theta', 'vega'] result = {} for greek in greeks: if greek in df.columns: result[f'{greek}_total'] = df[greek].sum() result[f'{greek}_call'] = df[df['option_type'] == 'call'][greek].sum() result[f'{greek}_put'] = df[df['option_type'] == 'put'][greek].sum() return result def generate_analysis_summary(self, df): """Tạo summary report cho phân tích options""" summary = { 'total_records': len(df), 'unique_symbols': df['symbol'].nunique() if 'symbol' in df.columns else 0, 'date_range': f"{df['date'].min()} to {df['date'].max()}" if 'date' in df.columns else 'N/A' } # Max Pain try: max_pain, pain_df = self.calculate_max_pain(df) summary['max_pain'] = max_pain except: summary['max_pain'] = 'N/A' # Put/Call Ratio pcr = self.calculate_put_call_ratio(df) if pcr: summary.update(pcr) # Greeks greeks = self.analyze_greeks_exposure(df) summary.update(greeks) return summary def query_ai_interpretation(self, summary_data): """ Gửi dữ liệu phân tích đến HolySheep AI để diễn giải Tiết kiệm 85%+ so với OpenAI: DeepSeek V3.2 chỉ $0.42/MTok """ prompt = f""" Bạn là chuyên gia phân tích phái sinh tiền mã hóa. Hãy diễn giải dữ liệu options sau: Dữ liệu phân tích: {json.dumps(summary_data, indent=2)} Hãy cung cấp: 1. Giải thích Put/Call Ratio và ý nghĩa (bullish/bearish signal) 2. Phân tích Max Pain price so với giá thị trường hiện tại 3. Greeks exposure analysis - what does it mean for market direction? 4. Khuyến nghị trading ngắn hạn dựa trên dữ liệu 5. Rủi ro cần lưu ý Format response bằng tiếng Việt, có bullet points. """ response = requests.post( f"{self.base_url}/chat/completions", headers={ "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" }, json={ "model": "deepseek-chat-v3.2", # Model rẻ nhất, hiệu năng cao "messages": [ {"role": "system", "content": "Bạn là chuyên gia phân tích phái sinh tiền mã hóa."}, {"role": "user", "content": prompt} ], "temperature": 0.3, "max_tokens": 2000 }, timeout=30 ) if response.status_code == 200: result = response.json() return result['choices'][0]['message']['content'] else: raise Exception(f"HolySheep API Error: {response.status_code} - {response.text}")

=== SỬ DỤNG ===

if __name__ == "__main__": analyzer = OptionsChainAnalyzer(api_key=HOLYSHEEP_API_KEY) # Load dữ liệu print("=== Phân tích Options Chain ===") options_df = analyzer.load_tardis_options('./tardis_derivatives/options_btc_jan.csv') # Tạo summary summary = analyzer.generate_analysis_summary(options_df) print("\n📊 Summary:") print(json.dumps(summary, indent=2)) # Gửi đến AI để diễn giải print("\n🤖 Đang query HolySheep AI...") interpretation = analyzer.query_ai_interpretation(summary) print("\n📝 AI Interpretation:") print(interpretation)

Phân Tích Funding Rate Và Dự Đoán Đảo Chiều

Funding rate là chỉ báo quan trọng để xác định động lực thị trường. Khi funding rate quá cao (positive), đa số traders đang long — đây có thể là tín hiệu sắp correction. Ngược lại, funding rate âm sâu cho thấy áp lực short đang tích tụ.

# funding_rate_analysis.py
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import requests

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"

class FundingRateAnalyzer:
    """
    Phân tích Funding Rate để dự đoán đảo chiều thị trường
    """
    
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = HOLYSHEEP_BASE_URL
    
    def load_funding_data(self, csv_path):
        """Load dữ liệu funding rate từ Tardis CSV"""
        df = pd.read_csv(csv_path)
        
        # Convert timestamp nếu cần
        if 'timestamp' in df.columns:
            df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
        elif 'date' in df.columns:
            df['datetime'] = pd.to_datetime(df['date'])
        
        return df
    
    def calculate_funding_metrics(self, df, symbol):
        """Tính các metrics quan trọng từ funding rate"""
        
        symbol_data = df[df['symbol'] == symbol].copy()
        
        if len(symbol_data) == 0:
            return None
        
        # Sort theo thời gian
        symbol_data = symbol_data.sort_values('datetime')
        
        # Funding rate columns: symbol, timestamp, funding_rate, mark_price, index_price
        
        metrics = {
            'symbol': symbol,
            'total_observations': len(symbol_data),
            'date_range': f"{symbol_data['datetime'].min()} to {symbol_data['datetime'].max()}",
            
            # Basic stats
            'mean_funding': symbol_data['funding_rate'].mean(),
            'median_funding': symbol_data['funding_rate'].median(),
            'std_funding': symbol_data['funding_rate'].std(),
            'min_funding': symbol_data['funding_rate'].min(),
            'max_funding': symbol_data['funding_rate'].max(),
            
            # Current funding
            'current_funding': symbol_data['funding_rate'].iloc[-1],
            
            # Funding trend (7-day)
            'funding_7d_avg': symbol_data['funding_rate'].tail(7).mean(),
            'funding_30d_avg': symbol_data['funding_rate'].tail(30).mean(),
            
            # Funding regime
            'positive_pct': (symbol_data['funding_rate'] > 0).mean() * 100,
            'extreme_positive_pct': (symbol_data['funding_rate'] > 0.01).mean() * 100,  # >1% là extreme
            'extreme_negative_pct': (symbol_data['funding_rate'] < -0.01).mean() * 100,
            
            # Historical extremes
            'times_above_1pct': (symbol_data['funding_rate'] > 0.01).sum(),
            'times_below_neg1pct': (symbol_data['funding_rate'] < -0.01).sum(),
        }
        
        return metrics
    
    def detect_funding_regime_change(self, df, symbol, threshold=0.005):
        """
        Phát hiện thay đổi regime của funding rate
        Regime change = funding chuyển từ âm sang dương hoặc ngược lại đột ngột
        """
        symbol_data = df[df['symbol'] == symbol].copy().sort_values('datetime')
        
        if 'funding_rate' not in symbol_data.columns:
            return []
        
        changes = []
        
        for i in range(1, len(symbol_data)):
            prev_rate = symbol_data['funding_rate'].iloc[i-1]
            curr_rate = symbol_data['funding_rate'].iloc[i]
            
            # Regime change: từ âm sang dương hoặc dương sang âm với magnitude lớn
            if (prev_rate < 0 and curr_rate > threshold) or (prev_rate > 0 and curr_rate < -threshold):
                changes.append({
                    'datetime': symbol_data['datetime'].iloc[i],
                    'previous_rate': prev_rate,
                    'current_rate': curr_rate,
                    'change_type': 'neg_to_pos' if curr_rate > 0 else 'pos_to_neg',
                    'magnitude': abs(curr_rate - prev_rate)
                })
        
        return changes
    
    def calculate_funding_premium(self, df, symbol):
        """
        Tính Funding Premium = Chênh lệch funding rate giữa perpetual và quarterly
        Premium cao = funding demand cao, có thể预示rekt
        """
        # Lấy perpetual funding
        perp_data = df[df['symbol'].str.contains('PERP', case=False, na=False)]
        perp_funding = perp_data['funding_rate'].mean()
        
        # Lấy quarterly futures funding (nếu có)
        quarterly_data = df[df['symbol'].str.contains('-.*-[0-9]{2,4}', case=False, na=False)]
        quarterly_funding = quarterly_data['funding_rate'].mean() if len(quarterly_data) > 0 else 0
        
        premium = perp_funding - quarterly_funding
        
        return {
            'perp_avg_funding': perp_funding,
            'quarterly_avg_funding': quarterly_funding,
            'funding_premium': premium,
            'premium_significance': 'High' if abs(premium) > 0.005 else 'Normal'
        }
    
    def generate_signals(self, df, symbols):
        """
        Tạo trading signals dựa trên funding rate analysis
        """
        signals = []
        
        for symbol in symbols:
            metrics = self.calculate_funding_metrics(df, symbol)
            
            if metrics:
                signal = {
                    'symbol': symbol,
                    'signal': 'NEUTRAL',
                    'confidence': 0,
                    'reasoning': []
                }
                
                # Signal 1: Extreme positive funding (potential top)
                if metrics['current_funding'] > 0.01:
                    signal['signal'] = 'BEARISH'
                    signal['confidence'] += 30
                    signal['reasoning'].append("Funding rate > 1% - traders đang trả phí funding cao để hold long")
                
                # Signal 2: Funding đang tăng nhanh
                if metrics['funding_7d_avg'] > metrics['funding_30d_avg'] * 1.5:
                    signal['signal'] = 'BEARISH'
                    signal['confidence'] += 20
                    signal['reasoning'].append("Funding rate đang tăng nhanh - momentum bullish có thể suy yếu")
                
                # Signal 3: Extreme negative funding (potential bottom)
                if metrics['current_funding'] < -0.01:
                    signal['signal'] = 'BULLISH'
                    signal['confidence'] += 30
                    signal['reasoning'].append("Funding rate < -1% - traders đang được trả tiền để hold short")
                
                # Signal 4: Funding chuyển từ âm sang dương
                changes = self.detect_funding_regime_change(df, symbol)
                recent_changes = [c for c in changes if (datetime.now() - c['datetime']).days <= 3]
                if any(c['change_type'] == 'neg_to_pos' for c in recent_changes):
                    signal['signal'] = 'BEARISH'
                    signal['confidence'] += 25
                    signal['reasoning'].append("Funding vừa chuyển từ âm sang dương - short squeeze có thể xảy ra")
                
                signals.append(signal)
        
        return signals
    
    def get_ai_trading_recommendation(self, signals, market_context=None):
        """
        Sử dụng HolySheep AI để đưa ra khuyến nghị trading
        Model DeepSeek V3.2: chỉ $0.42/MTok - tiết kiệm 85%+
        """
        prompt = f"""
        Bạn là chuyên gia phân tích thị trường phái sinh tiền mã hóa.
        
        Dữ liệu Funding Rate Signals:
        {signals}
        
        Market Context (nếu có):
        {market_context}
        
        Hãy phân tích:
        1. Tổng quan signals: đa số bullish hay bearish?
        2. Confidence level của signals hiện tại
        3. Khuyến nghị trading cụ thể: Entry, Stop Loss, Take Profit
        4. Risk/Reward ratio
        5. Timeframe phù hợp (scalp, swing, position)
        6. Cảnh báo rủi ro quan trọng
        
        Trả lời bằng tiếng Việt, có cấu trúc rõ ràng.
        """
        
        response = requests.post(
            f"{self.base_url}/chat/completions",
            headers={
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json"
            },
            json={
                "model": "deepseek-chat-v3.2",
                "messages": [
                    {"role": "system", "content": "Bạn là chuyên gia phân tích phái sinh tiền mã hóa với kinh nghiệm 10 năm."},
                    {"role": "user", "content": prompt}
                ],
                "temperature": 0.2,
                "max_tokens": 2500
            },
            timeout=30
        )
        
        if response.status_code == 200:
            return response.json()['choices'][0]['message']['content']
        else:
            raise Exception(f"HolySheep API Error: {response.status_code}")

=== SỬ DỤNG ===

if __name__ == "__main__": analyzer = FundingRateAnalyzer(api_key=HOLYSHEEP_API_KEY) # Load dữ liệu funding_df = analyzer.load_funding_data('./tardis_derivatives/funding_binance_jan.csv') # Phân tích từng cặp symbols = ['BTC-PERP', 'ETH-PERP', 'SOL-PERP'] print("=== Funding Rate Analysis ===\n") for symbol in symbols: metrics = analyzer.calculate_funding_metrics(funding_df, symbol) if metrics: print(f"\n📊 {symbol}:") print(f" Current Funding: {metrics['current_funding']*100:.4f}%") print(f" 7D Average: {metrics['funding_7d_avg']*100:.4f}%") print(f" 30D Average: {metrics['funding_30d_avg']*100:.4f}%") print(f" Extreme Events: {metrics['times_above_1pct']} up, {metrics['times_below_neg1pct']} down") # Tạo signals signals = analyzer.generate_signals(funding_df, symbols) # Get AI recommendation print("\n\n🤖 Đang query HolySheep AI...") recommendation = analyzer.get_ai_trading_recommendation(signals) print("\n📝 AI Trading Recommendation:") print(recommendation)

Tích Hợp Đồng Thời Options Chain + Funding Rate

Điểm mạnh của phân tích toàn diện là kết hợp cả Options và Funding Rate để có cái nhìn 360°. Khi cả hai indicators cùng đưa ra tín hiệu giống nhau, confidence cao hơn đáng kể.

# combined_analysis_dashboard.py
import pandas as pd
import numpy as np
import requests
import json
from datetime import datetime

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"

class CombinedDerivativesDashboard:
    """
    Dashboard phân tích kết hợp Options + Funding Rate
    Đưa ra composite signals với độ chính xác cao hơn
    """
    
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = HOLYSHEEP_BASE_URL
    
    def calculate_composite_sentiment(self, options_metrics, funding_metrics):
        """
        Tính Composite Sentiment Score từ cả Options và Funding
        Score range: -100 (extremely bearish) to +100 (extremely bullish)
        """
        sentiment_score = 0
        factors = []
        
        # === OPTIONS FACTORS ===
        
        # PCR > 1.5 = bearish cho spot market = bullish signal cho short
        if 'oi_ratio' in options_metrics:
            pcr = options_metrics['oi_ratio']
            if pcr > 1.5:
                sentiment_score += 20
                factors.append(f"PCR={pcr:.2f} (Bearish sentiment, expecting drop)")
            elif pcr < 0.7:
                sentiment_score -= 20
                factors.append(f"PCR={pcr:.2f} (Bullish sentiment, expecting rally)")
        
        # Max Pain analysis
        if 'max_pain' in options_metrics:
            factors.append(f"Max Pain: {options_metrics['max_pain']}")
        
        # Net Delta Exposure
        if 'delta_total' in options_metrics:
            delta_total = options_metrics['delta_total']
            if delta_total > 0:
                sentiment_score += 15
                factors.append(f"Positive Delta Exposure (+{delta_total:.2f})")
            else:
                sentiment_score -= 15
                factors.append(f"Negative Delta Exposure ({delta_total:.2f})")
        
        # === FUNDING FACTORS ===
        
        # Funding rate analysis
        if 'current_funding' in funding_metrics:
            curr_funding = funding_metrics['current_funding']
            if curr_funding > 0.005:  # >0.5%
                sentiment_score -= 25
                factors.append(f"High Funding Rate ({curr_funding*100:.2f}%) - Longs paying premium")
            elif curr_funding < -0.005:  # <-0.5%
                sentiment_score += 25
                factors.append(f"Low Funding Rate ({curr_funding*100:.2f}%) - Shorts paying premium")
        
        # Funding trend
        if 'funding_7d_avg' in funding_metrics and 'funding_30d_avg' in funding_metrics:
            funding_trend = funding_metrics['funding_7d_avg'] / funding_metrics['funding_30d_avg']
            if funding_trend > 1.5:
                sentiment_score -= 15
                factors.append("Funding trending up - momentum weakening")
            elif funding_trend < 0.5:
                sentiment_score += 15
                factors.append("Funding trending down - momentum building")
        
        # Normalize score to -100 to +100
        sentiment_score = max(-100, min(100, sentiment_score))
        
        return {
            'score': sentiment_score,
            'interpretation': self