The Account Protector is a MetaTrader expert advisor that lets you manage trades and control your profit and loss across multiple currency pairs using a number of parameters and settings. Here are some examples of the things you can accomplish with the Account Protector:
- Close all positions once account equity increases by 10%.
- Delete all EUR/USD pending orders once floating profit on EUR/USD trades reaches $500.
- Email you the current account state and disable autotrading once free margin drops below $1,000.
- Trail stop-losses on all trades with non-empty commentary field.
- Close all positions and exit MetaTrader once total floating profit on trades with magic number "1000" reaches 50 points.
- Close 50% of the position's volume when profit reaches 100 points.
- Exit the platform when local time is 23:59 Friday.
- Enable autotrading when server time is 8:00 on any day.
- Close all losing trades when total floating loss falls down to $100.
- Close all trades when the current chart's price reaches a given level.
- Disable autotrading when the account margin level falls below a certain level.
- Close all positions when spread decreases below a given value.
- Cease all trading operations when a given daily loss is reached.
- Close all other charts based on deviation from equity snapshot captured by another instance of the Account Protector.
The Account Protector's main benefits include:
- You control all the main settings using a graphic panel.
- You can close, minimize, and move the panel freely across the chart.
- Settings can be adjusted inside the panel with just a few mouse clicks.
- You can apply mass breakeven and trailing stop mechanism to secure your profit.
- Hidden trailing stop-loss by account equity.
- You can set it to trigger by timer (including recurring).
- You can choose whether to count swaps and commission when calculating profit/loss.
- The panel displays the current instrument's spread.
- Two snapshots (free margin and equity) are available for advanced trigger conditions.
- You can filter trades by magic numbers, instrument, and order commentaries.
- You can combine as many conditions and filters as you like.
- The panel can inform you about its actions via email and mobile push-notifications.
- The panel automatically saves and loads its settings on timeframe change or platform restart, preserving your configuration efforts.
- It uses only one standard Windows DLL (to disable autotrading) — the EA can work without DLLs if you do not need it to disable autotrading.
- You can use it in MetaTrader 4 and MetaTrader 5 (both hedging and netting modes).
- The panel scales properly on high-DPI screens (4K, for example).
- You are free to browse and modify its open-source code.
Interface
Main tab
The main tab of the panel serves to control the trailing stop and breakeven settings as well as free margin and equity snapshots. The same tab is used to control the equity trailing stop. Also, you can use it to set the timer and to choose whether to count swaps and commission as profit and loss. Additionally, this tab displays the current spread. All the tabs show the expert advisor's status:

To turn on the timer, you need to set the checkbox and the time (trading server or local PC time) when you want expert advisor's actions to be executed (not the time until those actions get triggered). You can also set the day of the week for the timer to set off.
Trailing stop and breakeven are set similarly — by clicking the checkbox and setting the relevant value in the input field:
- The first trailing input allows you to set the profit level in points when the trailing stop is first activated. For example, 100 points; when position will reach at least 100 points profit, the trailing stop will be applied using the stop distance from the next input field.
- The actual trailing stop distance to be used.
- The first breakeven input field is the target number of profitable points (or currency units) when the stop-loss is moved to breakeven.
- The input field below lets you enter the number of extra points to add to the breakeven level if you want to capture some minimum profit with the trade. This value is useless if the main breakeven value is not set.
- The final input field lets you set the equity trailing stop value in account currency. When there is an active equity stop-loss value, it is displayed under the checkbox and there is also a button to reset it. You can choose whether to get an alert on equity trailing stop triggering and whether to disable the trailing mechanism after it had triggered.
Filters tab
This tab lets you restrict which trades are monitored and managed by the Account Protector using magic numbers, order symbol, and order commentary.

The magic number field lets you input several numeric values and either force the EA to work with the trades associated with these numbers or exclude such trades from being processed by the EA. Symbol filtering is organized as a group of radio buttons with explicitly described choices. Order commentary filtering is based on a textual input field and a choice of whether to look for exact match, comments containing the text, comments not containing the text, or comments not equal the entered text.
Conditions tab
In this tab, you can set the conditions to trigger the EA's actions.

