PineHookPineHook

EA Control Commands

Symbol filtering commands (eaon, eaoff, eaoffexcept, eaonexcept) and emergency shutdown commands (closealleaoff, closecancelalleaoff).

Overview#

EA control commands let you manage which symbols your EA is allowed to trade, without touching the MT5 terminal directly. You can disable a symbol mid-session (to stop new entries while existing positions run), re-enable it later, or switch the entire filter to whitelist mode so only a defined list of symbols can receive new trades.

Two emergency shutdown commands, closealleaoff and closecancelalleaoff, combine an immediate account flatten with a full trading halt. These are the nuclear option: everything closes, everything cancels (depending on the variant used), and no new trades are accepted until you explicitly re-enable trading.

Filter changes are persistent. They survive EA restarts, server restarts, and MetaTrader disconnections. The current filter state is always visible in the dashboard under EA Settings.


How It Works#

eaon: Enable Trading for a Symbol#

When you send an eaon signal, the platform looks up the current filter state for that license and takes one of two actions depending on the active mode:

  • Blacklist mode (default): The symbol is removed from the blocked list. If it was never in the list, the command is a no-op (no error is returned).
  • Whitelist mode: The symbol is added to the allowed list. Trading for that symbol becomes possible once added.

If you send eaon with the special keyword ALL, the platform switches the filter to blacklist mode and clears the list entirely, making every symbol tradeable.

The updated filter is pushed to the running EA immediately over the live connection in both Dashboard and MetaTrader mode — symbol filters are server-authoritative regardless of the EA's Settings Source. The EA begins accepting trades for that symbol within seconds of the webhook call returning. If the EA is offline at that moment, the change is saved and applied automatically the next time it connects.

Note on additive composition: eaon SYMBOL only removes the symbol from the per-license filter. If the same symbol is also in the global blacklist (or absent from a global whitelist), it remains blocked at the effective layer because global + per-license stack additively. To unblock a symbol that's filtered globally, edit the global Symbol Filter section in dashboard settings. See the composition table further down in this doc.

eaoff: Disable Trading for a Symbol#

eaoff works the inverse of eaon. The platform modifies the filter based on the active mode:

  • Blacklist mode: The symbol is added to the blocked list. Subsequent buy, sell, and pending order signals for that symbol are rejected before they reach the EA.
  • Whitelist mode: The symbol is removed from the allowed list. It can no longer receive entry signals.

Sending eaoff with ALL sets the global trading halt flag, blocking all entry signals regardless of the current filter. No new entries are possible until you re-enable trading with eaon,ALL. This is the soft halt: unlike a closealleaoff emergency stop, it can be lifted by a settings update or a filter edit (not only by eaon,ALL). Like every filter state it is server-authoritative and does persist across an EA/MT5 restart; the server re-applies it on reconnect.

Note on additive composition: eaoff SYMBOL always succeeds at blocking the symbol. It adds to the per-license filter, which composes with global to block the symbol on this license regardless of what global says. The inverse (eaon) is asymmetric: it can't lift a global block.

Close commands (closelong, closeshort, closeall, etc.) are never blocked by the symbol filter. If EURUSD is disabled and you send a closelong for EURUSD, the close executes normally. The filter only gates new position entries and pending orders.

eaoffexcept: Switch to Whitelist Mode#

This command replaces the entire filter in one shot. You provide a list of symbols (semicolon-separated). At least one symbol is required. The platform:

  1. Switches the filter to whitelist mode.
  2. Sets the allowed list to exactly the symbols provided.
  3. Pushes the new filter to the running EA in real time (both Dashboard and MetaTrader mode).

All symbols not on the list are blocked immediately. This is the fastest way to lock a license down to a specific set of pairs.

Sending eaoffexcept with no symbols is rejected and recorded in Signal Logs → Rejected Signals. If you want to block all trading, send eaoff,ALL instead.

eaonexcept: Switch to Blacklist Mode#

eaonexcept is the inverse of eaoffexcept. You provide a list of symbols to block. At least one symbol is required. The platform:

  1. Switches the filter to blacklist mode.
  2. Sets the blocked list to exactly the symbols provided.
  3. Pushes the new filter to the running EA in real time (both Dashboard and MetaTrader mode).

