--- id: "SETUP-MT4-TRADING" title: "Setup MT4 Trading - EBC Financial Group" type: "Documentation" project: "trading-platform" version: "1.0.0" updated_date: "2026-01-04" --- # Setup MT4 Trading - EBC Financial Group **Fecha:** 2025-12-12 **Estado:** Configuración Inicial **Broker:** EBC Financial Group (Demo) --- ## Resumen de Credenciales ### Polygon/Massive API (Datos de Mercado) ``` API_KEY: pxwp1peelaTqnKAGVCSEo2hHXVolpoT8 RATE_LIMIT: 5 requests/minuto (tier gratuito) BASE_URL: https://api.polygon.io ``` ### MT4 Demo Account (EBC) ``` SERVER: EBCFinancialGroupKY-Demo02 LOGIN: 22437 PASSWORD: AfcItz2391! BROKER: EBC Financial Group TIPO: Demo ``` --- ## Opciones de Conexión a MT4 Hay **3 opciones** para conectar con MT4 y ejecutar operaciones: ### Opción 1: MetaAPI.cloud (RECOMENDADA) MetaAPI es un servicio cloud que actúa como bridge hacia cualquier broker MT4/MT5. **Ventajas:** - No requiere terminal MT4 corriendo - API REST + WebSocket - Funciona en servidores cloud/VPS - Soporte para todos los brokers **Pasos de Configuración:** 1. **Crear cuenta en MetaAPI:** ``` https://app.metaapi.cloud/sign-up ``` 2. **Obtener API Token:** - Dashboard → Settings → API Access Tokens - Crear token con permisos: `full-access` - Guardar el token (solo se muestra una vez) 3. **Agregar cuenta MT4:** - Dashboard → Accounts → Add Account - Seleccionar: MetaTrader 4 - Llenar datos: ``` Name: Trading Platform Demo Login: 22437 Password: AfcItz2391! Server: EBCFinancialGroupKY-Demo02 Platform: mt4 Type: cloud-g2 (recomendado) ``` - Click "Add Account" - Esperar deployment (1-2 minutos) - Copiar el Account ID generado 4. **Configurar .env:** ```bash METAAPI_TOKEN=eyJ...tu_token_aqui METAAPI_ACCOUNT_ID=abc123...tu_account_id ``` 5. **Verificar conexión:** ```bash cd apps/data-service python -c " import asyncio from src.providers.metaapi_client import MetaAPIClient async def test(): client = MetaAPIClient() await client.connect() info = await client.get_account_info() print(f'Connected! Balance: {info.balance} {info.currency}') await client.disconnect() asyncio.run(test()) " ``` **Costo:** Gratis hasta 1 cuenta, luego desde $10/mes --- ### Opción 2: Expert Advisor Bridge (Sin costo adicional) Usar un EA (Expert Advisor) que expone una API local. **Requiere:** - Terminal MT4 corriendo 24/7 - VPS Windows (si quieres 24/7) **EAs Recomendados:** - MT4-to-REST (open source) - ZeroMQ-MT4 **Pasos:** 1. **Descargar terminal MT4:** ``` https://www.ebc.com/ebc-download-center ``` 2. **Login con credenciales demo** 3. **Instalar EA bridge:** - Copiar EA a: `MT4/MQL4/Experts/` - Reiniciar MT4 - Arrastrar EA al chart - Habilitar "Allow DLL imports" - Habilitar "Allow live trading" 4. **El EA expone API en:** ``` http://localhost:8080/api/... ``` --- ### Opción 3: Conexión TCP Directa (Avanzado) Conexión directa al servidor MT4 usando protocolo propietario. **NO RECOMENDADO** - Requiere: - Ingeniería reversa del protocolo - Mantenimiento complejo - Posibles bloqueos del broker --- ## Configuración de Pares de Trading ### Pares Iniciales (Prioridad) | Par | Polygon Symbol | MT4 Symbol | Spread Típico | Sesión Óptima | |-----|----------------|------------|---------------|---------------| | XAU/USD | C:XAUUSD | XAUUSD | 25-35 pips | London/NY | | EUR/USD | C:EURUSD | EURUSD | 0.8-1.5 pips | London/NY Overlap | | GBP/USD | C:GBPUSD | GBPUSD | 1.2-2.0 pips | London | | USD/JPY | C:USDJPY | USDJPY | 0.8-1.5 pips | Asian/London | ### Configuración Risk Management ```yaml # Para cuenta de $200 starter_config: max_risk_per_trade: 1% # = $2 máximo max_daily_loss: 5% # = $10 máximo max_open_positions: 1 allowed_pairs: [XAUUSD] # Solo oro inicialmente lot_size: 0.01 # Micro lot # Para cuenta de $1000 optimal_config: max_risk_per_trade: 2% # = $20 máximo max_daily_loss: 5% # = $50 máximo max_open_positions: 3 allowed_pairs: [XAUUSD, EURUSD, GBPUSD, USDJPY] lot_size_range: [0.01, 0.10] ``` --- ## Sincronización de Datos (Polygon) ### Rate Limiting Adaptado Con el tier gratuito de Polygon (5 req/min), la estrategia es: ```python # Configuración actual POLYGON_RATE_LIMIT=5 # 5 requests por minuto RATE_LIMIT_DELAY_SECONDS=12 # 60/5 = 12 segundos entre requests # Para 4 pares en sync: # - 1 request por par cada 5 minutos = factible # - Backfill histórico: ~48 segundos por día de datos ``` ### Script de Sync Inicial ```bash # Sync últimos 30 días para pares iniciales cd apps/data-service python -m src.main --backfill --days=30 --symbols=XAUUSD,EURUSD,GBPUSD,USDJPY ``` ### Sync Automático (Cronjob) ```bash # Agregar a crontab */5 * * * * cd /path/to/data-service && python -m src.main --sync ``` --- ## Verificación de Setup ### 1. Test Polygon API ```bash curl "https://api.polygon.io/v2/aggs/ticker/C:EURUSD/range/5/minute/2025-12-11/2025-12-12?apiKey=pxwp1peelaTqnKAGVCSEo2hHXVolpoT8" ``` Respuesta esperada: ```json { "ticker": "C:EURUSD", "status": "OK", "resultsCount": 288, "results": [...] } ``` ### 2. Test MT4 Connection (con MetaAPI) ```python import asyncio from src.providers.metaapi_client import MetaAPIClient async def test_mt4(): client = MetaAPIClient() await client.connect() # Info de cuenta info = await client.get_account_info() print(f"Balance: {info.balance}") print(f"Equity: {info.equity}") print(f"Leverage: {info.leverage}") # Tick actual tick = await client.get_tick("XAUUSD") print(f"XAUUSD Bid: {tick.bid}, Ask: {tick.ask}, Spread: {tick.spread}") await client.disconnect() asyncio.run(test_mt4()) ``` ### 3. Test Trade Execution (DEMO ONLY) ```python async def test_trade(): client = MetaAPIClient() await client.connect() # Abrir trade de prueba result = await client.open_trade( symbol="XAUUSD", order_type=OrderType.BUY, volume=0.01, # Micro lot sl=None, # Sin SL por ahora tp=None, # Sin TP por ahora comment="Test Trading Platform" ) if result.success: print(f"Trade abierto! Position ID: {result.position_id}") # Ver posiciones positions = await client.get_positions() for p in positions: print(f"Position: {p.symbol} {p.type} @ {p.open_price}") # Cerrar inmediatamente close_result = await client.close_position(result.position_id) print(f"Trade cerrado: {close_result.success}") else: print(f"Error: {result.error_message}") await client.disconnect() asyncio.run(test_trade()) ``` --- ## Próximos Pasos 1. **[ ] Crear cuenta MetaAPI.cloud** - Registrarse en https://app.metaapi.cloud - Agregar cuenta MT4 de EBC - Obtener token y account_id 2. **[ ] Verificar conexión Polygon** - Test del endpoint con curl - Verificar rate limiting 3. **[ ] Backfill datos históricos** - Ejecutar sync inicial para 4 pares - Verificar datos en PostgreSQL 4. **[ ] Test de trading en demo** - Abrir/cerrar trade de prueba - Verificar logging --- ## Troubleshooting ### Error: "Rate limit exceeded" (Polygon) - Reducir frecuencia de requests - El código ya tiene rate limiting de 5 req/min ### Error: "Account deployment failed" (MetaAPI) - Verificar credenciales MT4 - El servidor debe estar correcto - Intentar con tipo `cloud-g1` en lugar de `cloud-g2` ### Error: "Connection timeout" (MT4) - Verificar que el servidor está disponible - EBC servers pueden tener mantenimiento fines de semana ### Error: "Invalid volume" - El volumen mínimo es 0.01 lots - Verificar configuración del símbolo --- **Archivo de configuración:** `apps/data-service/.env` **Documentación MetaAPI:** https://metaapi.cloud/docs **Documentación Polygon:** https://polygon.io/docs