Copy trading EA
- Asesores Expertos
- Dimitar Shuytsov
- Versión: 1.3
- Actualizado: 16 abril 2026
- Activaciones: 5
# DS_Copy_EA - Descripción del usuario
DS_Copy_EA es un Asesor Experto de MetaTrader 5 que copia operaciones entre terminales MT5 que se ejecutan en la misma máquina. Una instancia del EA actúa como **Proveedor** (fuente de la señal) y otra actúa como **Receptor** (copiador). El modo se selecciona en la configuración del EA.
**Cómo funciona
1. El **Proveedor** publica internamente sus posiciones abiertas cada 500ms.
2. El **Receptor** lee cada 1 segundo, detecta las posiciones nuevas/cambiadas/cerradas, y las refleja en su propia cuenta
3. Comunicación interna - sin red, sin latencia, sin servicios externos
**Capacidades clave
- Copia de hasta 3 proveedores simultáneamente en un receptor
- Porcentaje de copia por proveedor (por ejemplo, copia el 10% del tamaño del lote del proveedor)
- Asignación de símbolos por proveedor con comodines (por ejemplo, EURUSD en el proveedor = EURUSDx en el receptor)
- Hard stop: cierre automático si el valor diario cae por encima de un umbral.
- Protección de márgenes, filtros de diferenciales, lógica de reintento
- Cuadro de mandos que muestra el estado en tiempo real
- Sobrevive a los reinicios del EA (reconstruye el seguimiento de posiciones a partir de números mágicos)
### Paso 1: Configurar el proveedor
1. Abra el terminal MT5 donde opera la fuente de la señal
2. Arrastre `DS_Copy_EA` a cualquier gráfico
3. En el diálogo de configuración:
- Modo AE** = `Proveedor (Fuente de señal)`.
- **Identificador de Proveedor** = cualquier nombre único, por ejemplo `MiSeñal`.
- Deje los demás ajustes en los valores predeterminados
4. 4. Pulse Aceptar.
5. El panel de control debe mostrar "Publishing: N positions" donde N coincide con sus operaciones abiertas.
### Paso 2: Configurar el receptor
1. 1. Abra el terminal MT5 donde desea copiar las operaciones.
2. Arrastre `DS_Copy_EA` a cualquier gráfico
3. En el diálogo de configuración:
- **Modo EA** = `Receptor (Copiador)`
- ID del Proveedor 1** = exactamente el mismo nombre que utilizó en el Proveedor, por ejemplo `MiSeñal`.
- **Provider 1 copy %** = qué parte del lote del proveedor copiar (por ejemplo, 50 = la mitad)
- **Mapa de símbolos del proveedor 1** = cómo traducir los símbolos (ver Mapa de símbolos más abajo)
4. 4. Haga clic en OK
5. Las posiciones existentes del proveedor deberían empezar a copiarse en cuestión de segundos
### Paso 3: Verificar
- **Panel del proveedor**: muestra "Publicando: N posiciones" y "Posiciones en cuenta: N"
- Tablero del receptor**: muestra al proveedor como "LIVE", recuento de posiciones copiadas, equity/drawdown
- Pestaña Expertos** (Ctrl+E): muestra los mensajes de registro de cada acción de copia/cierre.
**Importante**: Ambos terminales deben estar funcionando en la misma máquina. El ID del proveedor debe coincidir exactamente entre el proveedor y el receptor (los espacios en blanco y los caracteres no válidos se eliminan automáticamente).
---
## Referencia de configuración
### Modo EA
| Parámetro Predeterminado Descripción
|-----------|---------|-------------|
### Modo EA | Receptor (Copiadora) | Seleccione el modo Proveedor o Receptor | .
### Configuración del proveedor (sólo modo proveedor)
| Parámetro por defecto Descripción
|-----------|---------|-------------|
| ID de proveedor | PROVIDER_1 | Nombre único para este proveedor. Debe coincidir en el lado del receptor. |
| Intervalo de escritura del archivo (ms) | 500 | Frecuencia de actualización del archivo compartido. Menor = más rápido pero más E/S de disco. |
| Sólo publicar estos símbolos | *(vacío)* | Filtro: sólo publicar posiciones en estos símbolos. Separados por punto y coma. Vacío = publicar todo. |
| Sólo publicar posiciones con magia específica | false | Filtro: sólo publicar posiciones con un número de magia específico. |
| Número mágico por el que filtrar | 0 | El número mágico a filtrar. Sólo se utiliza si lo anterior es cierto. |
### Receptor: Proveedor 1/2/3
Cada ranura de proveedor tiene estos ajustes:
| Parámetro | Predeterminado | Descripción | .
|-----------|---------|-------------|
| ID del proveedor PROVIDER_1 / *(vacío)* / *(vacío)* ID del proveedor al que suscribirse. Vacío = ranura desactivada. |
| Copiar % del lote | 100.0 | Porcentaje del tamaño del lote del proveedor a copiar. 100 = mismo tamaño, 50 = la mitad, 200 = el doble. |
| Posiciones máximas | 20 | Posiciones máximas a copiar de este proveedor. |
| Mapa de símbolos | `*=*` | Reglas de mapeo de símbolos para este proveedor. Consulte Mapa de símbolos más abajo. |
### Gestión de riesgos (sólo receptor)
| Parámetro Predeterminado Descripción
|-----------|---------|-------------|
| Cerrar TODAS las posiciones si la equidad cae este % desde la equidad de inicio del día. 0 = desactivado. |
| Nivel de margen mínimo % | 150.0 | No abrir nuevas posiciones si el nivel de margen cae por debajo de este valor. 0 = desactivado. |
| Spread máximo (pips) 0 | Omitir copia si el spread excede este valor. 0 = desactivado (sin filtro de spread). |
| Deslizamiento máximo (puntos) | 300 | Deslizamiento máximo permitido al abrir/cerrar posiciones. |
| Máximo de posiciones totales: 100. Límite máximo de posiciones copiadas en todos los proveedores. |
### Timing
| Parámetro | Predeterminado | Descripción | Parámetro | Predeterminado | Descripción | Parámetro | Predeterminado | Descripción
|-----------|---------|-------------|
| Intervalo de sondeo (ms) | 1000 | Frecuencia con la que el receptor comprueba los archivos del proveedor. Menor = reacción más rápida, más CPU. |
| Heartbeat timeout (sec) | 30 | Si el archivo del proveedor no ha sido actualizado en esta cantidad de segundos, considérelo desconectado. |
| Inicio de horas de comercio | *(vacío)* | Sólo copiar durante estas horas. Formato: HH:MM. Vacío = 24 horas. |
| Fin del horario de negociación *(vacío)* Fin del horario de negociación. Admite rangos nocturnos (por ejemplo, inicio=22:00, fin=06:00). |
### Comportamiento (sólo receptor)
| Parámetro | Predeterminado | Descripción | Parámetro | Predeterminado | Descripción | Parámetro | Predeterminado | Descripción
|-----------|---------|-------------|
| Al desconectarse el proveedor | Mantener posiciones abiertas | Qué hacer cuando el heartbeat de un proveedor se queda obsoleto. Opciones: Mantener / Cerrar inmediatamente / Cerrar tras retardo. |
| Retardo de cierre por desconexión (seg) | 300 | Cuánto tiempo esperar antes de cerrar posiciones de un proveedor desconectado (si se selecciona Cerrar tras retardo). |
| Copiar stop loss | Verdadero | Reflejar el stop loss del proveedor en las posiciones copiadas. |
| Copiar toma de beneficios | Verdadero | Reflejar la toma de beneficios del proveedor en las posiciones copiadas. |
| Max reintentos | 10 | Cuantas veces reintentar una orden fallida antes de abandonar. |
| Retraso entre reintentos (ms) | 3000 | Tiempo de espera entre reintentos. |
| Cierre confirmar segundos | 3 | Una posición debe estar ausente del fichero de proveedores durante este número de segundos antes de cerrarse. Protege contra carreras de escritura en el archivo. |
| Una posición debe estar ausente durante este número de lecturas consecutivas del archivo antes de cerrarse. |
| Cerrar todo al eliminar el EA | Falso | Si es verdadero, cierra todas las posiciones copiadas cuando el EA es eliminado del gráfico. |
### Identificación (sólo receptor)
| Parámetro | Por defecto | Descripción | Parámetro | Por defecto | Descripción
|-----------|---------|-------------|
| Número mágico base | 900000 | Base para la codificación del número mágico. Cada proveedor recibe un offset: Proveedor 1 = 901000, Proveedor 2 = 902000, Proveedor 3 = 903000. |
### Visualización y registro
| Parámetro por defecto Descripción
|-----------|---------|-------------|
| Mostrar panel de control | true | Mostrar el panel de estado en el gráfico. |
| Activar registro de archivos | true | Escribir archivos de registro en la carpeta Archivos comunes. |
| Nivel de registro | 1 | 0 = Desactivado, 1 = Información (normal), 2 = Depuración (detallado - para solucionar problemas). |
---
## Guía de Asignación de Símbolos
Cada proveedor tiene sus propias reglas de asignación de símbolos. El formato es `SOURCE=DESTINATION` pares separados por punto y coma.
### Sintaxis básica
```
EURUSD=EURUSDx;GBPUSD=GBPUSDx;XAUUSD=XAUUSDx
```
Esto asigna `EURUSD` del proveedor a `EURUSDx` del receptor, etc. Los símbolos que no aparecen en la lista pasan sin cambios.
### Sintaxis de comodines
Utilice `*` como comodín para crear reglas que coincidan con varios símbolos:
| Regla Significado Ejemplo
|------|---------|---------|
EURUSD -> EURUSD | "*=*" | Sin cambios | EURUSD -> EURUSD | EURUSD
| Añadir "x" a todos los símbolos EURUSD -> EURUSDx
| Añadir ".p" a todos los símbolos EURUSD -> EURUSD.p
| `*.s=*` | Eliminar el sufijo ".s" | EURUSD.s -> EURUSD | EURUSD.p
| `*.raw=*.p` | Sustituir ".raw" por ".p" | EURUSD.raw -> EURUSD.p | EURUSD.p
### Mezcla de reglas exactas y comodines
Las coincidencias exactas siempre tienen prioridad sobre los comodines, independientemente del orden:
```
*=*x;BTCUSD=BTCUSD
```
| Símbolo del proveedor Regla coincidente Símbolo del receptor
|----------------|--------------|-----------------|
| EURUSD `*=*x` (comodín) EURUSDx
| GBPUSD: `*=*x` (comodín) GBPUSDx
| XAUUSD: `*=*x` (comodín) XAUUSDx
| BTCUSD `BTCUSD=BTCUSD` (exacto) BTCUSD
Otro ejemplo - el proveedor utiliza el sufijo `.s`, pero el oro tiene un nombre diferente:
```
XAUUSD.s=ORO;*.s=*
```
| Símbolo del proveedor Regla coincidente Símbolo del receptor
|----------------|--------------|-----------------|
| EURUSD: EURUSD: EURUSD: EURUSD: EURUSD: EURUSD.s: `*.s=*` (comodín)
| XAUUSD.s: `XAUUSD.s=GOLD` (exacto): GOLD
| GBPUSD.s `*.s=*` (comodín) GBPUSD
### Por defecto
La asignación por defecto es `*=*`, lo que significa que todos los símbolos pasan sin cambios. Esto funciona cuando ambas cuentas utilizan el mismo broker con los mismos nombres de símbolos.
---
## Características de Seguridad
### Hard Stop (Protección de Renta Variable Diaria)
Controla la equidad de la cuenta contra la equidad inicial del día. Si la reducción supera el umbral configurado, TODAS las posiciones copiadas se cierran inmediatamente y no se abren nuevas posiciones hasta el siguiente día de negociación.
- Umbral**: configurable (por defecto 50%)
- Reinicio**: automático al inicio de cada nuevo día de negociación.
- Tablero**: muestra "Hard Stop: ARMADO" (verde) o "HARD STOP: ACTIVADO" (rojo)
- Alerta**: Alerta emergente MT5 cuando se activa
Ejemplo: El día comienza con un capital de 10.000 $, el hard stop al 50%. Si la equidad cae a $5,000, todas las posiciones se cierran.
### Protección de Margen
Antes de cada operación, el EA comprueba:
1. 1. ¿Hay suficiente margen libre para esta posición?
2. ¿El nivel de margen proyectado se mantendría por encima del umbral mínimo (por defecto 150%)?
Si alguna de estas comprobaciones falla, la posición se omite (no se vuelve a intentar por margen).
### Confirmación de Cierre
Cuando una posición desaparece del fichero de proveedores, el receptor NO cierra inmediatamente. En su lugar
1. Marca la posición como "desaparecida" e inicia un temporizador.
2. Debe estar ausente durante 3 lecturas consecutivas del fichero Y 3 segundos (configurable)
3. Si la posición reaparece durante la confirmación, los contadores se reinician - la posición permanece abierta
4. Si el latido del proveedor es antiguo, las comprobaciones de cierre se omiten por completo (datos no fiables).
Esto evita falsos cierres durante operaciones rápidas o carreras de escritura de archivos.
### Lógica de reintento
Si una orden falla (recotización, tiempo de espera, servidor ocupado), el EA reintenta hasta 10 veces con un retraso de 3 segundos entre intentos. Los errores no reintentables (sin dinero, volumen inválido, trading desactivado) se detienen inmediatamente.
### Protección Anti-Flood
- Mínimo 500ms entre envíos de órdenes (limitación de velocidad)
- Enfriamiento de 5 segundos entre modificaciones de volumen en la misma posición
- Nunca vuelve a copiar una posición ya rastreada
- El intervalo de sondeo evita lecturas excesivas de archivos (por defecto 1 segundo)
### Resincronización del volumen
Si el porcentaje de copia se modifica mientras las posiciones están abiertas, el EA cierra las posiciones afectadas y las reabre con el volumen correcto en el siguiente ciclo. Esto evita el bucle infinito de "añadir volumen" que se produciría en el modo de cobertura.
### Latido del Proveedor
El receptor realiza un seguimiento de cuándo se actualizó por última vez el fichero de cada proveedor. Si el fichero de un proveedor no se ha actualizado en 30 segundos (configurable), se marca como desconectado. El cuadro de mandos muestra "MUERTO" en rojo. El receptor no cerrará posiciones basándose en datos de ficheros obsoletos.
---
## Cuadro de mandos
### Cuadro de Mando en Modo Proveedor
```
--- DS COPY EA [PROVEEDOR] ---
ID Proveedor: MySignal
Cuenta 12345678 BrokerServer
Posiciones en cuenta: 4
Publicación: 4 posiciones
Filtros: Ninguno (todas las posiciones)
Archivo: CopyTrade_Provider_MySignal.csv
Última actualización: 14:30:45
```
- **Posiciones en cuenta**: total de posiciones detectadas por `PositionsTotal()` - diagnóstico
- **Publicación**: cuántas han pasado los filtros y se han escrito en el fichero
- **Filtros**: muestra los filtros de símbolos/mágicos activos (o "Ninguno")
- Archivo**: el nombre del archivo CSV que se está escribiendo
### Panel de Modo Receptor
```
--- DS COPY EA [RECEIVER] ---
Capital: 10250.00 Saldo: 10000.00
Nivel de margen: 450.2%
Reducción: 2.5% / 50% DayStart: 10512.00
Hard Stop: ARMADO
Posiciones Copiadas: 5
PROVEEDOR_1: LIVE Copiado: 50% Pos: 3
Latido: hace 2s
PROVEEDOR_2: Copia EN VIVO: 100% Pos: 2
Latido: hace 1s
Último: (último mensaje de error si lo hay)
```
-
## Solución de problemas
### El proveedor muestra "Publicando: 0 posiciones" pero tengo operaciones abiertas
1. Compruebe **Posiciones en la cuenta** en el panel de control - si también es 0, el EA no puede ver sus posiciones.
2. Compruebe si el filtro de símbolos o el filtro mágico están activos accidentalmente (mire en la línea **Filtros**)
3. Asegúrese de que "Allow Algo Trading" está activado en los ajustes de MT5.
4. 4. Ajuste el nivel de registro a 2 (Depuración) y compruebe la pestaña Expertos para una enumeración detallada de las posiciones.
### Receiver muestra "Cannot read provider file" (No se puede leer el archivo del proveedor)
1. **Provider ID mismatch**: el ID debe coincidir EXACTAMENTE entre Proveedor y Receptor (compruebe que no haya espacios)
2. 2. **Diferente carpeta de Archivos Comunes**: compruebe el registro de ambos terminales `Ruta de Archivos Comunes:` al inicio - deben ser los mismos.
3. 3. **Proveedor no ejecutándose**: asegúrese de que el EA del proveedor está conectado y activo.
4. ### Receiver reads file but shows 0 positions / stale heartbeat
```
ADVERTENCIA: Proveedor 'XYZ' heartbeat stale (45s) positions=0
```
1. El proveedor puede haber sido reiniciado o su ID ha cambiado.
2. 2. Todavía existe un archivo antiguo de una sesión anterior - borre `CopyTrade_Provider_*.csv` de la carpeta Common Files y reinicie ambos EAs.
3. El proveedor se está ejecutando con un ID diferente al que espera el receptor.
### Las posiciones no se copian
Establezca el nivel de registro en 2 (depuración) en el receptor y compruebe:
1. `Symbol map: EURUSD -> ???` - verifique que el nombre del símbolo mapeado es correcto
2. `Símbolo no negociable: XYZ` - el símbolo asignado no existe en el broker del receptor.
3. "Margen insuficiente": no hay margen suficiente para abrir la posición.
4. `Max total positions reached` - se ha alcanzado el límite de posiciones
5. Se ha alcanzado el límite de posiciones por proveedor.
### Posiciones cerradas inesperadamente
Compruebe en el log lo que provocó el cierre:
- Cierre confirmado: ... ausente para Xs` - el proveedor cerró la posición (o problema de lectura de fichero)
- Parada dura cerrada: la reducción de la renta variable activó la parada dura.
- `Volume resync closed:` - se ha modificado el porcentaje de copia, posición cerrada para reapertura
- Cierre de posiciones para un proveedor desconectado - tiempo de espera del heartbeat con acción de desconexión establecida en Cerrar
