Nash Equilibrium
- Experts
- Tomasz Adrian Bialous
- Versione: 1.4
- Aggiornato: 23 dicembre 2025
- Attivazioni: 10
I am pleased to present to you a powerful EA, and everything about this EA is HUGE: profit, drawdown, number of orders, deposit.
EA trade all 28 symbols x 5 timeframes (M15,M30,H1,H4,D1), individual timeframes and currencies (not symbols) can be disabled.
Simple calculation: 28*5 = 140 signals to trade, and * 2 directions(buy/sell) = 280. If you are interested, read on.
1. How it was created:
EA was created when, after writing EA for manual basket trading, I was looking for an idea to automate it. Then I watched the movie “A Beautiful Mind” again and was inspired by the following scene. To understand how everything works, you just need to understand what John Nash is talking about in following scene:
https://www.youtube.com/watch?v=LJS7Igvk6ZM
“ THE BEST RESULT WOULD COME FROM EVERYONE IN THE GROUP DOING WHAT'S BEST FOR HIMSELF AND THE GROUP” , that's how EA works.
I will explain grouping below. That is why buy and sell signals are not the most important thing. It is enough for them to be potentially profitable. What is important is managing groups (baskets and baskets in groups).
2. Minimum requirements:
Minimum deposit: $5,000 for 1:500 leverage, $25,000 for 1:100 (the account must be able to handle a large number of positions, the EA will handle any number)
Maximum ping: 50 ms (30 ms is better than enough), small delays during closing work in favor of EA
Working time: 24 hours/5 days
Without meeting these conditions, it is a waste of your time and money.
3. Why cheap rent:
I set EA rent at a very low price for 6 months because it is not possible to perform backtests for all symbols in MT4. The only thing you can do is some optimization for take profit on one symbol (for reference), because everything is calculated for 28 currency pairs x 5 timeframes in real time anyway.
The EA rent is time-limited, and my suggestion is as follows: a) 2-3 months of learning and understanding, b) 3 months of real account, c) earn and buy. You just need to understand how it works and what the risks are and it is high.
4. Generating your own parameters:
The EA has the same SAFE, MODERATE, and AGGRESSIVE parameters encoded as in the following EA: Short Trend Reversal Using this EA, you can generate your own signal parameters (this EA was created for this purpose) and enter them into the ‘ReadFromFile.txt’ file.
The file with details will be created when you enable the Activity:ReadFromFile option for the first time on any timeframe.
5. EA as a manager:
Additionally, EA can work as an independent manager for your EA or supplement it. You need to apply logic for OrderMagicNumber(). Details can be found in the EA directory in the ‘ReserveMagic.txt’ file, which will be created after launching EA. If you attach my previous EA Short Trend Reversal to a chart opened with this EA, orders can be managed in manage mode (External or Main&External). The EAs are compatible.
You can send to EA from another EA/indicator/script EventChartCustom to close or open orders.
closing orders CustomEvents from other EA,indicator or 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");
open orders CustomEvents from other EA,indicator or 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 resolution made for FullHD (1920x1080), I have no plans for 4k (if you buy, ask by PM), the GUI engine is my own creation.
You can see the clickables by typing in the command-line: show demo.
You can see the list of CLI by clicking ‘i’ on the top bar of the GUI. The list of commands is quite long and described in EA, so there is no need to describe everything here.
7. Events reading:
EA has the ability to send pending orders a few seconds before macroeconomic data readings and delete them after the reading. Data is downloaded from ForexFactory (HIGH IMPACT) automatically and in local mode uses a *.txt file. This functionality is only available to buyers, it is blocked in the rent version. In the rental version, pending orders for readings can be sent manually. You can see the commands by clicking ‘i’ on the top GUI bar.
Events do not work on VPS.
8. Modes (group description):
each buy/sell signal generates 4 players
example: EURUSD sell signal
dual: (4 orders) (higher risk, greater DD movements, greater profit)
EA sends two SELL orders and recognizes them as: WEAK EUR and STRONG USD
+ 2 x opposite pending BUY STOP: STRONG EUR and WEAK USD
single: (2 orders) (lower risk, smaller DD movements, smaller profit)
EA sends one SELL order but recognizes it as: WEAK EUR or STRONG USD
+ 1 x opposite pending BUY STOP: STRONG EUR or WEAK USD
The following groups are created from the above example:
group(-1): or groupM15,groupM30,... ‘Group Mxx orders (all orders)’ (I call it clearing the table)
- groups all orders regardless of direction, simple (sum of orders) * (Group Mxx profit per order)
- rarely reaches TakeProfit but it depends on the TakeProfit set for TF (difference: Mxx Profit per order and Group Mxx orders) (averaging mode has a big impact, but it is very risky)
group0: (per timeframe, main group)
- STRONG OR WEAK on each timeframe has its own TakeProfit and these are entered all the time: Mxx Profit per order
group1:
- (STRONG, WEAK for all orders) is created from group0 (per timeframe) and has its own TakeProfit but has additional execution conditions (group definition and orders are for more than 1 timeframe)
group1ext:
- groups the two above STRONG&WEAK, with similar conditions, and one of group1 cannot be empty (also depends on group definition and the difference between TP group1 and group1ext) (table clearing)
groupN: (table clearing):
- I have never seen TP execution (left side of the GUI) you can combine and display groups (-1) in any configuration.
As you can read above, you can only choose the appropriate TakeProfit. Without backtesting on all symbols, it is impossible to set this with 100% certainty (don't forget what D. Trump did in 2025, it is impossible to generate perfect settings).
9. Settings:
settings affecting risk:
- Initial Lots,
- Averaging Method,
- Averaging steps,
- TF activity,
- Pending rules1,
- Pending rules2
Enable GUI GUI ON/OFF GUI 3D 3D ON/OFF Start/Stop (Broker Time) Start/Stop trading BrokerOffset (remember saving time change) difference between local and broker time (it is safer to set it manually) Initial Lots do not change if you have previously enabled averaging and have open orders Pending Lots Initial Lots, Same as previous opened order Averaging Method NONE, simple: Initial Lots*(cnt+1), fibo: Initial Lots * fibo[cnt] e.g. [1,1,2,3,...] Averaging steps array size for averaging method, max 7 Enable Factor for calculations ONLY after switch from averaging Manual limits noLimits, byTotalOrders, byMarginLvL, byTotalAndMargin, byTotalOrMargin EA working mode DualMode, SingleMode (description above) Disable order distance limits disabling distance limits for new orders, 3rd signal parameter Timeframe settings (groups0, trading signals): Enable TF enabling TF trading TF=(M15, M30, H1, H4, D1) TF base MagicNumber min 4digits, different for each TF (leave default) TF Profit per order group0, (0 disabling) Group TF orders group(-1), all orders Group TF Profit per order group(-1) profit per order TF activity Safe, Moderate, Aggressive, ReadFromFile (read description above) Group Baskets (group1, group1ext): Group all STRONG enable/disable grouping STRONG orders (group1) Group all WEAK enable/disable grouping WEAK orders (group1) Group all STRONG&WEAK enable/disable grouping STRONG&WEAK orders(group1ext) Group definition minimal orders in groups1 to close TakeProfit STRONG TakeProfit for STRONG basket (group1) WEAK TakeProfit for WEAK basket (group1) Optimization for backtesting only, sets the same TP for both of the above STRONG&WEAK TakeProfit for STRONG&WEAK baskets (group1ext) Add D1 to STRONG&WEAK groups Add D1 orders to calculations Group Timeframes (groupN): Group timeframes set1-set11 grouping groups(-1), groupsN Group set1-set11 profit per order TP for created groupsN Pending settings: Save/Restore pendings OFF, SaveToFile, InternalArray. save/restore pending orders for overnight spread. on VPS, EA uses an internal array Save after StopTrading [min] (0 = OFF) Restore before StartTrading [min] (0 = OFF) Save/Restore behavior for external pendings: Do Not Touch, Save/Restore As Is, Take Ownership Delete old Pending distance delete pendings if distance is more than N pips Open Pending rules1 (if other pending exist): Reject When Pending Exist, Move Existing, Add Even When Pending Exist Open Pending rules2 (if other buy or sell exist): Reject When Opened Exist, Add If Below Highest/Above Lowest, Add Even When Opened Exist AutoEvents (buyers only): AutoEvents enable/disable, events are downloaded directly from ForexFactory with below settings. events do not work on VPS Timeframe timeframe to trade Distance place pending orders with N pips distance Expiration[s] expiration is coded, max 23m:59s converted to seconds Before[s] place pending orders N seconds before, max 23m:59s converted to seconds Manage settings: Coma separated list excluded baskets here you can disable baskets. disabling more than two does not make sense. exaple:CHF,JPY EA suffix usefull for multiple instances, max 5letters External EA OrderComment() part of the text is enough to recognize Manage mode Main, External, Main&External External pendings delete behavior DoNotTouch: if true and Manage Mode is External or Main&External EA will not delete pending orders from external EA External ChartEvents receiver enable/disable receiving CustomChartEvents to close or open orders from other EA or indicator Notification/Alerts/Logs: there is no need to describe Send heartbeat every N hours (0 disable), sends a push notification “Alive and Kicking” every N hours Graphics settings: there is no need to describe, fonts: Arial Narrow, Arial Nova, Bahnschrift (check if you have it installed)
10. Indicator for analysis: https://www.mql5.com/en/code/65634
11. External indicator with prohibited import dll (you need it for some features):
#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); //Your commands } } }
12. At the end
Finally, if you have read this far, I would be very grateful for any suggestions for improvements. I can also add additional entry signals (they must work on all timeframes and symbols). MACD divergence I will add and inform.
