# Paper Trading Guide Guía completa para paper trading con Binance Testnet ## 1. Configuración de Binance Testnet ### Paso 1: Crear cuenta en Testnet 1. Ir a [https://testnet.binancefuture.com/](https://testnet.binancefuture.com/) 2. Hacer clic en "Register" (esquina superior derecha) 3. Crear cuenta con email (no requiere verificación real) 4. Iniciar sesión ### Paso 2: Obtener API Keys 1. Una vez logueado, ir a "API Management" 2. Hacer clic en "Generate HMAC_SHA256 Key" 3. Ingresar un nombre (ejemplo: "OrbiQuant Trading Bot") 4. Copiar el API Key y Secret Key 5. **IMPORTANTE:** Guardar el Secret Key - solo se muestra una vez ### Paso 3: Configurar permisos 1. En la configuración de la API key, habilitar: - ✓ Enable Reading - ✓ Enable Spot & Margin Trading - ✓ Enable Futures ## 2. Configuración Local ### Crear archivo .env ```bash cd apps/trading-agents cp .env.example .env ``` Editar `.env` con tus API keys: ```bash BINANCE_API_KEY=tu_api_key_aqui BINANCE_API_SECRET=tu_secret_key_aqui BINANCE_TESTNET=true ML_ENGINE_URL=http://localhost:8000 ML_ENGINE_API_KEY=dev_ml_key API_PORT=8003 API_HOST=0.0.0.0 ``` ## 3. Iniciar el Servicio ### Opción A: Local (Python) ```bash # Activar entorno virtual source venv/bin/activate # Instalar dependencias pip install -r requirements.txt # Iniciar servicio python -m src.api.main ``` ### Opción B: Docker ```bash # Construir imagen docker-compose build # Iniciar servicio docker-compose up -d # Ver logs docker-compose logs -f trading-agents ``` ## 4. Testing Básico ### Verificar conexión a Binance Testnet ```python import asyncio from src.exchange.binance_client import BinanceClient async def test_connection(): async with BinanceClient( api_key="tu_api_key", api_secret="tu_secret_key", testnet=True ) as client: # Test 1: Health check healthy = await client.health_check() print(f"Binance Testnet: {'✓ Connected' if healthy else '✗ Failed'}") # Test 2: Get account info account = await client.get_account_info() print(f"Account Balance: {account}") # Test 3: Get ticker price btc_price = await client.get_ticker_price("BTCUSDT") print(f"BTC Price: ${btc_price:.2f}") asyncio.run(test_connection()) ``` ## 5. Ejecutar Agente con Paper Trading ### Atlas Agent (Conservador) ```python import asyncio from src.agents.atlas import AtlasAgent from src.exchange.binance_client import BinanceClient async def run_atlas_paper_trading(): # 1. Crear cliente de Binance client = BinanceClient( api_key="tu_api_key", api_secret="tu_secret_key", testnet=True ) # 2. Verificar balance inicial async with client: balance = await client.get_balance() usdt_balance = next( (b for b in balance if b['asset'] == 'USDT'), None ) initial_equity = float(usdt_balance['availableBalance']) print(f"Initial USDT Balance: ${initial_equity:.2f}") # 3. Crear y iniciar agente agent = AtlasAgent(equity=initial_equity) await agent.start() print(f"\nAtlas Agent started") print(f"Max Drawdown: {agent.config.max_drawdown}%") print(f"Position Size: {agent.config.position_size_pct}%") print(f"Allowed Pairs: {agent.config.allowed_pairs}") # 4. Simular señal de trading btc_price = await client.get_ticker_price("BTCUSDT") signal = { 'symbol': 'BTCUSDT', 'action': 'buy', 'confidence': 0.85, 'price': btc_price } print(f"\nProcessing signal: BUY BTCUSDT @ ${btc_price:.2f}") await agent.on_signal(signal) # 5. Si el agente abrió posición, ejecutar en Binance Testnet if agent.positions: pos = agent.positions[0] print(f"\nPlacing order on Binance Testnet...") order = await client.place_market_order( symbol=pos.symbol, side='BUY', quantity=pos.quantity ) print(f"Order placed: {order}") # 6. Mostrar métricas metrics = agent.get_metrics() print(f"\nAgent Metrics:") for key, value in metrics.items(): print(f" {key}: {value}") await agent.stop() asyncio.run(run_atlas_paper_trading()) ``` ## 6. Monitoreo en Tiempo Real ### Usando la API ```bash # 1. Iniciar agente curl -X POST http://localhost:8003/agents/atlas/start \ -H "Content-Type: application/json" \ -d '{"agent_name": "atlas", "initial_equity": 1000.0}' # 2. Ver estado curl http://localhost:8003/agents/atlas/status # 3. Ver posiciones curl http://localhost:8003/agents/atlas/positions # 4. Ver métricas curl http://localhost:8003/agents/atlas/metrics ``` ## 7. Testing de Estrategias ### Mean Reversion ```python import asyncio import pandas as pd from src.strategies.mean_reversion import MeanReversionStrategy from src.exchange.binance_client import BinanceClient async def test_mean_reversion(): # Obtener datos históricos async with BinanceClient( api_key="tu_key", api_secret="tu_secret", testnet=True ) as client: # Get klines (candlestick data) klines = await client.get_klines("BTCUSDT", "1h", 100) # Convert to DataFrame df = pd.DataFrame(klines, columns=[ 'timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_volume', 'trades', 'taker_buy_base', 'taker_buy_quote', 'ignore' ]) df['close'] = df['close'].astype(float) df['high'] = df['high'].astype(float) df['low'] = df['low'].astype(float) # Test strategy strategy = MeanReversionStrategy({ 'sma_period': 20, 'std_multiplier': 2.0, 'rsi_period': 14 }) signal = strategy.generate_signal(df) if signal: print(f"Signal: {signal.signal_type.value}") print(f"Confidence: {signal.confidence:.2f}") print(f"Reason: {signal.reason}") else: print("No signal generated") asyncio.run(test_mean_reversion()) ``` ## 8. Mejores Prácticas ### 1. Empezar con montos pequeños ```python # Usar $100-$1000 para testing agent = AtlasAgent(equity=100.0) ``` ### 2. Monitorear métricas constantemente ```python # Verificar después de cada trade metrics = agent.get_metrics() print(f"Win Rate: {metrics['win_rate']:.2f}%") print(f"Drawdown: {metrics['current_drawdown']:.2f}%") ``` ### 3. Probar cada estrategia individualmente ```python # Test solo Mean Reversion agent.config.strategies = ['mean_reversion'] ``` ### 4. Usar stop loss y take profit ```python # Siempre definir límites position = Position( symbol="BTCUSDT", side="buy", quantity=0.01, entry_price=45000.0, stop_loss=44100.0, # -2% take_profit=45900.0 # +2% ) ``` ## 9. Troubleshooting ### Error: "Invalid API Key" ```bash # Verificar que las keys sean de Testnet # Las keys de producción NO funcionan en testnet # Regenerar keys si es necesario ``` ### Error: "Insufficient Balance" ```bash # Verificar balance en Binance Testnet # El testnet da $100,000 USDT virtuales al registrarse # Si se agotó, crear nueva cuenta de testnet ``` ### Error: "Symbol not found" ```bash # Verificar que el símbolo sea correcto # Formato: "BTCUSDT" (sin espacios ni guiones) # Lista de símbolos: client.get_exchange_info() ``` ## 10. Recursos Adicionales - [Binance Testnet](https://testnet.binancefuture.com/) - [Binance API Docs](https://binance-docs.github.io/apidocs/futures/en/) - [Trading Agents README](README.md) ## Notas Importantes 1. **NO usar API keys de producción en testnet** 2. **Testnet usa datos de mercado reales pero dinero virtual** 3. **Las órdenes en testnet NO afectan tu dinero real** 4. **Probar exhaustivamente antes de pasar a producción** 5. **Siempre usar límites de riesgo conservadores**