FX Blue Personal Trade Copier for MT4 - User guide

Author: fxblue
For a PDF version of this user guide, please download the app

1Overview of the Personal Trade Copier

1.1Purpose of the trade copier

The Personal Trade Copier duplicates trades between two (or more) copies of MetaTrader 4 running on the same computer. You place trades in one copy of MT4, and these are replicated almost instantly in the other copy of MT4. The trade copier duplicates both manual and automated trading.

You can copy from multiple instances of MT4 into a single receiver, and vice versa, by running more than one copy of the sender and receiver.

The sending copy of MT4 does not need the ability to place trades. Therefore, the sending copy can be logged in using the read-only MT4 "investor" password.

1.2Licence

Unless otherwise specified in writing by FX Blue, this software is licensed for personal use only. You are not allowed to distribute it to other people, regardless of whether or not money is changing hands. You only have a licence to use the software if you, personally, downloaded it from our website.

The software is provided entirely at the user's risk, and you should check it thoroughly before deploying it on computers trading real money. FX Blue accepts no responsibility whatsoever for any loss of any kind caused by installation or use of the software.

2.1Installing the trade copier

You need two (or more) copies of MT4 installed on the same computer.

The installer from our website lets you choose multiple copies of MT4 and then copies the sender and receiver EAs into MT4.

You need to restart MT4 in order for its Navigator list to update - or, in newer versions of MT4, you can right-click over the Navigator and use the "Refresh" option.

2.2Running the sender

In the sending instance of MT4 you open a new chart for any symbol and add the "FX Blue - TradeCopy Sender" EA to the chart, by double-clicking on it in the Navigator list or dragging it onto the chart. The EA's "Allow DLL imports" setting must be turned on.

You do not need to run multiple copies of the EA on charts for each symbol which you trade. You should only run one copy of the sender EA, on any chart. This will duplicate all trades for all symbols.

The sender EA does not need the ability to place orders. Therefore, it can be running on an account which is logged in using the read-only MT4 "investor" password.

N.B. If the sending MT4 account is not in USD, then the MT4 Market Watch must contain the currency pair for converting to USD. For example, if the sender's deposit currency is GBP or JPY, then the Market Watch must contain GBPUSD or USDJPY.

2.3Running the receiver

In the receiving instance of MT4 you open a new chart for any symbol and add the "FX Blue - TradeCopy Receiver" EA to the chart, by double-clicking on it in the Navigator list or dragging it onto the chart. The EA's "Allow DLL imports" setting must be turned on.

You do not need to run multiple copies of the EA on charts for each symbol which you trade. You should only run one copy of the receiver EA, on any chart.

N.B. The Market Watch must contain all the symbols which are going to be traded. In addition, if the receiving MT4 account is not in USD, then the MT4 Market Watch must contain the currency pair for converting to USD. For example, if the receiver's deposit currency is GBP or JPY, then the Market Watch must contain GBPUSD or USDJPY.

2.4Multiple senders and receivers

A sender and receiver are identified by a channel name, which you can control using the EAs' parameters. The default channel name is "TradeCopy".

There should only be one sender EA and one receiver EA using a channel.

A single copy of the sender EA can broadcast on multiple channels, but each receiver EA can only listen on a single channel.

If you want to send trades from one copy of MT4 to 3 receiver copies of MT4, you should do the following:

  • In the sender instance of MT4, you run one copy of the sender EA. You set the Channel parameter in the EA to a comma-separated list of the channel names which the sender should use. For example: Channel1,Channel2,Channel3. (Alternatively, you can also run three copies of the sender EA, each broadcasting on one of the channels.)
  • In each receiver instance of MT4, you run a copy of the receiver EA and configure each one to use one of the three channels you have set up in the sender.

If you want a single copy of MT4 to receive trades from 3 senders, then you should do the following:

  • In the receiver instance of MT4, you run three different copies of the receiver EA on different charts, using different channel names.
  • In each sender instance of MT4, you use one of the three channels you have set up in the receiver.

Each receiver EA running in a copy of MT4 should use a different magic number for its trades. You should either leave the receiver EA's MagicNumber parameter set to zero, in which case it will automatically choose a magic number based on the channel name, or you should manually set each receiver EA to use a different magic number.

2.4.1Distinguishing between multiple instances of the Copier

If you are running multiple instances of the Copier then you can make it easier to distinguish between them in two ways: by setting a description (which is displayed in the top-right of the chart) and by changing the background colour.

Both the Sender EA and Receiver EA have UserDescription and BackgroundColour settings.

2.5Testing the trade copier

The following screenshots are examples of the Sender and Receiver running successfully:

(The full-chart background is designed to reduce support queries from new MT4 users who otherwise try to run more than one EA on the same chart. The colour can be changed using the BackgroundColour setting in each EA.)

Once both the sender and receiver EAs are running, the receiver should shortly receive a "heartbeat" message from the sender and update its status on screen.

Both EAs display their current status in the top-right of the chart. If no status is visible, please see the troubleshooting notes below.

2.6Performance on VPS systems

On some low-spec VPS systems the Copier may use too much processing power, particularly if there is a large number of open trades on the sender account.

You can reduce the Copier's processing needs by increasing the TradeWatchFrequencyMS parameter in the sender EA. The default value of this parameter is 50. Increasing the value to e.g. 100 will reduce processor usage, typically without any significant difference in copying speed.

2.7Moving the Copier to a new computer

In most cases you can move the Copier to a new computer simply by installing the software on that computer; shutting it down on the old computer; and starting it up on the new one.

To avoid any possible problems, it is preferable to start the Sender first; wait until MT4 is definitely connected to the broker and has received the list of open positions (if any); and then start the Receiver.

If you have turned on the UseOriginalOrderComments setting then, as described below, you will also need to copy the contents of the MQL4\Files directory from the old computer to the new one. If UseOriginalOrderComments is turned on, then the relationship between ticket numbers on the sender and receiver has to be tracked using a file on disk, and this must be transferred to the new machine.

You can test the new computer by logging in the receiver copy of MT4 using the read-only investor password. This will prevent it being able to open or close trades. You can use this to check that the connection to the sender is successful, and that it is not trying to close any existing open positions, and then log back in using the normal master password once satisfied.

3.1Trade placement and closure

The sender EA sends a message to the receiver EA as soon as it spots that there is a new open order in its copy of MT4. The receiver EA will then attempt to place the same trade. Transmission is more or less instant; the time taken to copy the trade should depend almost entirely on your broker(s), not on the speed of transmission between the two EAs.

The same applies to trade closure. As soon as it spots that a previously open order has been closed, the sender EA tells the receiver EA to close its trade.

By the default, the Copier ignores any positions which are already open when it starts running. It is possible to copy these orders as well, but you need to adjust the system's slippage tolerance.

3.1.1Speed of processing on the receiver

Please note that the receiver may not be able to process new open and close instructions immediately. Orders have to be processed in sequence, and the receiver cannot not start working on a new signal if it is currently waiting for the broker to execute a previous trade.

If two new-order messages are sent at the same time, but the receiving broker takes 5 seconds to execute the first order, then processing of the second order will take at least 5 seconds (plus the time then required to execute the second order).