All symbols not on the list are allowed. Sending eaonexcept with no symbols is rejected and recorded in Signal Logs → Rejected Signals. If you want to enable all trading, send eaon,ALL instead.

Per-license vs global filters: additive composition#

All four filter-mutating commands above (eaon, eaoff, eaoffexcept, eaonexcept) act on the per-license filter of the license attached to the signal. They never touch your global filter, and they have no effect on your other licenses.

The per-license filter and the global filter (set from the dashboard's Global Settings) both apply to every signal. A symbol must pass both filters to be allowed. They are composed, not overridden:

Global modePer-license modeEffective behavior
blacklistblacklistBlacklist of the union: a symbol blocked by either is blocked
whitelistwhitelistWhitelist of the intersection: a symbol must be in both whitelists to be allowed
blacklistwhitelistWhitelist of (per-license list \ global blacklist): both filters must permit
whitelistblacklistWhitelist of (global list \ per-license blacklist): both filters must permit

Concrete example of the surprise case to watch for:

If you send eaoffexcept=BTCUSD;ETHUSD to set a per-license whitelist of just BTC and ETH, and your global filter happens to be a whitelist of [SOLUSD] only, the effective whitelist is the intersection: empty. All trading on that license is blocked.

Pre-refactor (override semantics), eaoffexcept would have replaced the effective filter for that license, ignoring global. Now it stacks on top of global. If you sent eaoffexcept and now no trades go through, check whether your global filter is a whitelist. If it is and the lists don't intersect, edit the global Symbol Filter section in dashboard settings.

closealleaoff: Emergency Shutdown (Positions Only)#

Always global, and sticky. A symbol (and any magic) on this command is ignored — it always flattens the entire account — and the halt stays in effect until you explicitly send eaon,ALL.

This command does three things in sequence on the EA:

  1. Closes all open positions on every symbol, regardless of magic number (bypasses both magic filters and symbol filters — same as a symbolless closeall). A symbol included on the command (e.g. closealleaoff EURUSD) is ignored: the EA still flattens the whole account and prints a note in the Experts tab pointing you to the symbol-specific command (close EURUSD) in case that was the real intent.
  2. Sets a sticky emergency-stop flag on the EA, blocking all entry signals regardless of the current symbol filter state. The existing filter mode and list are left unchanged.
  3. Persists the stop to disk so it survives an EA restart.

Re-enabling is sticky — only eaon,ALL clears it:

LICENSE,eaon,ALL

A symbol-specific eaon (e.g. eaon,EURUSD), a dashboard settings update, and even restarting the EA in MetaTrader will not lift an emergency stop. This is deliberate: a routine settings push must not be able to silently re-enable trading after an emergency shutdown.

closecancelalleaoff: Emergency Shutdown (Full Flatten)#

closecancelalleaoff extends closealleaoff by also cancelling all pending orders. It does four things in sequence:

  1. Closes all open positions on every symbol, regardless of magic number.
  2. Cancels all pending orders on every symbol.
  3. Sets the same sticky emergency-stop flag, blocking all entry signals regardless of the current symbol filter state. The existing filter mode and list are left unchanged.
  4. Persists the stop to disk so it survives an EA restart.

As with closealleaoff, a symbol (and any magic) is ignored — the command always acts on the entire account — and only eaon,ALL re-enables trading. Use this when the goal is to leave absolutely no exposure open on the account.


Command Formats#

EA control commands support three syntax variants.

Standard format, three fields:

LICENSE,eaoff,EURUSD

Shorthand format, symbol embedded in the command field:

LICENSE,eaoff=EURUSD

The shorthand form is the recommended style for TradingView alerts. It is slightly more compact and supports multi-symbol lists directly.

Multi-symbol shorthand, semicolon-separated:

LICENSE,eaoff=EURUSD;GBPUSD;XAUUSD

Inline parameter, combined with a trade command:

LICENSE,sell,EURUSD,sl_pips=50,tp_pips=100,eaoff=EURUSD

The ordering rule for inline parameters is eaon before, eaoff after:

  • eaon= is applied before the trade is evaluated. A signal like LICENSE,buy,EURUSD,eaon=EURUSD re-enables EURUSD first, so the buy evaluates against the new state and executes normally.
  • eaoff= is applied after the trade is queued. The example above (sell,EURUSD,eaoff=EURUSD) executes the sell against the still-enabled state, then disables EURUSD for any future signals: the canonical "exit and disable" pattern.

The same signal can target a different symbol for the filter side-effect:

LICENSE,sell,EURUSD,sl_pips=50,tp_pips=100,eaoff=GBPUSD

Here the sell on EURUSD executes normally and GBPUSD is added to the blacklist for future signals (the eaoff still runs after the trade; the ordering rule doesn't change based on which symbol is targeted).

JSON format:

For eaoffexcept and eaonexcept, the JSON format uses a symbols array:

{
  "license": "LICENSE",
  "action": "eaoffexcept",
  "symbols": ["EURUSD", "GBPUSD", "USDJPY"]
}

For eaon and eaoff in JSON, the symbol field is used:

{
  "license": "LICENSE",
  "action": "eaoff",
  "symbol": "EURUSD"
}

Symbol Requirements#

RequirementRule
CharactersUppercase letters (A-Z) and digits (0-9) only
Length1 to 20 characters
Special keywordALL is accepted and triggers the all-enable or all-disable behavior
Maximum symbols per list100 (any operation that would push the filter past 100 is rejected; see Error Messages)
Case handlingInput is automatically uppercased before validation
DuplicatesSilently deduplicated; order is preserved

Valid examples: EURUSD, XAUUSD, BTCUSD, NQ, ES, MNQZ25, US500

Invalid examples: EUR/USD (slash), eur-usd (lowercase, hyphen), SYMBOL_NAME (underscore)


Symbol Filtering Behavior#

Current ModeCommandResult
Blacklist (empty list)eaoff=EURUSDEURUSD added to blocked list
Blacklist containing EURUSDeaon=EURUSDEURUSD removed from blocked list
Whitelist containing EURUSD, GBPUSDeaoff=EURUSDEURUSD removed from allowed list
Whitelist containing GBPUSDeaon=EURUSDEURUSD added to allowed list
Any modeeaon,ALLClear global halt flag and reset filter to blacklist-empty (all symbols enabled)
Any modeeaoff,ALLSet the global halt flag (all entries blocked). The soft halt: clears via eaon,ALL or any settings/filter update, and unlike a closealleaoff emergency stop it is not sticky. Like all filter state it persists across a restart (the server re-applies it on reconnect)
Any modeeaoffexcept=EURUSD;GBPUSDSwitch to whitelist with EURUSD and GBPUSD as the full allowed list (at least one symbol required, otherwise rejected)
Any modeeaonexcept=XAUUSD;BTCUSDSwitch to blacklist with XAUUSD and BTCUSD as the full blocked list (at least one symbol required, otherwise rejected)

What the filter blocks: Entry commands: buy, sell, buylimit, buystop, selllimit, sellstop. buyat and sellat are also filtered, but at the EA (the rejection shows in the MT5 Experts tab) rather than server-side, so unlike the other six their filter rejections do not appear in Signal Logs → Rejected Signals.

What the filter never blocks: Close commands (closelong, closeshort, closeall, closecancelall, closeallprofit, closeallloss), cancel commands (cancellong, cancelshort, cancelall), and trade management commands (breakeven, trail, modify, notrail, nobreakeven).


Settings Source and the Symbol Filter#

The EA Settings Source (configured in the MT5 EA input dialog) controls where the EA gets most of its settings — but the symbol filter is a deliberate exception.

Symbol filters are server-authoritative in both modes. A webhook eaon/eaoff, or a white/black-list edit on the dashboard, updates the server-side filter, is pushed to the running EA in real time, and is re-applied automatically every time the EA (re)connects — whether the Settings Source is Dashboard or MetaTrader.

BehaviorDashboard ModeMetaTrader Mode
Symbol-filter update saved to accountYesYes
Symbol-filter pushed to running EA immediatelyYesYes (symbol-filter fields only)
Symbol-filter persists across an EA restartYesYes
Source of the other settings (lots, magic, risk limits, active hours)Server (dashboard)MT5 EA input dialog

What Settings Source actually changes is the source of the non-filter settings (default lot size, magic number, risk limits, active hours, etc.): in Dashboard mode they come from the server; in MetaTrader mode they come from the EA's MT5 input dialog. The symbol filter is server-driven in both.

Persistence: because the filter lives on the server, it survives an EA restart — on reconnect the server re-sends the current filter and the EA re-applies it. The EA also caches the filter locally, so it is restored even on an offline restart (server unreachable at startup), then reconciled with the server on the next connection.

The only filter-related thing Settings Source does not override is a global emergency stop from closealleaoff/closecancelalleaoff: that latch is separate and is cleared only by eaon,ALL (not by a filter edit or a settings push).


User-Facing States#

StateWhat It MeansImpact
Blacklist mode (empty list)Default state: all symbols tradeableEvery entry signal executes normally
Blacklist mode (symbols listed)Listed symbols are blocked from new entriesSignals for blocked symbols are rejected; unlisted symbols trade normally
Whitelist mode (symbols listed)Only listed symbols accept new entriesAny signal for a symbol not on the list is rejected
Whitelist mode (empty list)All symbols blockedNo entry signals are accepted for any symbol
EA shutdown (via closealleaoff / closecancelalleaoff)Global halt flag set; existing positions closed; symbol filter unchangedNo new entries accepted for any symbol; you must send eaon,ALL to resume

Where You Can View the Current Filter#

The dashboard Licenses page displays the current symbol filter for each license inline on the license card. By default the section is collapsed behind an eye-toggle icon (matching the masked license-key reveal pattern). When you click the eye, the panel expands to show:

  • The current filter mode as a colored badge: Blacklist mode (blue) or Whitelist mode (amber).
  • The symbol count next to the badge.
  • The full list of symbols rendered as monospace badges, sorted alphabetically.
  • A muted-text fallback if the list is empty: "No symbols listed: all symbols enabled" (blacklist) or "No symbols listed: all trading blocked" (whitelist).

The panel updates live when the filter changes anywhere (including via webhook commands like eaon, eaoff, eaoffexcept, eaonexcept, and via the License Settings modal). If you send eaoff,EURUSD from TradingView while looking at the Licenses page you'll see EURUSD appear in the blacklist within about a second without refreshing. The live-update path is the dashboard websocket; if your tab is hidden the websocket disconnects, and on returning to the tab the panel re-fetches automatically.

When you open the panel manually, the platform always re-validates against the server (even if cached data exists), so the displayed state is never stale relative to a deliberate action.

For "is EURUSD currently disabled on my license?" or "what's the current whitelist for license X?", go to the Licenses page and click the eye icon on the license card. No webhook command needed to inspect state.


Error Messages and Meanings#

Errors you see in the TradingView alert response, Signal Logs → Rejected Signals tab, and the MT5 Experts tab#

Every server-side rejection below is also pushed to your connected EA and printed in the MT5 Experts tab in real time (e.g. ⚠ Signal rejected by server: <command> <symbol> — <reason>), so you see it locally in MetaTrader, not only on the dashboard and the TradingView alert response. (This requires the EA to be connected; if it is offline the rejection is still recorded in Signal Logs.)

"Symbol required for eaon. Use a specific symbol (e.g., EURUSD) or 'ALL' to enable all trading."

Cause: An eaon signal was sent with no symbol field and no shorthand value. The platform cannot determine which symbol to enable.

What to do: Add a symbol. Use the standard format (LICENSE,eaon,EURUSD), the shorthand format (LICENSE,eaon=EURUSD), or the special keyword ALL (LICENSE,eaon,ALL).

Surface: TradingView alert response body. Appears in the Signal Logs → Rejected Signals tab if the platform was able to extract a valid license from the payload. The row shows the license, the command, and the verbatim reason. Very long messages may be shortened (not a risk here; this message is short).


"Symbol required for eaoff. Use a specific symbol (e.g., EURUSD) or 'ALL' to disable all trading."

Cause: An eaoff signal was sent with no symbol or shorthand value.

What to do: Same as above. Add a symbol or use ALL.

Surface: TradingView alert response body. Signal Logs → Rejected Signals tab (license must be extractable for the row to appear).


"eaoffexcept requires at least one symbol. Provide a semicolon-separated list (e.g., eaoffexcept=EURUSD;GBPUSD) of symbols to allow."

Cause: An eaoffexcept signal was sent with no symbols (e.g., LICENSE,eaoffexcept= or just LICENSE,eaoffexcept).

What to do: Provide a semicolon-separated list of symbols to allow (e.g., eaoffexcept=EURUSD;GBPUSD). If the actual intent is to block all trading, send eaoff,ALL instead.

Surface: TradingView alert response body. Signal Logs → Rejected Signals tab (license must be extractable for the row to appear).


"eaonexcept requires at least one symbol. Provide a semicolon-separated list (e.g., eaonexcept=XAUUSD;BTCUSD) of symbols to block."

Cause: An eaonexcept signal was sent with no symbols.

What to do: Provide a semicolon-separated list of symbols to block (e.g., eaonexcept=XAUUSD;BTCUSD). If the actual intent is to enable all trading, send eaon,ALL instead.

Surface: TradingView alert response body. Signal Logs → Rejected Signals tab (license must be extractable for the row to appear).


"That would put N symbols in your filter, over the 100-symbol limit, so your symbol filter is unchanged. Consider using {eaoffexcept | eaonexcept} ({whitelist | blacklist} mode) to ..."

Cause: An EA control command (any of eaon, eaoff, eaoffexcept, eaonexcept, or an inline eaon= / eaoff= parameter on a trade command) would leave the symbol filter with more than 100 entries. The exact triggers:

  • A single eaoff,SYMBOL when the blacklist is already at 100 symbols, OR a single eaon,SYMBOL in whitelist mode when the whitelist is already at 100.
  • A bulk eaoff=A;B;C;... or eaon=A;B;C;... whose union with the existing list would push the count past 100.
  • An eaoffexcept=... or eaonexcept=... with more than 100 symbols in the submitted list.
  • Any of the above combined with a trade command as an inline parameter (the whole signal is rejected, including the trade).

The platform never silently truncates. The filter is left exactly as it was before the rejected command.

What to do: Adopt the inverse filter mode. If you're trying to maintain a blacklist that has grown past 100, the actual intent is usually "I want to allow only a small set of symbols": that's a whitelist. The rejection message names the specific suggested command (eaoffexcept or eaonexcept) and the suggested mode in the body. Rebuild the filter with the inverse approach using a much shorter list.

Surface: TradingView alert response body. Signal Logs → Rejected Signals tab with block_reason="filter_list_too_long". The full rejection message including the would-be size and the suggestion is shown verbatim in the row.


"Invalid symbol format: 'SYMBOL'. Symbols must be 1-20 alphanumeric characters (e.g., EURUSD, XAUUSD). Characters like '/', '-', '_' are not allowed."

Cause: The symbol provided contains a character the platform does not accept (a slash, hyphen, underscore, space, or any non-alphanumeric character). Also triggered by symbols longer than 20 characters.

What to do: Correct the symbol. Remove any separators (EUR/USD → EURUSD). Check that the broker's symbol name matches the format requirement. Most brokers use plain alphanumeric names; some append a suffix like EURUSD. or EURUSDm: these are valid as long as they contain no special characters and are 20 characters or shorter.

Surface: HTTP 400 returned to TradingView. Signal Logs → Rejected Signals tab if the license was extractable.


"Invalid symbol format in eaon/eaoff parameter: 'SYMBOL'. Symbols must be 1-20 alphanumeric characters (e.g., EURUSD, XAUUSD). Characters like '/', '-', '_' are not allowed."

Cause: Same as above, but the invalid symbol appeared in an inline eaon= or eaoff= parameter attached to a trade command (e.g., buy,EURUSD,eaoff=EUR/USD).

What to do: Fix the symbol in the eaon/eaoff parameter value.

Surface: HTTP 400 returned to TradingView. Signal Logs → Rejected Signals tab if the license was extractable.


"Failed to update symbol filter"

Cause: This signals a server-side configuration or auth problem that needs operator or support attention; a retry alone will not clear it. Genuinely transient backend blips are auto-queued and reconciled, and are reported as "queued," not as this error.

What to do: Contact support, since this needs an operator to resolve the server-side configuration. Retrying the same command will not clear it.

Surface: HTTP 503 returned to TradingView.


Signal blocked because symbol is disabled (trade command, not an EA control command)

When you send a buy or sell for a symbol that is currently disabled, the platform rejects the signal. The rejection message identifies the specific reason:

  • In blacklist mode: "Symbol EURUSD is blocked (in blacklist)"
  • In whitelist mode: "Symbol EURUSD is blocked (not in whitelist)"

Surface: HTTP 400 returned to TradingView. Signal Logs → Rejected Signals tab with the offending symbol highlighted.


Where to look#

SymptomPrimary surface to check
eaon/eaoff returned an error in TradingViewTradingView alert execution status, then Signal Logs → Rejected Signals tab
Symbol still tradeable after eaoffDashboard → EA Settings → Symbol Filter (verify current filter state)
Symbol still blocked after eaonSame as above
Trade signals rejected with "symbol blocked"Signal Logs → Rejected Signals tab: the row shows the filter mode and reason
EA not responding to filter changesConfirm the EA is connected (filters push live in both Settings Source modes; if offline, the change applies on reconnect), then verify the filter state in Dashboard → EA Settings → Symbol Filter
closealleaoff fired but account not flatMetaTrader Experts tab on your terminal: check for broker-side rejections or requotes

Plan and Tier Differences#

EA control commands (eaon, eaoff, eaoffexcept, eaonexcept, closealleaoff, closecancelalleaoff) are available on every tier (Trial, Standard, Pro, and Premium) with no restrictions on which commands can be used.

FeatureTrialStandardProPremium
eaon / eaoff (single symbol)AvailableAvailableAvailableAvailable
eaon / eaoff (multi-symbol shorthand)AvailableAvailableAvailableAvailable
eaoffexcept / eaonexceptAvailableAvailableAvailableAvailable
closealleaoff / closecancelalleaoffAvailableAvailableAvailableAvailable
EA control commands count toward signal quotaYesYesYesYes
Real-time filter push (Dashboard mode)AvailableAvailableAvailableAvailable

EA control signals count toward the per-minute and per-day rate limits like any other signal type. In practice, a single eaon or eaoff consumes one signal from the quota and completes in milliseconds; quota exhaustion from EA control commands alone is extremely unlikely.


Known Edge Cases and Gotchas#

  • Sending eaoffexcept or eaonexcept with no symbols (eaoffexcept= or eaonexcept= with nothing after the equals sign, or just the bare command) is rejected. It appears in Signal Logs → Rejected Signals with block_reason="missing_symbol" and a message that names the offending command and shows an example. The filter is not modified. If the intent was a full block, send eaoff,ALL; if a full enable, eaon,ALL.

  • Inline eaon= and eaoff= follow split ordering: eaon runs before the trade, eaoff runs after. This means sell,EURUSD,eaoff=EURUSD (exit and disable) and buy,EURUSD,eaon=EURUSD (re-enable and enter) both work in a single signal. buy,EURUSD,eaoff=EURUSD is now a "one final entry then stop" pattern: the buy executes once, the symbol is disabled, subsequent buys on EURUSD are rejected by the filter.

  • The split ordering creates a response-shape asymmetry worth knowing. Inline eaon= rejection blocks the whole signal: if the eaon would push the whitelist past the 100-symbol limit, the trade does not execute and the signal is recorded in Signal Logs → Rejected Signals with block_reason="filter_list_too_long". Inline eaoff= rejection does NOT block the trade: because eaoff fires after the trade is already queued, a filter overflow at this point is reported as a filter_warning field in the response body, the trade still executes (and its Signal Logs row reflects the trade outcome), and the filter stays unchanged. If your exit-and-disable signal didn't disable the symbol, check the response body for a filter_warning rather than expecting a Rejected Signals row.

  • Inline eaoff= combined with delay= is currently not applied. A signal like buy,EURUSD,delay=300,eaoff=EURUSD queues the buy for execution in 300 seconds, but the inline eaoff is silently dropped: EURUSD is never disabled, neither at queue time nor when the delayed buy fires. So no other strategy's EURUSD entry is blocked during the 300-second window. Workaround: to disable a symbol alongside a delayed entry, send the eaoff as a separate, non-delayed alert.

  • The 100-symbol filter limit is now a hard reject, not a silent truncation. Any submission (single, bulk, or set-mode) that would leave the filter with more than 100 entries is rejected with block_reason="filter_list_too_long" and a message naming the inverse-mode alternative. The filter stays unchanged in that case. If you keep accumulating symbols on a blacklist, you almost always benefit from switching to a whitelist (and vice versa). That's the suggestion the rejection message gives you.

  • Duplicate symbols in a list are silently removed. eaoff=EURUSD;EURUSD;GBPUSD results in a list of EURUSD and GBPUSD. This is not an error.

  • Symbol filters are server-authoritative in both Settings Source modes: an eaon/eaoff (or a dashboard list edit) pushes to the running EA in real time whether it is in Dashboard or MetaTrader mode, and persists across restarts. Settings Source only governs the EA's other settings (lots, magic, risk limits). If a filter change does not seem to take effect, check whether the EA is connected — not the Settings Source.

  • The closealleaoff and closecancelalleaoff commands send close orders to the broker with a very wide deviation allowance so that closes succeed even during volatile conditions. This matches the behavior of all other close commands. If a close is filled at an unfavorable price due to market conditions, this is expected: the command prioritizes execution over price.

  • eaoff does not close existing positions on the disabled symbol. It only blocks future entry signals. To exit existing trades on a symbol you are disabling, combine eaoff with a close command, or use closealleaoff for a full halt.

  • eaon and eaoff as inline parameters (combined with a trade command) accept only a single symbol. A semicolon list is rejected as an invalid symbol (use the standalone eaon=A;B;C command form for multiple symbols). The ALL keyword is accepted inline: eaon=ALL / eaoff=ALL trigger the all-enable / all-disable behavior, so use them deliberately.


Frequently Asked Questions#

Q: Will eaoff close my open positions on that symbol? A: No. eaoff only blocks new entry signals. Existing positions on the symbol continue to run, and you can still close them with any close command. If you want to exit existing positions and disable the symbol in one step, use closealleaoff or combine eaoff with a close command in the same signal (see next FAQ).

Q: Can I close a position and disable the symbol in one signal? A: Yes. Combine a close command with an inline eaoff= parameter. For example, LICENSE,closelong,EURUSD,eaoff=EURUSD closes any open EURUSD long positions and adds EURUSD to the blacklist for future signals. The same pattern works with a market exit (sell,EURUSD,eaoff=EURUSD) or a "one final entry then stop" buy (buy,EURUSD,eaoff=EURUSD). The trade always executes first, then the filter update is applied. If you need a stronger halt (close everything on every symbol and disable all trading), use closealleaoff or closecancelalleaoff instead.

Q: My EA is in MetaTrader mode. Will eaon/eaoff still work? A: Yes — fully. Symbol filters are server-authoritative regardless of Settings Source, so the change is pushed to your running EA in real time in MetaTrader mode exactly as in Dashboard mode (and saved so it persists across restarts). Settings Source only changes where your other settings come from (lot size, magic, risk limits): in MetaTrader mode those stay under your MT5 input dialog, while the symbol filter still follows the server.

Q: I sent eaoff for several symbols individually. Can I undo all of them at once? A: Yes. Send eaon,ALL to clear the entire blocked list and switch back to blacklist mode with nothing in it, making every symbol tradeable immediately.

Q: What happens to pending orders on a symbol I disable with eaoff? A: Pending orders already placed on the broker are unaffected. eaoff only blocks new signals, not existing orders. To cancel pending orders, use cancellong, cancelshort, or cancelall.

Q: Can I use eaoffexcept and then add more symbols later without resending the full list? A: Yes. After setting a whitelist with eaoffexcept, send eaon=NEWSYMBOL to add individual symbols to the existing whitelist. Each eaon call appends to the current list rather than replacing it.

Q: Will my filter settings survive an EA restart? A: Yes, in both Settings Source modes. The filter lives on the server, so when the EA reconnects after a restart it re-receives and re-applies the current filter automatically. The EA also caches the filter locally, so it is restored even if the EA restarts while the server is briefly unreachable, then reconciled with the server on the next connection.

Q: I sent closecancelalleaoff, but I still see pending orders in MT5. What happened? A: The EA may have been offline when the command arrived, or the broker rejected some of the cancel requests. Check the MetaTrader Experts tab for errors around the time the command was sent. If the EA was offline, the command will execute once it reconnects. For immediate action, cancel the remaining orders manually in MetaTrader.

Q: Is there a way to see the current filter state without sending a command? A: Yes. The dashboard under EA Settings shows the current filter mode (blacklist or whitelist) and the full list of symbols in that list, updated in real time.