#!/usr/bin/env python3
"""
Filter and show only tradeable signals (near current price).

This removes stale signals from old order book levels.
"""

import json
import statistics
from pathlib import Path
from datetime import datetime

# Load signals
signals_file = Path("/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/data/signals_binance.json")
with open(signals_file, 'r') as f:
    data = json.load(f)

signals = data['signals']

# Get current price from recent signals (median)
entry_prices = [s['entry_price'] for s in signals]
current_price = statistics.median(entry_prices)

print("="*80)
print("TRADEABLE SIGNALS (Near Current Price)")
print("="*80)

print(f"\n📊 Current Market Price: ${current_price:.2f}")

# Filter: only show signals within ±$20 of current price
price_tolerance = 20
tradeable_signals = [
    s for s in signals
    if abs(s['entry_price'] - current_price) <= price_tolerance
]

print(f"📌 Price Tolerance: ±${price_tolerance}")
print(f"✅ Tradeable signals: {len(tradeable_signals)}")
print(f"❌ Filtered out: {len(signals) - len(tradeable_signals)} stale signals")

# Show best tradeable signals
print("\n" + "="*80)
print("🎯 BEST TRADEABLE SIGNALS (Confidence > 0.8, R:R > 2.0)")
print("="*80)

best_signals = [
    s for s in tradeable_signals
    if s['confidence'] > 0.8 and s['risk_reward'] > 2.0
]

best_signals.sort(key=lambda x: x['confidence'] * x['risk_reward'], reverse=True)

for i, sig in enumerate(best_signals[:10], 1):
    print(f"\n{i}. {sig['type']} - {sig['direction'].upper()}")
    print(f"   Entry: ${sig['entry_price']}, Target: ${sig['target_price']}, Stop: ${sig['stop_price']}")
    print(f"   Confidence: {sig['confidence']}, R:R: {sig['risk_reward']}")
    print(f"   {sig['reason']}")

# Save filtered signals
output_file = signals_file.parent / "signals_tradeable.json"

output_data = {
    'metadata': {
        'generated_at': datetime.now().isoformat(),
        'signal_count': len(tradeable_signals),
        'current_price': current_price,
        'price_tolerance': price_tolerance,
        'filtered_stale': len(signals) - len(tradeable_signals),
        'source': 'Filtered for tradeable signals only'
    },
    'signals': tradeable_signals
}

with open(output_file, 'w') as f:
    json.dump(output_data, f, indent=2)

print(f"\n✓ Saved tradeable signals to: {output_file}")
print(f"  Total: {len(tradeable_signals)} signals")
print(f"  Removed: {len(signals) - len(tradeable_signals)} stale signals")

print("\n" + "="*80)