3.1.2Stop-loss and take-profit on the receiver

The stop-loss and take-profit on the receiver's trade are only a safeguard in case the connection with the sender is lost. Under normal circumstances, the receiver's trade will be closed as soon as the sender's trade is closed. The receiver's s/l and t/p are only used if either (a) the connection with the sender is lost and no close instruction is received, or (b) price differences between brokers mean that the receiver's s/l or t/p is hit before the sender's s/l or t/p.

As a result, please note the following:

The optional FixedSLPips and FixedTPPips parameters specify a maximum value for the stop-loss and take-profit. Trades can still be closed when the sender's trade is closed, before the s/l or t/p is hit on the receiver.

The cash-risk lot-sizing modes therefore specify a maximum cash risk (because they use FixedSLPips). The s/l controls the maximum amount of money which the receiver can lose, but the receiver's trade can still be closed at any time and at any profit/loss, when the sender's trade is closed.

If you want the receiver to ignore trade-closure on the sender, and only to close trades when the s/l or t/p is hit on the receiver, then turn on the IgnoreAllExitSignals parameter.

3.1.3Existing orders which are open when the Copier starts

By default, the system will not copy any positions which are already open when it starts running. It will only copy new positions which are opened once the software is active.

You can change this behaviour by turning on the AllowExistingOrders in the Sender EA.

However, there can be substantial differences in price between the sender and the receiver (because the sender's position was opened minutes or even hours ago, whereas the receiver's position is being opened right now). In order to copy existing positions, you will either need to increase the receiver's slippage tolerance (the AllowSlippagePips parameter), or turn off the slippage check entirely using either BroadcastAllOrdersAtMarket in the Sender EA or TradeAllOrdersAtMarket in the Receiver EA.

3.2Heartbeats

N.B. The heartbeat period does not control how quickly orders are copied. Open and close messages are always sent immediately, and processed as quickly as possible.

The sender EA sends a periodic "heartbeat" message, every 10 seconds by default. This states which orders should still be open. If a receiver misses a trade-closure instruction, e.g. because its copy of MT4 is not running at the time, then it should close the order when it next receives a heartbeat from the sender.

Changes to a trade's s/l or t/p are also sent in the heartbeat message. Therefore, there may be a delay of up to 10 seconds between the s/l or t/p changing in the sender's copy of MT4 and the receiver making the change. However, if the trade is closed out on the sender within those 10 seconds because the s/l or t/p is hit, that should lead to an immediate close instruction being sent to the receiver.

Changes to the entry price on a pending order are also sent in the heartbeat, and therefore updated within 10 seconds.

3.3Pending orders

By default the trade copier does not send pending orders. It only sends a message to the receiver once a pending order is filled and turns into a buy or sell order.

Copying pending orders can be disadvantageous and dangerous. We recommend that you do not do this (and pending orders will fail if using the Copier to send trades to platforms other than MT4).

  • If the receiver's spreads are better than the sender's spreads then, assuming that slippage averages out to be neutral, it is better for the receiver to enter at market when the sender is filled than to enter (and exit) at the sender's price.
  • If the receiver's spreads are worse than the sender's spreads then the receiver can be filled without the sender being filled, and there can be an unmanaged trade on the receiver.

For example, let's say that you are trading the breakout of yesterday's range, and you have a buy-stop at yesterday's high. This could get triggered on the receiver without being triggered on the sender, because of either slight price differences between the two accounts, or wider spreads on the receiver. If the price then retraces, the sending copy of MT4 will be unaware that the receiver has a trade which needs to be managed, but the receiver will have an ever-increasing loss and will not be receiving any instructions to close the position.

However, you can configure the trade copier to send pending orders by turning on the optional IncludePendingOrders parameter.

You can then use the RequireSenderFillWithinMinutes parameter to limit the risk at the receiver end. If the receiver's order is filled, but the sender's order remains pending, then the receiver can be configured to close its order after this number of minutes (ignored if zero).

3.4Lot sizing and risk

The software's default settings (UseRiskFactor=1) will trade the same relative lot size on the sender and receiver. For example: the sender trades 0.50 lots and has equity of $10,000; the receiver has equity of $2000 and trades 0.10 lots.

The software has several different lot-sizing modes which you can choose from, using the following settings. These are processed in order: for example, EquityPerLot is only used if UseFixedLotSize, UseRiskFactor and LotSizeMultiplier are all set to zero.

UseFixedLotSize

UseRiskFactor

LotSizeMultiplier

EquityPerLot

BalancePerLot

CashRiskFixed

CashRiskEquityPercent

CashRiskBalancePercent

NotionalDepositVolume

To repeat: only one of the above settings should be turned on. All the other values should be set to zero.

3.4.1Trading a fixed lot size on all orders

You can trade a fixed lot size on all orders, regardless of what volume the sender trades, by using the UseFixedLotSize parameter (and turning off the other modes). For example, setting UseFixedLotSize to 0.25 will trade 0.25 lots on every order regardless of whether the sender trades 0.25, 0.01, 1.53 etc.

3.4.2Trading the same lot size as the sender, or a multiple of the sender's lot size

You can trade a multiple of the sender's lot size using the LotSizeMultiplier parameter (and turning off the other modes). For example, a value of 0.5 means that the receiver will trade half the sender's lot size, and a value of 3 means that the receiver will trade triple the sender's lot size.

A value of 1 for LotSizeMultiplier (and turning off the other modes) means that the sender and receiver trade exactly the same lot size.

Please note that trading the same lot size does not mean that the receiver is taking the same amount of risk. For example, the sender and receiver both trade 0.10 lots, but the sender has equity of $5000 and the receiver has equity of $2500. The receiver is taking double the risk of the sender.

3.4.3Trading the same relative lot size (based on relative equity)

You can trade the same relative lot size on the sender and receiver using the UseRiskFactor parameter (and turning off the other modes). This is the software's default setting.

A value of 1 for UseRiskFactor means that the lot size will be adjusted between the sender and receiver based on their relative equity (converted to US dollars on both sides, if necessary). For example, if the sender has equity of $5000 and trades 0.20 lots, then the receiver will trade 0.10 lots if it has equity of $2500.

You can adjust the relative risk by increasing or decreasing UseRiskFactor; a value of 1.5 means that the receiver will take 50% more risk than the sender.

For example, if the sender's equity is $2000 and the receiver's equity is $4000, and UseRiskFactor is set to 1.5, then the receiver will trade three times the lot size of the sender - i.e. 4000 / 2000 x 1.5 = 3.

3.4.4Fixed lot sizes based on account equity or balance

You can trade a fixed lot size on the receiver based on its equity or balance, ignoring the sender's lot size, using the EquityPerLot or BalancePerLot parameter (and turning off the other modes).

The EquityPerLot parameter specifies how much equity the receiver must have in order to trade 1 whole lot (and the BalancePerLot carries out the same calculation in relation to the balance instead of the equity).

For example, if EquityPerLot is set to 50000, and the current account equity is 10000, then the receiver will trade 10000 / 50000 = 0.20 lots.

3.4.5Lot sizing based on maximum cash risk

