Nash Equilibrium
- Asesores Expertos
- Tomasz Adrian Bialous
- Versión: 1.4
- Actualizado: 23 diciembre 2025
- Activaciones: 10
Tengo el placer de presentarles un EA de gran alcance, y todo acerca de este EA es ENORME: el beneficio, la reducción, el número de órdenes, depósito.
EA comercio de los 28 símbolos x 5 marcos de tiempo (M15,M30,H1,H4,D1), los plazos individuales y monedas (no símbolos) se puede desactivar.
cálculo simple: 28 * 5 = 140 señales para el comercio, y * 2 direcciones (compra / venta) = 280. Si está interesado, siga leyendo.
1. Cómo se creó:
EA fue creado cuando, después de escribir EA para el comercio de la cesta manual, yo estaba buscando una idea para automatizarlo. Entonces volví a ver la película "Una mente maravillosa" y me inspiré en la siguiente escena. Para entender cómo funciona todo, sólo tienes que entender lo que John Nash está hablando en la siguiente escena:
https://www.youtube.com/watch?v=LJS7Igvk6ZM
" EL MEJOR RESULTADO SALDRÍA SI CADA UNO DE LOS MIEMBROS DEL GRUPO HICIERA LO MEJOR PARA SÍ MISMO Y PARA EL GRUPO" , así es como funciona la EA.
Más adelante explicaré la agrupación. Por eso las señales de compra y venta no son lo más importante. Basta con que sean potencialmente rentables. Lo importante es gestionar los grupos (cestas y cestas en grupos).
2. Requisitos mínimos:
Depósito mínimo: 5.000 $ para apalancamiento 1:500, 25.000 $ para 1:100 (la cuenta debe ser capaz de manejar un gran número de posiciones, el EA manejará cualquier número)
Ping máximo: 50 ms (30 ms es mejor que suficiente), pequeños retrasos durante el cierre trabajan a favor del EA
Tiempo de trabajo: 24 horas/5 días
Sin cumplir estas condiciones, es una pérdida de su tiempo y dinero.
3. Por qué alquiler barato:
Puse el alquiler de EA a un precio muy bajo durante 6 meses porque no es posible realizar backtests para todos los símbolos en MT4. Lo único que se puede hacer es alguna optimización para take profit en un símbolo (como referencia), porque de todos modos todo se calcula para 28 pares de divisas x 5 timeframes en tiempo real.
El alquiler del EA es por tiempo limitado, y mi sugerencia es la siguiente: a) 2-3 meses de aprendizaje y comprensión, b) 3 meses de cuenta real, c) ganar y comprar. Solo hay que entender como funciona y cuales son los riesgos y es alto.
4. Generar sus propios parámetros:
El EA tiene codificados los mismos parámetros SEGURO, MODERADO y AGRESIVO que en el siguiente EA: Short Trend Reversal Utilizando este EA, puede generar sus propios parámetros de señal (este EA fue creado para este propósito) e introducirlos en el archivo 'ReadFromFile.txt'.
El archivo con los detalles se creará cuando active la opción Activity:ReadFromFile por primera vez en cualquier timeframe.
5. EA como gestor:
Adicionalmente, el EA puede funcionar como gestor independiente de su EA o complementarlo. Necesita aplicar la lógica para OrderMagicNumber(). Los detalles se pueden encontrar en el directorio del EA en el archivo 'ReserveMagic.txt', que se creará después de lanzar el EA. Si adjunta mi EA anterior Short Trend Reversal a un gráfico abierto con este EA, las órdenes se pueden gestionar en modo de gestión (Externo o Principal&Externo). Los EAs son compatibles.
Puede enviar al EA desde otro EA/indicador/script EventChartCustom para cerrar o abrir órdenes.
cerrar órdenes CustomEvents desde otro EA,indicador o script
char EAManageMode = 0; 0 - Main, 1 - External, 2 - Main&External long currChartID = ChartID(); EventChartCustom(EAChartID,201,currChartID,EAManageMode,"M15"); /*close all M15*/ returned: EventChartCustom(currChartID,299,0,1,"M15"); EventChartCustom(EAChartID,202,currChartID,EAManageMode,"M30"); /*close all M30*/ returned: EventChartCustom(currChartID,299,0,2,"M30"); EventChartCustom(EAChartID,203,currChartID,EAManageMode,"H1"); /*close all H1*/ returned: EventChartCustom(currChartID,299,0,3,"H1"); EventChartCustom(EAChartID,204,currChartID,EAManageMode,"H4"); /*close all H4*/ returned: EventChartCustom(currChartID,299,0,4,"H4"); EventChartCustom(EAChartID,205,currChartID,EAManageMode,"D1"); /*close all D1*/ returned: EventChartCustom(currChartID,299,0,5,"D1"); EventChartCustom(EAChartID,200,currChartID,EAManageMode,"ALL"); /*close all ALL*/ returned: EventChartCustom(currChartID,299,0,0,"ALL");
órdenes de apertura CustomEvents desde otro EA,indicador o script.
char ManageMode = 0; //0 - Main, 1 - External, 2 - Main&External char tf_idx; switch(_Period) { case PERIOD_M15: tf_idx = 1; break; case PERIOD_M30: tf_idx = 2; break; case PERIOD_H1: tf_idx = 3; break; case PERIOD_H4: tf_idx = 4; break; case PERIOD_D1: tf_idx = 5; break; default: break; } ushort EventID = (ushort)StringFormat("3%d%d",tf_idx,ManageMode); long currChartID = ChartID(); double Lots = 0.01; string trade_cmd = "STRONG,EUR,EURUSD"; //example EventChartCustom(EAchartID,EventID,currChartID,Lots,trade_cmd); returned: EventChartCustom(currChartID,300,ChartID(),Lots,"STRONG,EUR,EURUSD");
6. GUI, CLI:
GUI resolución hecha para FullHD (1920x1080), no tengo planes para 4k (si usted compra, pregunte por PM), el motor GUI es mi propia creación.
Usted puede ver los clickables escribiendo en la línea de comandos: show demo.
Usted puede ver la lista de CLI haciendo clic en 'i' en la barra superior de la GUI. La lista de comandos es bastante larga y está descrita en EA, por lo que no es necesario describirlo todo aquí.
7. Lectura de eventos:
EA tiene la capacidad de enviar órdenes pendientes unos segundos antes de la lectura de datos macroeconómicos y eliminarlas después de la lectura. Los datos se descargan de ForexFactory (HIGH IMPACT) automáticamente y en modo local utiliza un archivo *.txt. Esta funcionalidad sólo está disponible para compradores, está bloqueada en la versión de alquiler. En la versión de alquiler, las órdenes pendientes de lectura se pueden enviar manualmente. Puede ver los comandos haciendo clic en 'i' en la barra superior GUI.
Los eventos no funcionan en VPS.
8. Modos (descripción del grupo):
cada señal de compra/venta genera 4 jugadores
ejemplo: EURUSD señal de venta
dual: (4 órdenes) (mayor riesgo, mayores movimientos DD, mayor beneficio)
EA envía dos órdenes de VENTA y las reconoce como:EUR DÉBIL y USD FUERTE
+ 2 órdenes de COMPRA pendientes opuestas: EUR FUERTE y USD DÉBIL
simple: (2 órdenes) (menor riesgo, menores movimientos DD, menor beneficio)
EA envía una orden de VENTA pero la reconoce como:WEAK EUR o STRONG USD
+ 1 orden de COMPRA pendiente opuesta:EUR FUERTE o USD DÉBIL
Los siguientes grupos se crean a partir del ejemplo anterior:
grupo(-1): o grupoM15,grupoM30,... 'Group Mxx orders (all orders)' (yo lo llamo limpiar la tabla)
- agrupa todas las órdenes independientemente de la dirección, simple (suma de órdenes) * (Group Mxx profit per order)
- raramente alcanza el TakeProfit pero depende del TakeProfit establecido para TF (diferencia: Mxx Beneficio por orden y Grupo Mxx órdenes) (el modo de promediación tiene un gran impacto, pero es muy arriesgado)
group0: (por timeframe, grupo principal)
- FUERTE O DÉBIL en cada timeframe tiene su propio TakeProfit y estos se introducen todo el tiempo: Mxx Beneficio por orden
grupo1:
- (FUERTE, DÉBIL para todas las órdenes) se crea a partir del grupo0 (por timeframe) y tiene su propio TakeProfit pero tiene condiciones de ejecución adicionales (la definición del grupo y las órdenes son para más de 1 timeframe)
group1ext:
- agrupa los dos anteriores STRONG&WEAK, con condiciones similares, y uno de group1 no puede estar vacío (también depende de la definición del grupo y de la diferencia entre TP group1 y group1ext) (table clearing)
groupN: (table clearing):
- Nunca he visto la ejecución de TP (lado izquierdo de la GUI) puedes combinar y mostrar grupos (-1) en cualquier configuración.
Como se puede leer más arriba, sólo se puede elegir el TakeProfit apropiado. Sin backtesting en todos los símbolos, es imposible establecer esto con 100% de certeza (no se olvide de lo que hizo D. Trump en 2025, es imposible generar configuraciones perfectas).
9. Ajustes:
ajustes que afectan al riesgo:
- Lotes iniciales,
- Método de promediado,
- Pasos de promediado,
- Actividad de TF,
- Reglas pendientes1,
- Reglas pendientes2
Activar GUI GUI ON/OFF GUI 3D 3D ON/OFF Inicio/Parada (Hora del corredor) Iniciar/Parar la negociación BrokerOffset (recuerde el cambio de horario) diferencia entre la hora local y la hora del broker (es más seguro establecerla manualmente) Lotes iniciales no cambian si previamente ha activado el promediado y tiene órdenes abiertas Lotes Pendientes Lotes iniciales, los mismos que la orden abierta anteriormente Método de promediación NINGUNO, simple: Lotes Iniciales*(cnt+1), fibo: Lotes iniciales * fibo[cnt] p.ej. [1,1,2,3,...] Pasos de promediado tamaño del array para el método de promediado, máximo 7 Habilitar Factor para cálculos SÓLO después de cambiar de promediación Límites manuales noLimits, byTotalOrders, byMarginLvL, byTotalAndMargin, byTotalOrMargin Modo de trabajo EA DualMode, SingleMode (descripción anterior) Deshabilitar límites de distancia de órdenes deshabilitar límites de distancia para nuevas órdenes, 3er parámetro de señal Ajustes de Timeframe (grupos0, señales de trading): Activar TF habilitar TF trading TF=(M15, M30, H1, H4, D1) TF base MagicNumber min 4digits, diferente para cada TF (dejar por defecto) TF Beneficio por orden group0, (0 deshabilitar) Agrupar órdenes TF group(-1), todas las órdenes Grupo TF Beneficio por orden grupo(-1) beneficio por orden Actividad TF Seguro, Moderado, Agresivo, LeerDeArchivo (leer descripción más arriba) Grupo Cestas (grupo1, grupo1ext): Agrupar todas las STRONG activar/desactivar la agrupación de órdenes FUERTE (group1) Agrupar todo DÉBIL activar/desactivar la agrupación de pedidos WEAK (grupo1) Agrupar todo FUERTE&DÉBIL activar/desactivar la agrupación de pedidos FUERTE y DÉBIL (grupo1ext) Definición del grupo órdenes mínimas en grupos1 para cerrar TakeProfit FUERTE TakeProfit para la cesta STRONG (grupo1) DÉBIL TakeProfit para la cesta WEAK (grupo1) Optimización sólo para backtesting, establece el mismo TP para los dos anteriores FUERTE&DÉBIL TakeProfit para las cestas STRONG&WEAK (grupo1ext) Añadir D1 a los grupos STRONG&WEAK Añadir órdenes D1 a los cálculos Agrupar timeframes (grupoN) Agrupar timeframes set1-set11 agrupar grupos(-1), gruposN Grupo set1-set11 beneficio por orden TP para gruposN creados Ajustes pendientes: Guardar/Restaurar pendientes OFF, SaveToFile, InternalArray. guardar/restaurar órdenes pendientes para spread nocturno. en VPS, EA usa un array interno Guardar después de StopTrading [min] (0 = OFF) Restaurar antes de StartTrading [min] (0 = OFF) Comportamiento de Guardar/Restaurar para pendientes externas: No tocar, Guardar/Restaurar como está, Asumir propiedad Borrar distancia pendiente antigua Borrar Pendientes si la distancia es superior a N pips Abrir pendientes reglas1 (si existen otros pendientes): Rechazar si existe pendiente, Mover existente, Añadir si existe pendiente Abrir pendientes reglas2 (si existe otra compra o venta): Rechazar si existe apertura, Añadir si está por debajo del máximo/por encima del mínimo, Añadir incluso si existe apertura AutoEventos (sólo compradores): AutoEvents activar/desactivar, los eventos se descargan directamente desde ForexFactory con la siguiente configuración. los eventos no funcionan en VPS Timeframe Tiempo para operar Distancia colocar órdenes pendientes con N pips de distancia Vencimiento[s] expiración codificada, máximo 23m:59s convertido a segundos Antes[s] colocar órdenes pendientes N segundos antes, máximo 23m:59s convertido a segundos Gestionar configuración: Lista de cestas excluidas separadas por comas aquí puede desactivar las cestas. desactivar más de dos no tiene sentido. ejemplo:CHF,JPY Sufijo EA útil para múltiples instancias, máximo 5 letras EA externo OrderComment() parte del texto es suficiente para reconocer Modo de gestión Principal, Externo, Principal&Externo Comportamiento de borrado de pendientes externas DoNotTouch: si es true y el Modo de Gestión es Externo o Principal&Externo el EA no borrará las órdenes pendientes del EA externo Receptor de ChartEvents externos activar/desactivar la recepción de CustomChartEvents para cerrar o abrir órdenes desde otro EA o indicador Notificación/Alertas/Logs: no es necesario describir Enviar heartbeat cada N horas (0 desactivar), envía una notificación push "Alive and Kicking" cada N horas Ajustes gráficos: no hay necesidad de describir, fuentes: Arial Narrow, Arial Nova, Bahnschrift (comprueba si lo tienes instalado)
10. Indicador para el análisis: https://www.mql5.com/en/code/65634
11. Indicador externo con dll de importación prohibida (lo necesitas para algunas funciones):
#property copyright "https://www.mql5.com/en/market/product/Nash Equilibrium" #property link "https://www.mql5.com/en/market/product/154150" #property description "NashEquilibrium ChartEvents" #property version "1.00" #property strict #property indicator_chart_window #import "user32.dll" int GetParent(int hWnd); int SetWindowPos(int hWnd,int hWndInsertAfter ,int X,int Y,int cx,int cy,int uFlags); int MoveWindow(int hWnd,int X,int Y,int nWidth,int nHeight,int bRepaint); #import #import "shell32.dll" int ShellExecuteW (int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd); #import //---------- int OnInit(void) { return(INIT_SUCCEEDED); } //---------- void OnDeinit(const int reason) { } //---------- int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { return(rates_total); } //---------- void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { int customEventID,parent; if(id>CHARTEVENT_CUSTOM) {//Print(lparam," | ",dparam," | "sparam); customEventID = id - CHARTEVENT_CUSTOM; switch(customEventID) { case 1: parent = GetParent((int)ChartGetInteger(0,CHART_WINDOW_HANDLE)); SetWindowPos(parent,0,0,0,(int)lparam,(int)dparam,0x0002); break; //GUI ON case 2: parent = GetParent((int)ChartGetInteger(0,CHART_WINDOW_HANDLE)); SetWindowPos(parent,0,0,0,(int)lparam,(int)dparam,0x0002); break; //GUI OFF case 3: ShellExecuteW(NULL, "open", "explorer",TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files\\"+sparam, NULL, 1); break; case 4: ShellExecuteW(NULL, "open", "notepad", TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files\\"+sparam, NULL, 1); break; default: break; } if(customEventID>=11 && customEventID<40) { int Width = 282,Height = 363; long chartID = lparam; parent = GetParent((int)ChartGetInteger(chartID,CHART_WINDOW_HANDLE)); int _X = (int)ObjectGetString(chartID,"X",OBJPROP_TEXT); int _Y = (int)ObjectGetString(chartID,"Y",OBJPROP_TEXT); MoveWindow(parent,_X,_Y,Width,Height,true); } else if(customEventID==100) { Print(sparam); //Sus órdenes } } }
12. Al final
Por último, si has leído hasta aquí, te agradecería mucho cualquier sugerencia de mejora. También puedo añadir señales de entrada adicionales (deben funcionar en todos los plazos y símbolos). La divergencia MACD la añadiré e informaré.