The first 12 conditions involve floating profit/loss and they trigger if:
- Floating loss rises to a given percentage of the balance. E.g., paper loss becomes greater or equal to 20% of the balance.
- Floating loss falls to a given percentage of the balance. E.g., paper loss becomes less or equal to 20% of the balance.
- Floating loss rises to a number of currency units. E.g., paper loss becomes greater or equal to $100.
- Floating loss falls to a number of currency units. E.g., paper loss becomes less or equal to $100.
- Floating loss rises to a number of points. E.g., paper loss becomes greater or equal to 50 points.
- Floating loss falls to a number of points. E.g., paper loss becomes less or equal to 50 points.
- Floating profit rises to a given percentage of the balance. E.g., paper profit becomes greater or equal to 40% of the balance.
- Floating profit falls to a given percentage of the balance. E.g., paper profit becomes less or equal to 40% of the balance.
- Floating profit rises to a number of currency units. E.g., paper profit becomes greater or equal to $200.
- Floating profit falls to a number of currency units. E.g., paper profit becomes less or equal to $200.
- Floating profit rises to a number of points. E.g., paper profit becomes greater or equal to 100 points.
- Floating profit falls to a number of points. E.g., paper profit becomes less or equal to 100 points.
Any of these 12 conditions can be disabled and hidden via the EA's input parameters.
The next two conditions compare account equity to a given amount of money:
- Equity becomes less or equal to a given number of currency units. E.g., equity falls to or below $800.
- Equity becomes greater or equal to a given number of currency units. E.g., equity rises to or above $1200.
Then, there are four conditions that compare account equity to the previously captured snapshot:
- Equity becomes less or equal to a given percentage of snapshot. E.g., equity falls to or below 90% of the previously captured snapshot.
- Equity becomes greater or equal to a given percentage of snapshot. E.g., equity rises to or above 115% of the previously captured snapshot.
- Equity minus snapshot becomes greater or equal to a number of currency units. E.g., equity becomes $100 higher than the previously captured snapshot.
- Snapshot minus equity becomes greater or equal to a number of currency units. E.g., equity becomes $150 lower than the previously captured snapshot.
Similar conditions exist for free margin. The first two conditions compare it to some amount of money:
- Free margin becomes less or equal to a given number of currency units. E.g., free margin falls to or below $500.
- Free margin becomes greater or equal to a given number of currency units. E.g., free margin rises to or above $750.
The next two conditions compare free margin to a snapshot:
- Free margin becomes less or equal to a given percentage of snapshot. E.g., free margin falls to or below 80% of the previously captured snapshot.
- Free margin becomes greater or equal to a given percentage of snapshot. E.g., free margin rises to or above 130% of the previously captured snapshot.
The next two conditions analyze the current chart's price:
- The current price becomes greater or equal to a given value. E.g., the current EUR/USD chart's price goes to 1.2000 or above.
- The current price becomes less or equal to a given value. E.g., the current EUR/USD chart's price goes to 1.1000 or below.
Then follow two conditions that work with the margin level (that is, account's equity divided by used margin):
- Margin level becomes greater or equal to a given percentage value. E.g., margin level rises to or above 110%.
- Margin level becomes less or equal to a given percentage value. E.g., margin level falls to or below 55%.
Then there are two conditions for the current instrument's spread:
- Spread becomes greater or equal to a given number of points. E.g., spread goes up to 100 points.
- Spread becomes less or equal to a given number of points. E.g., spread falls to 10 points.
The final group consists of six conditions that analyze the account's daily profit or loss. You can enter negative values for loss comparison and positive values for profit comparison. The Account Protector uses server time to determine the start of the day for these conditions and includes the floating profit/loss in its calculations:
- Daily profit/loss greater or equal to a given number of currency units. E.g., total daily profit goes to 100 USD or above.
- Daily profit/loss less or equal to a given number of currency units. E.g., total daily profit falls to -100 USD or below.
- Daily profit/loss greater or equal to a given number of points. E.g., total daily profit goes to 250 points or above.
- Daily profit/loss less or equal to a given number of points. E.g., total daily profit falls to -300 points or below.
- Daily profit/loss greater or equal to a percentage value of the daily starting account balance. E.g., total daily profit goes to 5% or higher.
- Daily profit/loss less or equal to a percentage value of the daily starting account balance. E.g., total daily profit falls to -3% or less.
After a condition is triggered, its checkbox will be unchecked unless DoNotDisableConditions is set to true.
Actions tab
This tab lets you select the actions that should be executed if your chosen conditions are met.

Nine actions are supported by the Account Protector:
- Close % of positions will close (fully or partially) selected active trades (all, losing, or profitable) in all trading instruments that are not filtered out (using the Filters tab) and where trading is enabled.
- Delete all pending orders will remove all stop, limit, and stop-limit orders in all trading instruments that are not filtered out (using the Filters tab) and where trading is enabled.
- Disable autotrading will turn off the platform's AutoTrading button preventing further operation of all expert advisors. The Account Protector uses a call to one of user32.dll functions to emulate the button press. The action will not work if DLLs are disabled.
- Send e-mail will notify you using an e-mail if there are correct settings under Tools->Options->Email menu. One e-mail message will be sent with brief description of what condition has been met and what actions have been taken.
- Send push notifications will inform you using mobile push notifications if there are correct settings under Tools->Options->Notifications menu. Two notifications will be sent with brief description of what condition has been met and what actions have been taken.
- Close platform will close the MetaTrader platform. This will prevent any further operation of the attached expert advisors.
- Enable autotrading will turn on the platform's AutoTrading button, enabling other expert advisors to function properly. The Account Protector uses a call to one of user32.dll functions to emulate the button press. The action will not work if DLLs are disabled.
- Recapture snapshots will capture the equity and margin snapshots.
- Close all other charts will close all charts in the platform except for the current chart where the current instance of the Account Protector is operating.
After some action is taken, its checkbox will be unchecked unless DoNotDisableActions is set to true.
Usage
The aim of the Account Protector (AP) is to help you preserve your account balance. AP works based on the conditions and actions you set. The actions are applied at the moment when at least one of the conditions is triggered. The graphic panel helps you operate the expert advisor.
You can ensure proper operation of AP by turning on AutoTrading button in MetaTrader terminal. Allowing DLL imports enables AP to automatically disable (or enable) autotrading when you configure it to do so. The expert advisor will alert you if either AutoTrading button or DLL imports are off but will continue operating in a restricted mode.
The EA will apply trailing stop-loss and breakeven stops if you configure it via the Main tab and enable autotrading.
If you set Enable emergency button input parameter to Yes, a big red emergency button will appear at the bottom of the Main tab. You can press it to close all positions, delete all pending orders, and disable autotrading immediately. The emergency button respects all filters set via the Filters tab.
Status
You can monitor the status of the Account Protector by looking at the panel's top line. It shows the current status as one of the five possible values:
- Autotrading is disabled — the expert advisor will not be able to perform any trading operations until autotrading is enabled.
- No condition is set — you need to set some condition in the Conditions tab for the EA to trigger and to take some actions.
- No action is set — you need to set some action in the Actions tab for AP to do anything when a condition triggers.
- OK — AP is fully operational and will take some actions when at least one of the given conditions is met.
- Triggered at
— appears after some condition has triggered.
Logging
When AP is attached to the chart, it logs the trading account information and its input parameters if the log file name is set.
During its operation, AP logs the following events:
- When some condition is triggered, AP logs the name of that condition, current account information, and all the panel settings.
- When some action is taken, AP logs the name of that action and the detailed list of all the closed positions and deleted pending orders.
- AP logs error messages (when some entered input value is invalid).
- It is possible to see most of the log messages inside the Experts tab of the MT4/MT5 terminal.
- When you remove AP from the chart, it again logs all the relevant trading account information and its own input values.
- Slippage (default = 2) — slippage value given in broker's points to be used when closing positions.
- Log file name (default = "log.txt") — if given, the Account Protector will log its settings and events into that file.
- Enable emergency button (default = No) — if Yes, the emergency button will be present on the panel for quick removal of all trades and disabling of autotrading.
- PanelOnTopOfChart (default = true) — if true, the panel will be drawn on foreground, and the chart will be drawn as background. Setting it to false will uncover the chart behind the panel.
- DoNotDisableConditions (default = false) — if true, the triggered condition's checkbox will not get unchecked on the Conditions tab.
- DoNotDisableActions (default = false) — if true, the triggered action's checkbox will not get unchecked on the Actions tab. It is not recommended to set this parameter to true unless you are completely certain in what you are doing.
- DoNotDisableEquityTS (default = false) — if true, the equity trailing stop will remain active after triggering and new trades will continue get their stop trailed by the Account Protector.
- DoNotDisableTimer (default = false) — if true, the timer will continue running after it triggers and will trigger again at the same time next day (or week).
- AlertOnEquityTS (default = false) — if true, a pop-up alert will be displayed when the hidden equity trailing stop is triggered.
- DisableFloatLossRisePerc (default = false) — if true, the "Floating loss rises to %" condition is disabled.
- DisableFloatLossFallPerc (default = true) — if true, the "Floating loss falls to %" condition is disabled.
- DisableFloatLossRiseCurr (default = false) — if true, the "Floating loss rises to currency units" condition is disabled.
- DisableFloatLossFallCurr (default = true) — if true, the "Floating loss falls to currency units" condition is disabled.
- DisableFloatLossRisePoints (default = false) — if true, the "Floating loss rises to points" condition is disabled.
- DisableFloatLossFallPoints (default = true) — if true, the "Floating loss falls to points" condition is disabled.
- DisableFloatProfitRisePerc (default = false) — if true, the "Floating profit rises to %" condition is disabled.
- DisableFloatProfitFallPerc (default = true) — if true, the "Floating profit falls to %" condition is disabled.
- DisableFloatProfitRiseCurr (default = false) — if true, the "Floating profit rises to currency units" condition is disabled.
- DisableFloatProfitFallCurr (default = true) — if true, the "Floating profit falls to currency units" condition is disabled.
- DisableFloatProfitRisePoints (default = false) — if true, the "Floating profit rises to points" condition is disabled.
- DisableFloatProfitFallPoints (default = true) — if true, the "Floating profit falls to points" condition is disabled.
- DisableCurrentPriceGE (default = true) — if true, the "Current price greater or equal" condition is disabled.
- DisableCurrentPriceLE (default = true) — if true, the "Current price less or equal" condition is disabled.
- DisableEquityMinusSnapshot (default = true) — if true, the "(Equity - snapshot) greater or equal" condition is disabled.
- DisableSnapshotMinusEquity (default = true) — if true, the "(Snapshot - equity) greater or equal" condition is disabled.
- DisableMarginLevelGE (default = true) — if true, the "Margin level greater or equal" condition is disabled.
- DisableMarginLevelLE (default = true) — if true, the "Margin level less or equal" condition is disabled.
- DisableSpreadGE (default = true) — if true, the "Spread greater or equal" condition is disabled.
- DisableSpreadLE (default = true) — if true, the "Spread less or equal" condition is disabled.
- DisableDailyProfitLossUnitsGE (default = true) — if true, the "Daily profit/loss greater or equal units" condition is disabled.
- DisableDailyProfitLossUnitsLE (default = true) — if true, the "Daily profit/loss level less or equal units" condition is disabled.
- DisableDailyProfitLossPointsGE (default = true) — if true, the "Daily profit/loss greater or equal points" condition is disabled.
- DisableDailyProfitLossPointsLE (default = true) — if true, the "Daily profit/loss level less or equal points" condition is disabled.
- DisableDailyProfitLossPercGE (default = true) — if true, the "Daily profit/loss greater or equal %" condition is disabled.
- DisableDailyProfitLossPercLE (default = true) — if true, the "Daily profit/loss level less or equal %" condition is disabled.
- DelayOrderClose (default = 0) — a delay in milliseconds between closing orders. This parameter can help with not spamming your broker's trading server with orders.
- UseTotalVolume (default = false) — if true, the Account Protector will consider the total volume it has already closed when partial closure is set up. This is particularly useful when trading with multiple low-volume positions.
- AdditionalFunds (default = 0) — additional funds will be added to account balance, equity, and free margin. This can be useful if you want the Account Protector to act as if you have more (or less) money in your account than there really is.
- Instruments (default = "") — the default list of trading instruments to use with the trade filter.
- CloseMostDistantFirst (default = false) — if true, the Account Protector will sort and close trades starting from the most distant (from its open price) ones. This will work irrespective of which condition is triggered.
- BreakEvenProfitInCurrencyUnits (default = false) — if true, the breakeven distance on the Main tab is set in currency units rather than points.
- GlobalSnapshots (default = false) — if true, all the Account Protector instances in the platform will share their equity and margin snapshots between each other. The latest snapshot update will get propagated to all the AP instances that have this input parameter set to true.
- Added an input parameter (BreakEvenProfitInCurrencyUnits) to let the breakeven distance field optionally accept values in the account currency units rather than points.
- Added an input parameter (GlobalSnapshots) to let two or more Account Protector instances running in the same platform share their equity and margin snapshots with each other.
- Added an input parameter (DoNotDisableTimer) to enable a persistent timer with recurring action triggering.
- Added the Close all other charts action to enable smart disabling of all other expert advisors.
- Improved position closing performance when no filters are set.
- Fixed a potential division by zero error when a daily profit/loss condition is enabled.
- Fixed erroneous triggering of the margin level condition when there are no open trades.
- Fixed a bug (MT4 only) when the panel didn't properly remember its selected tab.
- Fixed a minor error with the
ArraySort()
function. - Clarified the daily profit/loss percentage condition levels by adding that they are based on the account balance.
- Added an input parameter (DoNotDisableEquityTS) to not disable equity trailing stop upon triggering.
- Added an input parameter (AlertOnEquityTS) for an optional alert upon equity trailing stop triggering.
- Added an input parameter (CloseMostDistantFirst) to specify for the expert advisor to close trades starting from the most distant one (open price minus current price as distance).
- Renamed input parameter DoNotResetConditions to DoNotDisableConditions and DoNotResetActions to DoNotDisableActions to avoid confusion.
- Fixed a critical bug that prevented position closing when log file was set to empty.
- Fixed a bug that prevented log file from working properly even when there was no error opening it.
- Fixed equity trailing stop to actually close trades when a trailing stop is hit.
- Added a condition based on the current trading instrument's spread.
- Added a condition based on the account's margin level.
- Added a set of conditions based on the daily profit/loss.
- Added a filter for profitable/losing trades.
- Improved the instrument filter to accept a list of included/excluded trading instruments.
- Improved panel's compatibility with other panel indicators and EAs.
- Improved performance when checking some particularly slow conditions.
- Optimized magic number filtering process.
- Fixed a bug that prevented the Emergency Button from closing positions.
- Fixed a bug that caused the AP to apply the "Breakeven extra profit value (points)" even when the respective checkbox was unchecked.
- Converted pips to points throughout the expert advisor's interface for clarity.
- Added "Equity − snapshot" and "Snapshot − equity" conditions.
- Added "Chart price" conditions.
- Added an optional delay between order closing (DelayOrderClose input parameter).
- Added an option (UseTotalVolume input parameter) to use total volume for close percentage calculation when closing multiple small orders (e.g., 0.01 lot).
- Added an input parameter (AdditionalFunds) for a trader to specify additional funds to add to the account's balance, equity, and free margin. Could be useful when working with percentage values and not all your trading funds are deposited into your trading account.
- Changed the Close percentage field in the Actions tab to accept non-integer values.
- Removed the alert about DLL Imports being disabled. A status line warning should be enough.
- Fixed the removal of a leftover panel when re-attaching the Account Protector after a critical error.
- Fixed handling of closed markets in MT5. Now, if a trade should be closed (based on a triggered condition and an action) while its market hours are off, the Account Protector will close it when the market re-opens without flooding the log with error messages.
- Improved compatibility of the MT5 version with cryptocurrency-denominated accounts and cryptocurrency instruments.
- Added "Enable autotrading" action.
- Added "Recapture snapshots" action.
- Added an option to close all, only profitable, or only losing positions.
- Added reverse conditions for loss and profit reaching certain values. This can be used to trigger actions on loss and profit decreasing instead of increasing.
- Added input parameters to reduce the number of conditions displayed in the tab.
- Switched from
TimeCurrent()
toTimeLocal()
in logs. - Made some logging messages more precise.
- Added partial close percentage to Actions tab.
- Added day of the week for timer.
- Added support for 8 decimal places in position sizes (MT5 version of the EA only).
- Added input parameters to disable resetting of Conditions and Actions on trigger.
- Changed how panel fields behave — inputs can be changed even when the respective checkbox is off; no special
EMPTY
value to simplify things. - Fixed a bug when Account Protector failed to close positions in MT5 with Immediate or Cancel order filling type.
- Added hidden equity trailing stop.
- Fixed bugs connected with panel minimization and maximization.
- Fixed duplicate chart objects appearing when saving and loading a chart template with Account Protector.
Each line of the log file is accompanied by a timestamp based on the platform's local time.
Input parameters
Downloads (ver. 1.09, 2022-12-21)
The Account Protector is being developed via a dedicated GitHub repository. You are encouraged to actively participate in the improvement of this expert advisor by submitting your own features via pull-requests and by reviewing existing suggestions, changes, fixes, and so on.
Account Protector for MetaTrader 4 Account Protector for MetaTrader 5To install — unzip and copy the entire Account Protector folder to MQL4/Experts/ or MQL5/Experts/ (if you are on MetaTrader 5) of your terminal's data folder. When compiling the Account Protector in MetaEditor, make sure you are compiling either AccountProtector.mq4 or AccountProtector.mq5 and NOT AccountProtector.mqh.
Discussion
Do you have any suggestions or questions regarding this expert advisor?
Discuss the Account Protector with other traders and MQL coders on the forum.