You can configure the receiver to risk a specific cash amount, or a percentage of your account, using the CashRiskFixed, CashRiskEquityPercent, or CashRiskBalancePercent parameter (and turning off the other modes).

CashRiskFixed: specifies a fixed cash amount to risk per trade, e.g. $100

CashRiskEquityPercent: specifies a percentage of your account equity to risk, e.g. 2.5%

CashRiskBalancePercent: specifies a percentage of your account equity to risk, e.g. 2.5%

In order to use any of these settings, you must also use the FixedSLPips parameter to set a stop-loss on each trade.

For example:

You set CashRiskEquityPercent to 1 (meaning 1% of your equity).

You set FixedSLPips to 50.

Your account equity is $10000.

The receiver calculates that a 50-pip stop-loss represents a loss of $500 per whole lot.

You have asked to risk 1%, i.e. $100 of your equity

Therefore, the receiver trades $100 / $500 = 0.20 lots, risking a maximum of $100 if the s/l at 50 pips is hit.

Please note that these risk settings are maximums: trades can be closed at any time when the sender's position is closed, before the fixed stop-loss is hit.

3.4.6Mini, micro and cent accounts

The software automatically handles "micro" and "mini" MT4 accounts (where the lot size is 10K or 1K instead of the usual 100K).

The software cannot automatically detect "cent" accounts (where the lot size is 100K, but meaning 100,000 cents rather than $100,000). By default, the receiver's lot sizes will be 100 times too large on these accounts. You can either turn on the CentAccount setting, or you can divide the values for UseRiskFactor or LotSizeMultiplier by 100 (e.g. setting them to 0.01 instead of 1.00).

3.4.7Minimum lot sizes

Conversion using settings such as UseRiskFactor or LotSizeMultiplier can lead to a lot size which is smaller than the broker's minimum. The receiver will not place these trades unless you turn on the RoundUpToBrokerMinimum setting. (This rejection will be included in the information which is written to the MT4 Experts log.)

In addition, you can use the MaxLots and MinLots parameter to put a cap on the lot sizes which the receiver trades. For example, setting LotSizeMultiplier to 2 with MaxLots set to 0.50 means "trade double the sender's lot size, but never more than 0.50 lots".

3.5Broker symbol names and suffixes

Some MT4 brokers use different suffixes for the same symbol. For example, some brokers may refer to EURUSD as EURUSDFXF, EURUSDcx, EURUSDi, EURUSDm etc.

The sender and receiver should automatically adjust between different symbol names on different brokers. If the receiver is unable to place a trade then it is probably because the symbol is not in its Market Watch.

The Receiver EA does have a ForexSymbolSuffix parameter, but the Receiver will auto-detect this if the parameter is left blank. You should only need to set this parameter manually if your account has access to more than one version of each symbol (e.g. both EURUSD and EURUSD+).

Some non-forex symbols need special mapping. For example, most MT4 brokers refer to spot gold as XAUUSD, but there are a few brokers who use a different symbol name such as GOLD. You can use the Receiver EA's CustomSymbolMappings parameter to translate any such symbols. For example, if the sending account's broker uses GOLD and SILVER whereas your broker uses XAUUSD and XAGUSD, then you would enter GOLD=XAUUSD,SILVER=XAGUSD in the CustomSymbolMappings parameter.

3.5.1Custom pip-sizes for symbols

By default, the software will use a pip-size definition based on the number of digits which the broker quotes in the price. For example, if the price is quoted to 2 or 3 decimal places then the software will use a pip size of 0.01.

You can override this for specific symbols using the CustomPipSizes setting. For example, you can set this to XAUUSD=1,GER30=1 to use a pip size of 1.00 on XAUUSD and GER30.

3.5.2Custom volume multipliers for symbols

The software will automatically convert between normal and "mini" accounts (where the lot size for forex symbol is 10,000 rather than the usual 100,000).

However, some brokers have different contract sizes for CFDs. One broker may have a contract size for GER30 (Dax) of 1 whereas another has a contract size of 0.01. You can adjust the volumes from the sender for specific symbols using the CustomLotMultipliers setting.

For example, if the sender's DAX and CAC40 contracts are 100 times smaller than the receiver's contracts, then the following setting will adjust the calculation on the receiver to make the trades 100 times smaller. The symbol names in this list should be the exact symbol names on the receiver, including any suffix:

DAX=0.01,CAC40=0.01

3.6Market execution

Some brokers use "market execution" where an s/l or t/p has to be placed separately from a buy or sell order. The receiver caters for this by always placing the trade first, and then setting any s/l and t/p afterwards. By default, the CloseOrdersImmediatelyIfSLFails parameter will mean that trades are immediately closed if the order placement succeeds but the s/l or t/p then fails.

3.7Hedging vs. non-hedging

At the moment the trade copier does not convert between hedging and non-hedging accounts. If the receiver is running on a broker which does not allow hedging, then trades will fail if the messages coming from the sender break the hedging rules.

3.8Magic numbers

The receiver uses an order's magic number to identify which orders belong to it, versus which orders are from manual trading or other EAs running on the account. Therefore, magic numbers are not copied from the sender account.

The receiver EA uses the same magic number for all orders which it processes. By default, it automatically selects a magic number based on the channel name. You can choose your own magic number by setting the MagicNumber parameter to something other than zero.

If you trade multiple EAs on the sending copy of MT4, and you want each order in the receiving copy of MT4 to have a different magic number based on the magic number in the sending copy of MT4, then you can do the following:

  • Run multiple copies of the sender EA, and set the IncludeMagicNumbers parameter or the IncludeOrderComments parameter so that each sender only includes the orders from one of the EAs on the account. Each sender EA must use a different channel name.
  • Run multiple copies of the receiver EA (using the same channel names as in the sender EA). You can either leave the receivers' MagicNumber parameters set to zero, in which case the magic numbers will be different for each channel but will not match the sending copy of MT4, or you can configure each receiver to use the same magic number which is being used in the corresponding sender EA to filter the orders on the channel.

3.9Partial closes

The sender and receiver are capable of handling partial closes.

However, the only way of detecting partial closes in MT4 is via the order comment. If brokers do not use the standard convention for partial closes (e.g. order comments such as "from #123456") then the software may not be able to handle partial closes correctly.

3.10Inverting trade direction

The receiver can be configured to invert the broadcaster's trade direction, turning buys into sells and vice versa. (This feature has been included at user request; we are not aware of any loss-making trading system which can be made profitable by inverting it.)

In order to use this feature you need to turn on the receiver EA's InvertTrades parameter, and you will also need to do one of the following:

  • Turn on the TradeAllOrdersAtMarket parameter. This means that the receiver ignores the sender's entry price (because e.g. the sender is buying at the ask price whereas the receiver will be selling at the bid price).
  • Increase the AllowSlippagePips parameter, to cater for the fact that the difference between the sender's entry price and the receiver's entry price will be at least the size of the spread.

3.11Order comments

By default, the receiver uses the MT4 order comment to track the ticket numbers on the sender account. You can change this behaviour, and get the receiver to use the original comments from the orders on the sender account, by turning on the UseOriginalOrderComments parameter in the receiver.

