Changes include: - Updated architecture documentation - Enhanced module definitions (OQI-001 to OQI-008) - ML integration documentation updates - Trading strategies documentation - Orchestration and inventory updates - Docker configuration updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
346 lines
7.8 KiB
Markdown
346 lines
7.8 KiB
Markdown
---
|
|
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: OrbiQuant 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 OrbiQuant"
|
|
)
|
|
|
|
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
|