#!/usr/bin/env python3
"""
Test du trailing stop en simulation
"""
import sys
sys.path.insert(0, '/var/www/html/HyperOracle/crypto_trader/apollo_degen_bot')

from live_trader_v10_onchain import Position


def simulate_trailing_stop():
    """Simule un trade avec trailing stop"""

    print("="*80)
    print("🧪 TEST TRAILING STOP - Simulation")
    print("="*80)

    # Créer une position LONG
    position = Position(
        symbol='BTCUSD_DEGEN',
        side='LONG',
        entry_price=100000.0,
        margin_usd=50.0,
        leverage=250,
        strategy_name='V10_RANGE_REVERSAL',
        trade_hash='TEST_HASH',
        trailing_pct=0.05  # 5% trailing stop
    )

    print(f"\n📈 Position ouverte: LONG @ $100,000")
    print(f"   Margin: $50 | Leverage: 250x")
    print(f"   Trailing: 5%\n")

    # Simulation de prix
    prices = [
        100000,  # Entry
        100200,  # +0.2%
        100500,  # +0.5% (max)
        100400,  # +0.4% (pullback 20% depuis max = 0.5% -> 0.4% = 0.1%/0.5% = 20% < 5% trailing)
        100475,  # +0.475% (nouveau max)
        100450,  # +0.45% (pullback de 5.26% depuis max 0.475% -> devrait trigger!)
    ]

    for i, price in enumerate(prices):
        print(f"Cycle #{i+1}: Prix = ${price:,.0f}")

        # Update PnL
        position.update_pnl(price)

        print(f"   PnL actuel: {position.pnl_pct*100:+.3f}%")
        print(f"   Max PnL: {position.max_pnl_pct*100:+.3f}%")

        if position.trailing_stop_active:
            pullback = (position.max_pnl_pct - position.pnl_pct) / position.max_pnl_pct
            print(f"   Pullback: {pullback*100:.1f}% (seuil: 5%)")

        # Check trailing stop
        if position.should_close_trailing():
            print(f"\n   🎯 TRAILING STOP DÉCLENCHÉ!")
            print(f"      → Max atteint: {position.max_pnl_pct*100:+.3f}%")
            print(f"      → PnL actuel: {position.pnl_pct*100:+.3f}%")
            print(f"      → Pullback: {((position.max_pnl_pct - position.pnl_pct)/position.max_pnl_pct)*100:.1f}%")
            print(f"      → PnL USD: ${position.pnl:+.2f}")
            print(f"\n   ✅ Position fermée par trailing stop")
            break

        print()

    print("="*80)


if __name__ == '__main__':
    simulate_trailing_stop()