Alternatively, you can use the UseCustomOrderComment parameter to use a fixed comment for all orders.

However, please note that these parameters have implications for disaster-recovery. If you turn on UseOriginalOrderComments or UseCustomOrderComment, then the ticket numbers on the sender account are tracked using a file on disk (in MT4's MQL4\files directory). If this file is deleted - or is unavailable for some other reason, e.g. because you are starting up MT4 on a new computer in an emergency - then the receiver will close all its orders because it can no longer link them to the sender's heartbeat.

3.12Binary options

The Copier can handle any order which can be placed through MT4. This includes binary options where the broker has a plug-in allowing you to place binary trades using the features in MT4.

However, brokers' binary option plug-ins for MT4 often use things such as the order comment to specify the expiry for the binary option. In cases such as these, you will need to turn on the UseOriginalOrderComments setting, as described above.

3.13Controlling the Copier using MT4 Global Variables

You can block the Copier from placing new trades using a Global Variable in MT4 (press F3, or choose Tools / Global Variables).

You can use this either as a way of controlling the Copier manually, by creating and removing the Global Variable yourself, or you can have an automated system which uses the Global Variable to turn the copying on and off based on something such as account equity or performance.

The Copier is controlled by a Global Variable called Suspend-X, where X is the channel name. For example: Suspend-MySender. If a variable exists with this name, regardless of its value (zero/non-zero) then the Copier will ignore new trades. The Sender EA will not issue a message to the Receiver EA.

4.1.1Sender parameters: channel and heartbeat period

Server settings

Channel

The channel name(s) to use for communicating with the receiver(s). There should only be one receiver and one sender on each channel.A single sender EA can broadcast on multiple channels, which you specify by entering a comma-separated list of names in the Channel parameter, e.g. Scalp1,Scalp2,Scalp3. Channel names must not contain any of the following characters: / \ : * ? " < > |. In addition, the list must not include spaces between each comma-separated item.

HeartbeatPeriodSeconds

The number of seconds to wait between sending each heartbeat message

4.1.2Sender parameters: orders to include

Orders to include

IncludeSymbols

If not blank, a comma-separated list of symbols to include in the messages to the receiver. This must exactly match the broker's names, including upper/lower case such as EURUSDfx,GBPUSDfx. Trades for symbols which are not on this list are not included.

You can also start the list with ! to mean "all symbols are permitted except the following". For example:

!EURUSDfx,GBPUSDfx

IncludeMagicNumbers

If not blank, a comma-separated list of EA magic numbers to include in the messages to the receiver. For example, 0,1234,6789 will include manual orders (which have magic number 0), plus orders from the EA(s) which use the magic numbers 1234 and 6789.

You can also start the list with ! to mean "all magic numbers are permitted except the following". For example:

!1234,6789

IncludeOrderComments

If not blank, a comma-separated list of order comments to include. For example, pivot,breakout will only include orders whose comment includes either "pivot" or "breakout". The match is case-sensitive. You can also match an exact order comment using quotes. For example, pivot,"breakout" will match an order whose comment includes "pivot" (e.g. pivot123), or an order whose comment is the exact text "breakout".

You can also start the list with ! to mean "all comments are permitted except the following". For example:

!pivot,"breakout"

IncludePendingOrders

Determines whether pending orders are sent, or whether the broadcaster only sends messages when trades are filled.

4.1.3Sender parameters: lot sizing and pricing

Lot sizing and pricing

(Lot sizing can also be changed using the settings in the receiver EA)

UseFixedLotSize

If not zero, the EA will send this fixed lot size instead of the number of lots actually traded.

LotSizeMultiplier

Ignored if UseFixedLotSize is turned on (i.e. non-zero). Otherwise, modifies the message so that the EA reports this multiple of the actual lot size (e.g. 0.1 to divide lot sizes by 10).

SymbolMultipliers

If not blank, a comma-separated list of multipliers for individual symbols which override the main LotSizeMultiplier setting. The symbol names in this list should exactly match the names on the sender account including any suffix used by the broker. For example: GBPUSD=2,USDCHF=0.5

BroadcastAllOrdersAtMarket

If turned on, the receiver is instructed to buy/sell at the current market price, regardless of the entry price for the sender's position. Equivalent to the receiver turning on the TradeAllOrdersAtMarket setting in the receiving EA.

HideSLandTP

If turned on, the s/l and t/p on trades are not broadcast to the receiver.

AddPipsToSL

Hides the true s/l on each trade by adding this number of pips to it (i.e. moving it further away from the open price). This setting is ignored if HideSLandTP is turned on.

AddPipsToTP

Hides the true t/p on each trade by adding this number of pips to it (i.e. moving it further away from the open price). This setting is ignored if HideSLandTP is turned on.

WaitForProfitPips

Delays transmission of a new order to the receiver until it is in profit by the specified number of pips. The delay can lead to large price differences between sender and receiver. You may need to turn on BroadcastAllOrdersAtMarket in the sender (see above), or change the AllowSlippagePips tolerance in the receiver.

WaitForSeconds

Delays transmission of a new order to the receiver until it has been open for the specified number of seconds. The delay can lead to large price differences between sender and receiver. You may need to turn on BroadcastAllOrdersAtMarket in the sender (see above), or change the AllowSlippagePips tolerance in the receiver.

4.1.4Sender parameters: broadcast settings

Broadcast settings

RetryAttempts

Number of times to retry if unable to send an order open/close message. (Not used with "heartbeat" messages because they are quickly resent anyway.)

FuturesSymbol

Symbol used by the broker as a prefix for futures. Can be ignored if you do not intend to trade/broadcast futures. The prefix is typically # for the small number of MT4 brokers who offer futures.

4.1.5Sender parameters: alert and warning settings

Warnings

UserDescription

Controls the description which is displayed in the top-right of the chart, making it easier to distinguish between multiple copies of the EA with different settings. (This setting has no effect on trading behaviour.)

BackgroundColour

Chart background colour which the EA uses. This can be altered to make it easier to distinguish between multiple copies of the EA with different settings.

LabelColour

Colour of the EA's text labels (may need to be changed if you alter the background colour)

SendWarningsByEmail

Any issues which require user attention are always displayed on screen. If this setting is turned on, they are also sent by email (using the details configured in MT4's Tools/Options/Email)

WarningEmailSubjectLine

If SendWarningsByEmail is turned on, the subject line to use for any warning emails

4.1.6Sender parameters: advanced settings

Advanced settings

TradeWatchFrequencyMS

Controls how often the sender checks to see if a new order has been opened, or if an order has been closed. The figure is in milliseconds, and can be set as low as 10. However, values below 25 will typically cause MT4 to start using large amounts of processor power without any real improvement in trade placement. The median delay in the sender spotting a new trade will be half the value of this parameter; a value of 50 will typically lead to new trades being detected after 25 milliseconds.

SendOrderComments

If turned off, then this prevents the EA from sending the comment for each order to the receiver. In effect, it will turn off the UseOriginalOrderComments parameter in the receiver.

AllowExistingOrders

Allows the EA to send messages about orders which are already open when it starts up

CustomPipSizes

Lets you override the EA's default pip-size calculation for specific symbols (based on the number of digits in the price). For example, to use a pip size of 0.1 on gold and 1.0 on the DAX:

XAUUSD=0.1,GER30=1


4.2.1Receiver parameters: sender channel

Server settings

Channel

The channel name to use for communicating with the sender. There should only be one receiver and one sender on each channel. A receiver can only listen on a single channel; you cannot use a comma-separated list for the receiver's Channel parameter. Channel names must not contain any of the following characters: / \ : * ? " < > |

4.2.2Receiver parameters: local account settings

Local settings

ForexSymbolSuffix

Any suffix used by the broker for forex symbols. For example, if the broker refers to EURUSD as EURUSDcx, then this parameter can be manually set to cx. If left blank, the EA will attempt to detect any suffix which its broker uses. If you want the EA to use no suffix, and not to use auto-detection, then set the parameter to "none" or "(none)"

FuturesSymbol

Symbol used by the broker as a prefix for futures. Can be ignored if you do not intend to trade/broadcast futures. The prefix is typically # for the small number of MT4 brokers who offer futures.

CustomSymbolMappings

A comma-separated list of symbols which need special mapping between the broadcaster and receiver accounts. For example, GOLD=XAUUSD,CRUDE_OIL=OIL will convert broadcaster trades for GOLD into receiver trades for XAUUSD, and broadcaster trades for CRUDE_OIL into receiver trades for OIL. If the receiving broker uses a suffix such as cx, then this does need to be included in the mapping: e.g. GOLD=XAUUSDcx.

CustomPipSizes

By default the software uses a definition of the pip-size for an instrument which is based on the number of decimal places to which the broker quotes the price. You can override this using a comma-separated list of pip-sizes in the CustomPipSizes field. For example:

XAUUSD=0.10,XAGUSD=0.05

CustomLotMultipliers

Mainly for use on CFDs, where there can be differences in contract size between sender and receiver. Lets you adjust the volumes on specific instruments, before all other lot-size conversions are applied. For example, if the sender's DAX and CAC40 contracts are 100 times smaller than the receiver's contracts, then the following setting will adjust the calculation on the receiver to make the trades 100 times smaller. The symbol names in this list should be the exact symbol names on the receiver, including any suffix:

DAX=0.01,CAC40=0.01

4.2.3Receiver parameters: accept/reject entry signals

Accept/reject entry signals

IgnoreNewEntrySignals

If turned on, the EA ignores all new trade entry signals coming in from the sender - can be used to prevent the EA opening new trades, while continuing to manage existing ones.

PermittedSymbols

If not blank, trades from the sender are ignored unless they are for symbols on this comma-separated list. This must exactly match the broker's names on the receiver account, including upper/lower case such as: EURUSDfx,GBPUSDfx

You can also start the list with ! to mean "all symbols are permitted except the following". For example:

!EURUSDfx,GBPUSDfx

BuySellOnly

If non-zero, restricts the direction in which the copier will place trades. A value of 1 means that the receiver will only place buy orders; a value of 2 means that the receiver will only place sell orders. (Zero means that all orders are accepted.)

IncludeTradingTimes

Ignored if blank. Otherwise, defines a list of times each day during which the receiver is allowed to trade; new order messages outside these times are ignored. See below for the format of this parameter.

day_TradingTimes

Similar to IncludeTradingTimes, but defines separate permitted ranges for each day of the week

IgnoreOrdersSmallerThanLots

Ignored if zero. If non-zero, specifies a minimum order size and the receiver will not trade orders which are smaller than this. This parameter is applied after converting the sender's trade volume using the lot-sizing parameters below. For example, if the sender's lot size is 0.5, and this translates to a receiver lot size of 0.3, then the limit is applied to the size of 0.3.

IgnoreOrdersLargerThanLots

Ignored if zero. If non-zero, specifies a maximum order size and the receiver will not trader orders which are larger than this. This parameter is applied after converting the sender's trade volume using the lot-sizing parameters below. For example, if the sender's lot size is 0.5, and this translates to a receiver lot size of 0.3, then the limit is applied to the size of 0.3.

MinSenderLotSize

Similar to IgnoreOrdersSmallerThanLots, but is applied against the sender's volume before adjusting it using settings such as UseRiskFactor. For example, if the sender's lot size is 0.5, and this translates to a receiver lot size of 0.3, then the limit is applied to the size of 0.5.

MaxSenderLotSize

Similar to IgnoreOrdersLargetThanLots, but is applied against the sender's volume before adjusting it using settings such as UseRiskFactor. For example, if the sender's lot size is 0.5, and this translates to a receiver lot size of 0.3, then the limit is applied to the size of 0.5.

MaxSpreadPips

Blocks new orders if the current spread on the symbol is wider than the specified number of pips. A value of zero disables this check on the spread.

CheckForExistingPosition

Optionally prevents trading if the Receiver has an existing trade or pending order. You can configure the Receiver to ignore signals if there is any open trade or order for the same symbol, or more specifically if there is a trade or order in the same direction as the new signal.

4.2.4Receiver parameters: accept/reject exit signals

Accept/reject entry signals

IgnoreAllExitSignals

If turned on, the EA ignores all exit signals coming in from the sender - can be used if you want to manually control when trades should be closed.

IgnoreExitSignalsForTicketIds

If not blank, a comma-separated list of ticket IDs (on the receiver, not the sender) which should not be managed by the trade copier. Allows some but not all trades to be controlled manually.

4.2.5Receiver parameters: slippage management

Slippage management

TradeAllOrdersAtMarket

If turned on, the receiver always buys/sells at its current market price, regardless of any difference between that and the sender's price. If this setting is turned on, the following three settings become redundant and are ignored.

AllowSlippagePips

Determines how close the receiver's price needs to be to the sender's entry price for a signal to be allowed. For example, if the sender buys GBPUSD at 1.34235, and AllowSlippagePips is set to 2.0, then the receiver will trade the signal provided that its current ask price is not above 1.34255. (This setting is ignored if TradeAllOrdersAtMarket is turned on.)

PlaceLimitOrderIfSlipped

If the receiver's price is beyond the AllowSlippagePips threshold, then this parameter specifies whether the receiver should try to place a limit order - i.e. wait for the price to return to the sender's entry level. (This setting is ignored if TradeAllOrdersAtMarket is turned on.)

LimitOrderExpirationMinutes

Only used if PlaceLimitOrderIfSlipped is turned on. Determines how long the limit order is valid for - i.e. how quickly the price needs to return to the sender's entry level before discarding the signal. Please note that some brokers have minimum expiry periods (e.g. either no expiry, or not less than 15 minutes away). Orders will fail (usually with MT4 error #3) if this setting is too low.

ImmediateCloseOnSlippagePips

Closes a new trade immediately if the actual filled price differs from the expected quote price by the specified number of pips. A value of zero disables this check.

MarketOrderSlippageParameter

Only applicable to brokers using instant execution rather than market execution. Specifies the maximum deviation from the current price which the EA is prepared to accept, broadly equivalent to the "max deviation" setting when placing a manual order. Please note that brokers do not necessarily honour this parameter exactly. The default value of 9999 in effect instructs instant-execution brokers to behave like market-execution brokers.

4.2.6Receiver parameters: order management

Order management

OrderRetries

If placing a market order, the number of times the order is retried if the broker declines it.

UseInstantExecution

If your broker supports instant execution (rather than market execution), then you can turn on the UseInstantExecution setting in order to make trade copying slightly faster. This allows the copier to place its opening order plus any s/l and t/p in one step, rather than having to set the s/l and t/p separately. Turning on this setting will lead to MT4 error #130 if the broker does not support instant execution and there is an s/l or t/p on the copied position.

CloseOrdersImmediatelyIfSLFails

The receiver places trades immediately, and then amends them to set any stop-loss or take-profit which is required. The latter step can potentially fail, leaving a trade in the market which has no stop-loss. This setting determines whether, as a precautionary measure, trades should be closed immediately if the broker declines the stop-loss on them.

RequireSenderFillWithinMinutes

If a pending order is filled on the receiver, but remains unfilled on the sender, then the receiver closes it in this number of minutes if it remains unfilled on the sender. This parameter is ignored if less than or equal to zero.

MagicNumber

A magic number to be used by the sender to keep track of its trades. If this is left at zero, the EA automatically picks a unique magic number based on the channel name. Each receiver EA running in a copy of MT4 must use a different magic number.

InvertTrades

If turned on, the direction of the broadcaster's trade is inverted, with a buy becoming a sell etc

UseOriginalOrderComments

Tells the receiver to use the original order comment from the sender, instead of its usual behaviour where it tracks the sender ticket number in the order comment. Please note that this setting has disaster-recovery implications.

UseCustomOrderComment

Tells the receiver to use this fixed comment for all orders. This setting overrides any comment on the original order, and also overrides the UseOriginalOrderComments parameter. Please note that this setting has disaster-recovery implications.

PreventPartialExits

Prevents the receiver from doing partial closes; a position is always closed in its entirety if the sender closes any of its position.

IgnorePartialExits

Tells the receiver to ignore partial closes, keeping the original trading volume open without modification. The position is only closed on the receiver when the final tranche is closed on the sender. PreventPartialExits takes precedence; IgnorePartialExits is ignored if PreventPartialExits is turned on.

EntryOffsetPips

If non-zero creates a limit or stop order above/below the sender's entry price, instead of a buy/sell order. A positive value places a stop; a negative value places a limit. For example, a value of -10 means that, when the sender opens a sell position, the receiver will place a sell-limit 10 pips beyond the sender's price

4.2.7Receiver parameters: lot sizing modes

Lot sizing

The following settings are used in order. For example, EquityPerLot will only be used if UseFixedLotSize, UseRiskFactor and UseLotSizeMultiplier are turned off by setting them to zero

UseFixedLotSize

If not zero, the receiver uses this fixed lot size instead of the value specified by the sender. Overrides UseRiskFactor and UseLotSizeMultiplier.

UseRiskFactor

If not zero, tells the receiver to trade a multiple of the sender's lot size based on the receiver's equity versus the sender's equity. For example, if the sender's equity is $1000 and the receiver's equity is $2000, and UseRiskFactor is set to 1, then the receiver will trade double the lot size of the sender. Overrides UseLotSizeMultiplier.

UseLotSizeMultiplier

If not zero, modifies the lot size received from the sender so that the receiver uses this multiple of the broadcast size, e.g. 0.1 to trade one-tenth of the original lot size.

EquityPerLot

If not zero, calculates the lot size based on the receiver's equity, ignoring the sender's lot size. For example, if the receiver's account equity is $4,800, and EquityPerLot is $10,000, then the receiver will trade 0.48 lots.

BalancePerLot

If not zero, calculates the lot size based on the receiver's balance, ignoring the sender's lot size. For example, if the receiver's account balance is $3,200, and BalancePerLot is $10,000, then the receiver will trade 0.32 lots.

CashRiskFixed

If not zero, a maximum cash amount (such as $100) to risk per trade. Requires the FixedSLPips parameter to be set.

CashRiskEquityPercentage

If not zero, a maximum percentage of your equity to risk per trade. Requires the FixedSLPips parameter to be set.

CashRiskBalancePercentage

If not zero, a maximum percentage of your balance equity to risk per trade. Requires the FixedSLPips parameter to be set.

NotionalDepositVolume

If not zero, instructs the Receiver to trade a fixed amount of the deposit currency. For example:

  • NotionalDepositVolume = 10000
  • Deposit currency is EUR
  • Symbol traded is GBP/USD
  • System will trade 0.08 lots - EUR 10000 converted to GBP 8490 (at current rates)

4.2.8Receiver parameters: lot sizing limits

Lot sizing limits

MaxLots

Ignored if UseFixedLotSize is turned on (i.e. non-zero). Caps a variable lot size calculation (e.g. from UseRiskFactor) so that it does not lead to a dangerously large value. If you want to prevent an order being traded, rather than capping its lot size, use IgnoreOrdersLargerThanLots.

MinLots

Ignored if UseFixedLotSize is turned on (i.e. non-zero). Collars a variable lot size calculation (e.g. from UseRiskFactor) so that it does not lead to a value which is too small. If you want to prevent an order being traded, rather than capping its lot size, use IgnoreOrdersSmallerThanLots.

CentAccount

Turn on for accounts where all values are in cents rather than dollars. Equivalent to setting parameters such as UseRiskFactor and LotSizeMultiplier to 0.01 instead of 100.

RoundUpToBrokerMinimum

Ignored if UseFixedLotSize is turned on (i.e. non-zero). Otherwise, determines what to do if the lot size falls below the minimum from the receiver's broker - for example, the broker has a minimum of 0.1 lots; the sender specifies 0.1 lots; and the receiver has UseLotSizeMultiplier set to 0.5; leading to a size of 0.05 lots. If RoundUpToBrokerMinimum is turned on then the receiver will take the trade and use the broker's minimum lot size. If this setting is turned off, then the receiver will ignore the trade.

LotSizingAlwaysRoundDown

If conversion of the sender's lot size leads to a value such as 0.0256, tells the EA always to round down (to 0.02) rather than rounding to the nearest permitted size (0.03).

4.2.9Receiver parameters: stop-loss and take-profit

Please see the notes about when the receiver s/l and t/p are used.

S/L and T/P

FixedSLPips

If non-zero, a fixed number of pips to use for the stop-loss on all trades. If this is turned on, then any stop-loss used by the sender will be ignored. You must turn on FixedSLPips in order to use any of the cash-risk lot-sizing modes such as FixedCashRisk.

FixedTPPips

If non-zero, a fixed number of pips to use for the take-profit on all trades. If this is turned on, then any take-profit used by the sender will be ignored.

MirrorSLandTPChanges

If turned on, the receiver copies the s/l and t/p on each order - but only if FixedSLPips and FixedTPPips are not used. Also controls whether changes to the entry price on pending orders are copied.

MaxSLPips

Ignored if FixedSLPips is used. Otherwise, if non-zero, signals are amended so that the stop-loss on trades is never larger than this number of pips. If the sender does not specify a stop-loss then this number of pips will be used.

MaxCashRiskPerTrade

If non-zero, trades from the sender are ignored if the potential loss is larger than this amount (in the receiver's deposit currency), based on the lot size and stop-loss. Trades will be ignored if the sender does not specify a stop-loss and the receiver does not have MaxSLPips turned on (because loss is potentially unlimited). Please note that this risk is calculated using the tick-value at the time of trade placement, and this can then vary while the trade is active. The risk calculation also does not include any slippage compared to the sender's entry price.

MaxTPPips

If non-zero, signals are amended so that the take-profit on trades is never larger than this number of pips. If the sender does not specify a take-profit then this number of pips will be used.

TrailingStopPips

If non-zero, applies a trailing stop to all orders, overriding and ignoring any s/l specified by the sender. The copier uses a "classic" trailing stop which comes into effect immediately, unlike MT4's own trailing stops which only apply once an order is in profit.

4.2.10Receiver parameters: account management

Account management

StopTradingBelowEquity

If turned on (greater than zero), the EA stops taking new signals and attempts to close all its existing orders if the account's equity falls below this cash value. The EA does not close any orders which it is not responsible for - i.e. from other EAs or from manual trading.

StopTradingAtDrawdownPercent

If turned on (less than zero), the EA stops taking new signals and attempts to close all its existing orders if floating P/L falls below the specified percentage of balance. The percentage must be entered as a negative number. For example, if the value were set to -40, then the EA would terminate if e.g. account profit fell below $-800 on a $2000 balance. The EA does not close any orders which it is not responsible for - i.e. from other EAs or from manual trading.

MaxOpenOrders_Total

If non-zero, stops the EA taking new signals if the number of open/pending orders would exceed this value. For example, setting this parameter to 1 will stop the EA trading if there is already any open or pending order. The count includes all orders on the account, from any source, not just those created by the copier.

MaxOpenOrders_FromCopier

As above, but the count only includes orders placed by the receiver EA. There can be any number of orders from other EAs or from manual trading.

MaxTradesPerDay_Total

If non-zero, stops the EA taking new signals if the total activity on the account has already reached this number of orders for the day. Includes all orders from all EAs and from manual trading, and includes open pending orders as well as open and closed trades (but not cancelled pending orders).

CalculateProfitFromOwnOrdersOnly

By default, StopTradingAtDrawdownPercent is calculated using all the open trades on the account. Turning on CalculateProfitFromOwnOrdersOnly changes the calculation so that the Receiver only looks at the drawdown relating to its own trades, ignoring any other activity on the account.

BalanceDateForDrawdown

If specified, the balance calculation for StopTradingAtDrawdownPercent includes all trades, ignoring CalculateProfitFromOwnOrdersOnly, up to but not including the specified date. The calculation of closed and open trades is then from the specified date onwards, only looking at the Copier's own orders if CalculateProfitFromOwnOrdersOnly is turned on. If not specified (the default date of 1/1/1970), then StopTradingAtDrawdownPercent uses the current balance.

MaxTradesPerDay_FromCopier

As above, but the count only includes orders placed by the receiver EA. There can be any number of orders from other EAs or from manual trading.

MaxLosingTradesPerDay_Total

If non-zero, stops the EA taking new signals if the number of losing trades closed (not opened) today has reached the specified threshold. Includes all orders from all EAs and from manual trading. The count only applies to closed trades, not open positions. A limit of 1 does not prevent the Copier from opening 5 concurrent trades which all turn out to be losers.

MaxLosingTradesPerDay_FromCopier

As above, but the count only includes orders placed by the receiver EA. There can be any number of orders from other EAs or from manual trading.

4.2.11Receiver parameters: alerts and notifications

Alerts and notifications

UserDescription

Controls the description which is displayed in the top-right of the chart, making it easier to distinguish between multiple copies of the EA with different settings. (This setting has no effect on trading behaviour.)

BackgroundColour

Chart background colour which the EA uses. This can be altered to make it easier to distinguish between multiple copies of the EA with different settings.

LabelColour

Colour of the EA's text labels (may need to be changed if you alter the background colour)

NewOrders_AlertOnScreen

If turned on, the EA displays an alert on screen about each new trade which it opens

NewOrders_AlertByEmail

If turned on, the EA sends an email about each new trade which it opens (using the MT4 settings in Tools/Options/Email)

ClosedOrders_AlertOnScreen

If turned on, the EA displays an alert on screen about each trade which it closes

ClosedOrders_AlertByEmail

If turned on, the EA sends an email about each trade which it closes (using the MT4 settings in Tools/Options/Email)

RejectedOrders_AlertOnScreen

If turned on, the EA displays a message on screen about each order which it chooses not to trade (e.g. because the lot size is too large/small).

RejectedOrders_AlertOnScreen

If turned on, the EA displays a message on screen about each order which is rejected by the broker.

RejectedOrders_AlertByEmail

If turned on, the EA sends an email about each trade which is rejected by the broker (using the MT4 settings in Tools/Options/Email)

Problems_AlertByEmail

Any problems requiring user attention are always displayed on screen. This setting determines whether the messages are also sent by email (using the MT4 settings in Tools/Options/Email)

AlertIfHeartbeatMissingSeconds

If non-zero, generates an alert if the EA has not received a heartbeat from the sender for this number of seconds

NoHeartbeat_AlertOnScreen

If AlertIfHeartbeatMissingSeconds is turned on, controls whether alerts about missing heartbeats are displayed on screen

NoHeartbeat_AlertByEmail

If AlertIfHeartbeatMissingSeconds is turned on, controls whether alerts about missing heartbeats are sent by email

Alert text (see below for variables)

OrderOpen_ScreenAlertText

Text to display in relation to NewOrders_AlertOnScreen

OrderOpen_EmailSubjectLine

Subject line for emails sent by NewOrders_AlertByEmail

OrderOpen_EmailBody

Body text for emails sent by NewOrders_AlertByEmail

OrderClose_ScreenAlertText

Text to display in relation to ClosedOrders_AlertOnScreen

OrderClose_EmailSubjectLine

Subject line for emails sent by ClosedOrders_AlertByEmail

OrderClose_EmailBody

Body text for emails sent by ClosedOrders_AlertByEmail

NoHeartbeat_ScreenAlertText

Text to display on screen about missing heartbeat messages, if AlertIfHeartbeatMissingSeconds is turned on

NoHeartbeat_EmailSubjectLine

Email subject line to use about missing heartbeat messages, if AlertIfHeartbeatMissingSeconds is turned on

NoHeartbeat_EmailBody

Email body text to use about missing heartbeat messages, if AlertIfHeartbeatMissingSeconds is turned on

4.3Variables for use in receiver alert text

You can control the text which is displayed by the receiver on screen or sent by email. The following variables can be used in the alert text parameters such as OrderOpen_ScreenAlertText:

Variable

Description

{CHANNEL}

The name of the channel which the EA is receiving messages on

{ACC}

MT4 broker account number

{TICKET}

Broker ticket number of the receiver's order

{SYMBOL}

Symbol of the receiver's order

{LOTS}

Lot size of the receiver's order

{OPENTIME}

Open time of the receiver's order (broker time, not local or UTC)

{OPENPRICE}

Open price of the receiver's order

{CLOSETIME}

Close time of the receiver's order (broker time, not local or UTC)

{CLOSEPRICE}

Close price of the receiver's order (zero on open orders)

{BUYSELL}

"Buy" or "Sell" depending on the direction of the receiver's order

{CLOSEORDELETE}

If an order is being cancelled, "closed" or "deleted" depending on whether the trade copier is closing an open order or deleting a pending order

{PNL}

Cash profit/loss on the receiver's order (excluding swap and commission)

{PNLPIPS}

Profit/loss on the receiver's order in pips.

{SWAP}

Swap value on the receiver's order

{COMM}

Commission on the receiver's order (a negative number for commission charged)

{TOTALPNL}

Total profit/loss on the receiver's order: {PNL} plus {SWAP} plus {COMM}

{COMMENT}

The comment text assigned to the receiver's order

{POSITIONID}

The sender's ID for the signal

{MAGIC}

The magic number assigned to the receiver's order - the MagicNumber parameter for the EA

{SL}

The stop-loss price on the receiver's order (zero if none)

{TP}

The take-profit price on the receiver's order (zero if none)

{LOCALTIME}

The receiver's local time, according to the computer's clock

{BROKERTIME}

The broker's latest reported time

{CURR}

The receiver's deposit currency symbol

{BALANCE}

The receiver's account balance

{EQUITY}

The receiver's account equity

{FREEMARGIN}

The receiver's free margin

{MARGININUSE}

The receiver's margin usage

{COMPANY}

The broker's company name

{TERMINALPATH}

The location of the MT4 installation - e.g. C:\Program Files\MyBroker

{CRLF}

Inserts a new line, for use in emails

4.4Trading-time restrictions

The IncludeTradingTimes parameter in the receiver EA lets you control the times of each day when the receiver is allowed to place trades. There are also separate parameters for each day of the week, such as Tuesday_TradingTimes. Any incoming order messages outside these times will be ignored. All times are interpreted as broker time, not local time.

The format of the trading-times parameter is a comma-separated list of permitted times, each of which can be either a single hour (or minute), or a range. Examples are as follows:

2:45 Only allow trading at 2.45am (i.e. between 02:45:00 and 02:45:59)

14 Only allow trading between 2pm and 2.59pm

16-17:30 Only allow trading between 4pm and 5.30pm

7:15-11 Only allow trading between 7.15am and 11.59am (note: 11:59, not 10:59 or 11:00)

19:20-19:25 Only allow trading between 7.20pm and 7.25pm

Any number of these settings can then be combined as a comma-separated list (in any order). Therefore, the above examples could be combined to create a complex trading window as follows:

2:45,14,16-17:30,7:15-11,19:20-19:25

5Diagnosing problems

The sender and receiver EAs create comprehensive records of their activity in MT4's Experts log.

You can view these records in the Terminal pane of the MT4 software, or you can open the daily log files using File / Open Data Folder in MT4 and then going to the MQL4 subdirectory and then into the Logs subdirectory inside MQL4.

Please note:

We cannot answer support queries without these logs.

We need the log files. We cannot answer support queries just from screenshots.

The MQL4\Logs directory is different to the Logs directory (the former contains the MT4 Experts log, the latter contains the MT4 Journal).

5.1No "heartbeat" received

The receiver EA should start receiving heartbeat messages from the sender shortly after starting up, and display the last-heartbeat time on its chart. If no heartbeats are being received then please check the following:

The sender and receiver EAs are both using the same channel name.

The sending and receiving copies of MT4 are both connected to their brokers.

There is no record in the logs that the EAs have been forced to terminate for some reason.

5.2Heartbeats are received but trades are not copied

The MT4 Experts log on the receiver will confirm why a trade has not been copied. The most common reason is a price difference between the sender and receiver which is larger than the AllowSlippagePips parameter.

Other common reasons why trades cannot be copied are as follows. All of these will also be listed and described in the logs.

The software's default lot sizing is not to trade exactly the same sizes on the receiver as on the sender. The default conversion may mean that orders are too small to trade on the receiver account. You either need to turn on the RoundUpToBrokerMinimum parameter in the receiver EA, or you need to choose a different lot-sizing mode. Please note that both of these options will mean that the receiver is taking more risk per order than the sender account.

  • The main "AutoTrading" button in MT4 is turned off, or the "Allow live trading" setting is not turned on for the receiver EA. Please note that the option in MT4's Tools / Options / Expert Advisors does not affect any EAs which are currently running; the setting in Tools / Options is the default for when you next add an EA to a chart. ("Allow live trading" in MT4 means "allow trading by automated systems", not "allow trading on a live account as opposed to a demo account".)
  • MT4 error #128. This indicates a timeout between MT4 and the broker: either a problem on the broker's servers, or a problem with the internet connection between you and the broker.
  • MT4 errors #136 or #137: these indicate a problem on the broker's servers.
  • MT4 error #138. This indicates that the broker has (repeatedly) requoted and rejected the order.
  • MT4 error #130. This typically occurs because the price difference between the sender and receiver is larger than AllowSlippagePips parameter; the receiver tries to place a pending order instead of a market order; but the broker does not allow a pending order so close to the current market price.

For further information about MT4 error codes such as 128, 130 etc, please see:

http://docs.mql4.com/constants/errorswarnings/errorcodes

5.3Trades are opened multiple times

If the same trade is copied more than once on the receiver account then there are two possible explanations: you are running more than one instance of the receiver copy of MT4; or the connection with the broker is timing out (error #128) and the broker is placing trades despite returning an error message.

5.3.1Multiple copies of the same receiver

Please use the Windows Task Manager to check that you only have the expected number of running copies of MT4 (terminal.exe), making sure to use the "Show processes from all users" option.

On a VPS in particular, it is quite easy to open multiple remote-desktop sessions by accident, and have the same copy of MT4 running in more than one session at once.

5.3.2Timeout errors (#128) from the broker

If the broker's server returns a timeout error (#128), then the receiver will retry the order (unless OrderRetries is set to zero). Despite returning an error, the broker may in fact have accepted the order, and the retry may then create a duplicate.

If you receive #128 errors, you should contact your broker. It indicates either a problem with your broker's server, or a problem with your internet connection to the broker.

5.4Trades are instantly closed on the receiver

The main reason why trades are instantly closed on the receiver is that there is more than one EA sending messages on the specified "Channel". Please check the following:

Check that you are only running one copy of the sender EA or, if there are multiple sender EAs, check that each one is using a different channel parameter.

Use the Windows Task Manager to check that you only have the expected number of running copies of MT4 (terminal.exe), making sure to use the "Show processes from all users" option.

Another possible reason for immediate closure is that the receiver is unable to set the s/l or t/p on a new trade, and the CloseOrdersImmediatelyIfSLFails parameter tells it to close such trades immediately. The logs will explain why the s/l or t/p failed; this is usually because the receiving broker has a minimum distance between exit and current market prices.