Angora Risk Guardian
- Utilidades
-
AYDIN DEMIREL
I'm an engineer and I'm working as a system engineer in a software company. I'm fourty years old. - Versión: 1.21
- Activaciones: 5
Plataforma: MetaTrader 5 / MQL5. Tipo: Asesor experto (utilidad). No requiere servidor externo; el único tráfico de red son las notificaciones opcionales de Telegram. Ámbito de aplicación: toda la cuenta (todos los símbolos, todos los números mágicos). Se ejecuta una instancia por cuenta.
1. Definiciones básicas
| Término | Definición |
|---|---|
| Hora del servidor | TimeTradeServer(). Todos los cálculos diarios utilizan la hora del servidor del bróker, no el reloj del ordenador local. |
| Día de negociación | Desde la hora de inicio de la jornada bursátil (dato de entrada, por defecto 00:00) en hora del servidor hasta la misma hora del día siguiente. Ejemplo: si una empresa de inversión utiliza la medianoche CET y el servidor está en GMT+3, introduce 1. |
| Cambio de día | El EA realiza el rollover diario la primera vez que su temporizador de 500 ms detecta el inicio del nuevo día. Se restablecen los indicadores diarios de incumplimiento y advertencia, se registra el P/L del día anterior en el CSV y se guardan los valores de inicio de la jornada. |
| Patrimonio neto | ACCOUNT_EQUITY − ACCOUNT_CREDIT. El crédito o bonificación del bróker se excluye de los cálculos de riesgo. |
| Flujo de capital | Operaciones DEAL_TYPE_BALANCE (ingresos/retiradas). No se contabilizan como pérdidas y ganancias. Se ignoran los tipos CREDIT y BONUS. |
| P/L realizado | Suma de las ganancias + swap + comisión + gastos de todas las operaciones de hoy (comisiones de apertura incluidas). |
| P/L flotante | Suma de POSITION_PROFIT + POSITION_SWAP de las posiciones abiertas. No se incluye la comisión de cierre que aún no se haya cobrado. |
2. Pérdida diaria
El saldo al inicio de la jornada siempre se reconstruye con exactitud a partir del historial: StartOfDayBalance = CurrentBalance − TodayRealizedPL − TodayCapitalFlow. De este modo, se garantiza su exactitud incluso si el EA se inicia a mitad de la jornada o si se reinicia la terminal.
Modo de referencia (entrada):
- Saldo inicial del día (por defecto): el valor anterior. Las pérdidas no realizadas de una posición mantenida más allá de la medianoche se contabilizan como pérdidas del nuevo día.
- Patrimonio inicial del día: patrimonio neto calculado en el momento del cambio de día. Si el EA no se estaba ejecutando en ese momento, no se puede calcular; en su lugar, se utiliza el saldo inicial del día, el panel muestra «(estimado)» y se escribe REF_ESTIMATED en el CSV.
- El mayor de los dos: la norma utilizada por muchas empresas de inversión propia.
P/L diario = Patrimonio neto − (Referencia + Flujo de capital de hoy). Se incluyen las pérdidas en flotación. Pérdida diaria = máx(0, −P/L diario). Límite = mín(Referencia × % de límite, Límite de importe fijo); un límite establecido en cero queda desactivado.
Un incumplimiento diario se mantiene hasta el final de la jornada: aunque el patrimonio se recupere, el día sigue en situación de incumplimiento.
3. Caída máxima
- Desde el saldo máximo (acumulativo): el máximo solo aumenta con las operaciones cerradas (saldo); la regla de muchos retos de un solo paso.
- Desde el patrimonio máximo (móvil) (por defecto): Máximo = patrimonio neto más alto registrado (incluido el patrimonio flotante, persistente). DD = Máximo − PatrimonioNet, el límite es un porcentaje del máximo.
- Desde el saldo inicial (estático): DD = SaldoInicial − CapitalNeto. El saldo inicial es un valor introducido; si es 0, se almacena el saldo de la primera ejecución.
- Los depósitos y retiradas (si se producen mientras el EA está en ejecución) modifican el máximo y el saldo inicial en la misma cantidad.
- Un exceso de DD queda registrado y nunca se restablece automáticamente; para restablecerlo, vuelve a vincularlo con «Restablecer exceso de DD» y «pico = true».
4. Seguimiento de la exposición y el riesgo
- Riesgo de la posición (hasta el SL) = PL flotante − PL en el SL (mediante «OrderCalcProfit»; la terminal se encarga de la conversión del valor del contrato/tick y de la divisa de la cuenta). El riesgo es 0 para un SL bloqueado en beneficios.
- Riesgo de una orden pendiente = pérdida desde el precio de la orden hasta el SL (precio límite para las órdenes Stop Limit).
- Las posiciones/órdenes sin SL se contabilizan y su riesgo se marca como «riesgo ilimitado».
- Si se activan todos los SL: se muestran el capital neto resultante y su ratio respecto al límite diario (las órdenes pendientes no se incluyen; se muestran por separado).
- Por «Magic»: posiciones abiertas, lotes, P/L flotante, riesgo de SL, órdenes pendientes; en los últimos N días (valor introducido, por defecto 30): número de operaciones cerradas, tasa de acierto y P/L neto. El «Magic» de una operación cerrada se toma de su operación de entrada (por lo que una posición de un EA cerrada manualmente o por un SL sigue atribuyéndose al EA). Magic 0 = «Manual». La tasa de aciertos se calcula por operación cerrada (los cierres parciales se cuentan por separado).
5. Alertas
- Una advertencia cuando la pérdida alcanza el porcentaje del nivel de advertencia del límite (por defecto, 80 %) y una notificación de superación del límite al 100 %. Una vez al día (en caso de DD, hasta que se restablezca el límite).
- Canales (cada uno se puede activar o desactivar): ventana emergente de alerta, archivo de sonido (PlaySound), notificación push de MT5 móvil (SendNotification), Telegram.
- Colores del panel: verde (normal), naranja (advertencia), rojo (incumplimiento).
- También se notifican la pérdida de conexión, la reconexión y la desactivación del trading algorítmico.
6. Protección ante el rebasamiento del límite
MQL5 no puede bloquear una operación manual por adelantado ni desactivar el botón de trading algorítmico sin una DLL. Por lo tanto, «bloquear» significa que todas las posiciones abiertas tras un rebasamiento se cierran nada más abrirse, y las nuevas órdenes pendientes se eliminan. El usuario elige esta opción a sabiendas; conlleva un coste en forma de spread o comisión.
Modos (entrada):
- Solo alertas: no se lleva a cabo ninguna acción.
- Bloquear nuevas operaciones (cerrar inmediatamente) (predeterminado): se cierran las posiciones abiertas tras la hora de la infracción (incluidas las órdenes pendientes colocadas antes de la infracción que se activen posteriormente). Opcionalmente, se eliminan todas las órdenes pendientes (activado por defecto).
- Cerrar todo + bloquear: se cierran todas las posiciones, se eliminan todas las órdenes pendientes y se bloquea cualquier operación posterior.
La aplicación tiene dos niveles: inmediata a través de OnTradeTransaction y un temporizador de 500 ms como respaldo (los cierres fallidos se reintentan a intervalos de 1 s). En las cuentas de compensación, el volumen añadido a una posición existente tras un incumplimiento se revierte con una orden opuesta; si la posición cambia de signo (INOUT), se cierra por completo.
7. Desconexiones y limitaciones (importante)
La protección solo funciona mientras el terminal esté en funcionamiento, conectado al bróker y se permita el trading algorítmico. No se tienen en cuenta los siguientes casos:
- Sin conexión no se puede enviar ninguna orden de cierre. El panel muestra un banner rojo con el mensaje «Sin conexión con el bróker: la protección no funciona», se escribe «DESCONECTADO» en el CSV y la protección vuelve a intentarlo automáticamente una vez restablecida la conexión.
- No se ejecuta nada mientras el terminal está cerrado. La protección real requiere un SL por parte del bróker en cada posición, por lo que la herramienta marca por separado las posiciones sin SL.
- Las posiciones abiertas mientras el EA no estaba en ejecución se contabilizan como abiertas antes de la interrupción en el modo «Bloquear nuevas operaciones» y no se cierran (solo el modo «Cerrar todo» las recoge). En la compensación, no se tiene en cuenta el volumen añadido mientras el EA no estaba en ejecución.
- Los depósitos y retiradas realizados mientras el EA no estaba en funcionamiento no se reflejan en el saldo máximo ni en el saldo inicial (los cálculos diarios no se ven afectados, ya que se obtienen del historial).
- El capital máximo se muestrea cada 500 ms; es posible que se pasen por alto picos de menor duración.
- Se recomienda utilizar un VPS.
8. Estado persistente
Variables globales del terminal con el prefijo ARG_<cuenta>_: inicio del día, capital inicial del día (y si se ha medido), incumplimiento/advertencia diaria y su hora, máximo, base de DD estática, incumplimiento de DD, posición del panel y estado del PIN, bloqueo diario. Se rechaza una segunda instancia de gráfico en la misma cuenta (variable de bloqueo temporal).
9. Informe CSV
MQL5/Files/AngoraRiskGuardian/ARG_<cuenta>_<AAAA.MM>.csv, delimitador ;, decimal . . Columnas: server_time; local_time; account; event; symbol; ticket; magic; volume; price; pl; balance; net_equity; daily_pl; daily_limit_used_%; dd; dd_limit_used_%; message. Eventos: START, STOP, DEAL, CAPITAL_FLOW, AUTO_SL, TILT_STREAK, TILT_BLOCK, TILT_WARN, LOT_LIMIT, NEWS (dentro de TILT_BLOCK), OBJETIVO, BLOQUEO_DE_BENEFICIOS, ORDEN_DEL_PANEL, ORDEN_RECHAZADA_DEL_PANEL, RESUMEN_DIARIO, RENOVACIÓN_DIARIA, ESTIMACIÓN_DE_REFERENCIA, ADVERTENCIA_DIARIA, INCUMPLIMIENTO_DIARIO, ADVERTENCIA_DD, BREACH_DD, DD_RESET, ENFORCE_CLOSE, ENFORCE_REDUCE, ENFORCE_DELETE, ENFORCE_FAIL, TRADE_DISABLED, DISCONNECT, RECONNECT.
10. Interfaz de usuario
Panel en el gráfico: se arrastra por su barra de título; la posición se bloquea con [pin]; la posición se mantiene. El diseño se escala automáticamente según los DPI de la pantalla (las fuentes aumentan con los DPI, mientras que las coordenadas de los objetos no); si es necesario, ajústalo manualmente con el campo «Escala del panel». Secciones: banda de estado, Cuenta, Pérdida diaria (barra de relleno), Drawdown máximo (barra), Riesgo abierto, Sistema, Bloqueo de beneficios, Noticias, Exposición a divisas/activos, Nueva orden, Disciplina, Cuentas, Tabla «By Magic» (columnas alineadas a la derecha). Contenido: estado, hora del servidor/inicio del día, conexión, saldo/capital/beneficio flotante, referencia, P/L diario y uso de límites, DD, recuento de posiciones/órdenes, riesgos de SL, advertencia de ausencia de SL, escenario de activación de todos los SL, modo de protección y la tabla «Magic».
11. Licencia y datos
- La versión v1 se vende a través del MQL5 Market con una licencia única; el Market aplica su propia protección de licencia/activación, por lo que el código no tiene un servidor de licencias independiente.
- Si se necesitan ventas fuera del Market (v1.x), se puede añadir una clave firmada vinculada al número de cuenta y verificada sin conexión.
- No sale ningún dato de la cuenta de la terminal, salvo los mensajes de Telegram que el usuario habilite explícitamente. Los resultados son el archivo CSV local y los archivos locales de instantáneas de varias cuentas.
- Posibles funciones del nivel de pago (una vez validada la demanda): vista de múltiples cuentas basada en servidor en distintos ordenadores, límites por Magic/por símbolo, límites semanales/mensuales y resúmenes de informes en HTML.
12. Matriz de pruebas
| Área | Escenarios |
|---|---|
| Modo de cuenta | Cobertura, compensación (adición, cierre parcial, reversión) |
| Símbolos | Forex de 5/3 dígitos, JPY, metales, CFD sobre índices, criptomonedas; moneda de la cuenta ≠ moneda de las ganancias; paso por lote 0,01/0,1/1; lote mínimo |
| Ejecución | Brókers con políticas FOK / IOC / Return |
| Hora | Servidor GMT+2/+3, cambio de horario de verano, hora de inicio de la jornada de negociación ≠ 0, fin de semana |
| Diario | Inicio al mediodía, reinicio de la terminal, posiciones mantenidas pasada la medianoche (3 modos de referencia), depósitos/retiradas intradía |
| Incumplimiento | Operación manual, operación de otro EA, orden pendiente colocada antes de la ruptura y que se activa posteriormente, intento de cierre mientras el mercado está cerrado (reintento) |
| Conexión | Caída/restablecimiento de la red, interrupción que se produce mientras se está desconectado, trading algorítmico desactivado |
| Múltiples instancias | Conexión a un segundo gráfico en la misma cuenta (debe rechazarse) |
| Probador de estrategias | Comportamiento de los órdenes de límite y cierre en modo visual |
13. Novedades de la v1.1
Configuraciones predefinidas
Si el valor de «Conjunto de reglas» no es «Personalizado», los límites diarios y máximos de DD y los modos de referencia se toman del preajuste (los límites basados en el dinero están desactivados). La hora de inicio de la jornada bursátil sigue siendo una entrada del usuario, ya que depende de la zona horaria del servidor. Para el DD estático, el «Saldo inicial» debe establecerse en el importe de la cuenta.
| Configuración preestablecida | Diario | Referencia | DD máximo | Base de DD |
|---|---|---|---|---|
| Reto de 2 pasos | 5 % | el mayor entre saldo y patrimonio neto | 10 % | saldo inicial estático |
| Reto de 1 paso | 4 % | saldo al inicio del día | 6 % | Saldo máximo (móvil) |
| Financiación instantánea | 3 % | el mayor entre el saldo y el capital propio | 6 % | capital máximo (móvil) |
| Condiciones estrictas para particulares | 2 % | saldo al inicio de la jornada | 6 % | capital máximo (acumulado) |
Se añadirán ajustes preestablecidos específicos para cada empresa una vez que se hayan verificado las normas vigentes de cada una de ellas.
SL automático
Una posición sin SL se le asigna uno tras el periodo de gracia (por defecto, 5 s, para permitir que otros EA establezcan su propio SL). Distancia: riesgo equivalente a un porcentaje del capital neto (calculado a partir de la pérdida de 100 puntos mediante OrderCalcProfit) o a un número fijo de puntos. Si el precio ya ha superado el SL objetivo, se utiliza el nivel más cercano que permita el bróker y se anota en el CSV. Se mantiene cualquier TP ya existente. No se aplica a las órdenes pendientes (v1.1).
Control de disciplina
Se calcula a partir del historial de operaciones de hoy y se restablece al cierre diario. No se contabilizan las operaciones enviadas por la propia herramienta (código mágico 20261010).
- Número máximo de operaciones al día: número de operaciones de entrada (IN/INOUT) realizadas en el día.
- Pérdidas consecutivas: racha de operaciones cerradas con un resultado neto < 0; un cierre con beneficios o en equilibrio la reinicia. Cuando la racha alcanza el límite, no se realizan nuevas operaciones durante los minutos de tiempo de espera (0 = resto del día).
- Pausa tras una pérdida (protección contra la venganza): no se realizan nuevas operaciones durante N minutos tras el último cierre con pérdidas.
- Lote máximo por operación: el volumen excedente se cierra inmediatamente (se reduce la posición). Si «Reverse new trades that break a rule = false», solo se emite una alerta. Las reglas de disciplina se aplican inmediatamente a través de OnTradeTransaction; el temporizador de respaldo solo existe para los casos de incumplimiento de los límites.
14. Novedades de la v1.2
Filtro de noticias
El calendario económico integrado en MT5 (CalendarValueHistory, hora del servidor) se consulta cada 5 minutos para las próximas 48 horas. Se revierte cualquier operación nueva abierta en un símbolo afectado dentro de la ventana de un minuto antes o después de una noticia de alto impacto (u opcionalmente de impacto medio). Símbolo afectado: si la lista de divisas está vacía, los símbolos cuya divisa base o de beneficio coincida con la divisa de la noticia; si la lista está completa, las noticias de las divisas incluidas en la lista cubren todos los símbolos. Desactivado en el Probador de estrategias, ya que allí no está disponible el calendario. Si no se puede cargar el calendario, el panel muestra un aviso y vuelve a intentarlo cada minuto.
Bloqueo de beneficios
- Objetivo diario (% de la referencia o importe): cuando se alcanza, se pueden cerrar todas las posiciones y bloquear la jornada, o simplemente enviar una alerta.
- Protección de beneficios (trailing): una vez que los beneficios diarios superan el nivel de inicio en %, el día se bloquea si se pierde el % máximo de retroceso respecto al máximo de beneficios intradía.
- En un día bloqueado, se cierran todas las posiciones, se eliminan las órdenes pendientes y se revierten las operaciones nuevas posteriores. El bloqueo se levanta al final de la jornada y se mantiene tras el reinicio del terminal.
Calculadora de riesgo y órdenes con un solo clic
Campos «Riesgo (%)» y «SL (puntos)» en el panel del símbolo del gráfico. Lote = (capital neto × % de riesgo) ÷ (pérdida de 1 lote en SL, OrderCalcProfit), redondeado a la baja al paso de lote; se aplican el lote máximo y el límite de lotes por operación. Si incluso el lote mínimo supera el riesgo, no se envía ninguna orden. TP = SL × ratio. Antes de la orden se realiza una comprobación previa: si se produce un incumplimiento del límite, un día bloqueado, se aplica una regla de disciplina o una regla de noticias, la orden nunca se envía (prevención real para las órdenes del panel). Cuadro de diálogo de confirmación opcional. Las órdenes de panel utilizan un número mágico configurable y cuentan a efectos de los límites de disciplina.
Exposición a divisas/activos
El valor nocional de cada posición en la divisa de la cuenta (volumen × precio × valor del tick ÷ tamaño del tick) se suma a su divisa base (+) y a su divisa de beneficios (−); los símbolos con la misma divisa base y de beneficios (índices, etc.) se muestran por su nombre. Las 5 principales exposiciones se muestran como un múltiplo del patrimonio neto (5x en naranja, 10x en rojo).
Telegram y resumen al cierre de la jornada
Si se introducen un token de bot y un ID de chat, todas las alertas se envían también a Telegram. Se utiliza WebRequest; el usuario debe permitir https://api.telegram.org en Herramientas > Opciones > Asesores expertos (debe indicarse en la descripción del mercado). Los mensajes se ponen en cola y se envía como máximo uno por ciclo (tiempo de espera de 3 s), por lo que la lentitud de la red nunca retrasa la protección durante mucho tiempo. Al cierre diario, se envía un resumen (P/L, número de operaciones, cierres ganadores/perdedores, uso máximo del límite, incumplimiento/bloqueo) a Telegram y se guarda en el archivo CSV (DAY_SUMMARY). El token se almacena únicamente en los datos de entrada de la terminal.
Panel de cuentas múltiples
Cada instancia que tenga activada esta opción escribe una pequeña instantánea en la carpeta común de las terminales (Common/Files/AngoraRiskGuardian/accounts/<cuenta>.txt) cada 5 segundos y lee las demás: cuenta, bróker, capital, P/L diario, uso diario de límites y de DD, estado. Una cuenta que no se haya actualizado durante 60 segundos aparece como «desconectada». Los datos nunca salen del ordenador. Abarca todas las instalaciones de MT5 en el mismo ordenador; otros ordenadores o VPS quedan fuera del alcance (debería evaluarse por separado una versión basada en servidor para el nivel de pago).
