
Manage MetaTrader 4 and 5 trade copying: accounts, copiers, followers and their copy rules.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Algo Trader Tools API key (att_…), created under API keys in the app. Its scopes decide which tools are listed.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Attaches one of your accounts to the copier with its own rules; leave a rule out for its default. Copying starts at once (unless `is_active` is false), with what the master opens from then on. Retrying is safe: a second attempt fails with `already_following`.
The copier's ID.
One of your connected accounts: connected with its master password, not this copier's master, not a master anywhere and not already copying this master.
The most lots one copy may have; null for no limit.
Sell when the master buys and the other way round; stop loss and take profit swap.
The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`.
How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped.
When new trades are copied; empty means any time. Closes and changes to copies already open are always copied.
The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`.
Start paused with `false`.
The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places.
Copy stop loss and take profit, including later changes.
Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed.
Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version.
When a copy comes out below the broker's minimum lot: trade the minimum, or skip it.
Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied.
`all` copies every symbol, `include` only those in `symbols`, `exclude` all but them.
How late a master trade may still be copied, for example after a reconnect; older ones are skipped.
The slippage allowed per order; null uses the broker's default.
Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://mcp.algotradertools.com/mcp \ --header 'X-API-Key: YOUR_X_API_KEY'
Headers
X-API-Key (required): Algo Trader Tools API key (att_…), created under API keys in the app. Its scopes decide which tools are listed.Attaches one of your accounts to the copier with its own rules; leave a rule out for its default. Copying starts at once (unless `is_active` is false), with what the master opens from then on. Retrying is safe: a second attempt fails with `already_following`.
| Argument | Type | Description |
|---|---|---|
| max_lot | number | null | The most lots one copy may have; null for no limit. |
| reverse | boolean | Sell when the master buys and the other way round; stop loss and take profit swap. |
| symbols | array | The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`. |
| lot_mode | string | How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped. |
| sessions | array | When new trades are copied; empty means any time. Closes and changes to copies already open are always copied. |
| timezone | string | The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`. |
| copier_id* | string | The copier's ID. |
| is_active | boolean | Start paused with `false`. |
| lot_value | number | The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places. |
| account_id* | string | One of your connected accounts: connected with its master password, not this copier's master, not a master anywhere and not already copying this master. |
| copy_stops | boolean | Copy stop loss and take profit, including later changes. |
| symbol_map | object | Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed. |
| copy_pending | boolean | Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version. |
| below_minimum | string | When a copy comes out below the broker's minimum lot: trade the minimum, or skip it. |
| copy_existing | boolean | Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied. |
| symbol_filter | string | `all` copies every symbol, `include` only those in `symbols`, `exclude` all but them. |
| max_delay_seconds | integer | How late a master trade may still be copied, for example after a reconnect; older ones are skipped. |
| max_slippage_pips | number | null | The slippage allowed per order; null uses the broker's default. |
| adjust_contract_size | boolean | Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes. |
{
"type": "object",
"required": [
"copier_id",
"account_id"
],
"properties": {
"max_lot": {
"type": [
"number",
"null"
],
"default": null,
"description": "The most lots one copy may have; null for no limit.",
"exclusiveMinimum": 0
},
"reverse": {
"type": "boolean",
"default": false,
"description": "Sell when the master buys and the other way round; stop loss and take profit swap."
},
"symbols": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"default": [],
"examples": [
[
"XAUUSD",
"EURUSD"
]
],
"maxItems": 200,
"description": "The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`."
},
"lot_mode": {
"enum": [
"multiplier",
"fixed",
"balance_ratio",
"equity_ratio",
"risk_percent"
],
"type": "string",
"default": "multiplier",
"description": "How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped."
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"required": [
"days",
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"examples": [
"16:30"
],
"description": "`HH:MM`. An end before its start runs past midnight."
},
"days": {
"type": "array",
"items": {
"type": "integer",
"maximum": 6,
"minimum": 0
},
"examples": [
[
0,
1,
2,
3,
4
]
],
"minItems": 1,
"description": "0 is Monday, 6 Sunday."
},
"start": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"examples": [
"07:00"
],
"description": "`HH:MM`, 24-hour."
}
},
"description": "A window in which new trades are copied."
},
"default": [],
"maxItems": 14,
"description": "When new trades are copied; empty means any time. Closes and changes to copies already open are always copied."
},
"timezone": {
"type": "string",
"default": "broker",
"examples": [
"broker"
],
"description": "The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`."
},
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"is_active": {
"type": "boolean",
"default": true,
"description": "Start paused with `false`."
},
"lot_value": {
"type": "number",
"default": 1,
"maximum": 1000,
"examples": [
1
],
"description": "The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places.",
"exclusiveMinimum": 0
},
"account_id": {
"type": "string",
"format": "uuid",
"examples": [
"0b7e5c1a-2f3d-4e6a-8b9c-7d6e5f4a3b2c"
],
"description": "One of your connected accounts: connected with its master password, not this copier's master, not a master anywhere and not already copying this master."
},
"copy_stops": {
"type": "boolean",
"default": true,
"description": "Copy stop loss and take profit, including later changes."
},
"symbol_map": {
"type": "object",
"default": {},
"examples": [
{
"XAUUSD": "GOLD.m"
}
],
"description": "Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed.",
"maxProperties": 200,
"additionalProperties": {
"type": "string",
"maxLength": 32
}
},
"copy_pending": {
"type": "boolean",
"default": false,
"description": "Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version."
},
"below_minimum": {
"enum": [
"minimum",
"skip"
],
"type": "string",
"default": "minimum",
"description": "When a copy comes out below the broker's minimum lot: trade the minimum, or skip it."
},
"copy_existing": {
"type": "boolean",
"default": false,
"description": "Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied."
},
"symbol_filter": {
"enum": [
"all",
"include",
"exclude"
],
"type": "string",
"default": "all",
"description": "`all` copies every symbol, `include` only those in `symbols`, `exclude` all but them."
},
"max_delay_seconds": {
"type": "integer",
"default": 60,
"maximum": 3600,
"minimum": 0,
"description": "How late a master trade may still be copied, for example after a reconnect; older ones are skipped."
},
"max_slippage_pips": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "The slippage allowed per order; null uses the broker's default."
},
"adjust_contract_size": {
"type": "boolean",
"default": true,
"description": "Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes."
}
},
"additionalProperties": false
}A copier copies one master account to its followers. It starts without any: add them next. Masters must be hedging accounts (all of MT4, and MT5 hedging accounts). Retrying a failed request can create a second copier; list your copiers first.
| Argument | Type | Description |
|---|---|---|
| name* | string | A name to tell it apart. |
| is_active | boolean | Start paused with `false`. |
| master_id* | string | One of your connected accounts that doesn't follow anything. Investor-password accounts can be masters. Several copiers can share a master. |
{
"type": "object",
"required": [
"name",
"master_id"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Gold strategy"
],
"maxLength": 64,
"minLength": 1,
"description": "A name to tell it apart."
},
"is_active": {
"type": "boolean",
"default": true,
"description": "Start paused with `false`."
},
"master_id": {
"type": "string",
"format": "uuid",
"examples": [
"6f1c2d4e-8a9b-4c3d-9e2f-1a2b3c4d5e6f"
],
"description": "One of your connected accounts that doesn't follow anything. Investor-password accounts can be masters. Several copiers can share a master."
}
},
"additionalProperties": false
}Deletes the copier, its followers and their activity log. The accounts stay connected. With `close_positions=true` every copy is closed first.
| Argument | Type | Description |
|---|---|---|
| copier_id* | string | The copier's ID. |
| close_positions | boolean | `true` pauses copying and closes every copy at market before deleting; if a terminal refuses, nothing is deleted (`close_failed`). `false` leaves the copies open on the followers as ordinary positions. |
{
"type": "object",
"required": [
"copier_id"
],
"properties": {
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"close_positions": {
"type": "boolean",
"default": false,
"description": "`true` pauses copying and closes every copy at market before deleting; if a terminal refuses, nothing is deleted (`close_failed`). `false` leaves the copies open on the followers as ordinary positions."
}
},
"additionalProperties": false
}Stops the account's terminal and deletes the account with its stored history. An account a copier uses is refused with `account_in_use`: delete the copier or remove the follower first.
| Argument | Type | Description |
|---|---|---|
| account_id* | string | The account's ID. |
{
"type": "object",
"required": [
"account_id"
],
"properties": {
"account_id": {
"type": "string",
"format": "uuid",
"examples": [
"6f1c2d4e-8a9b-4c3d-9e2f-1a2b3c4d5e6f"
],
"description": "The account's ID."
}
},
"additionalProperties": false
}The account with its status, role and freshest figures.
| Argument | Type | Description |
|---|---|---|
| account_id* | string | The account's ID. |
{
"type": "object",
"required": [
"account_id"
],
"properties": {
"account_id": {
"type": "string",
"format": "uuid",
"examples": [
"6f1c2d4e-8a9b-4c3d-9e2f-1a2b3c4d5e6f"
],
"description": "The account's ID."
}
},
"additionalProperties": false
}The copier with its master, its followers and what the engine reports about each.
| Argument | Type | Description |
|---|---|---|
| copier_id* | string | The copier's ID. |
{
"type": "object",
"required": [
"copier_id"
],
"properties": {
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
}
},
"additionalProperties": false
}The follower's rules and what the engine reports about it.
| Argument | Type | Description |
|---|---|---|
| copier_id* | string | The copier's ID. |
| follower_id* | string | The follower's ID (not its account's). |
{
"type": "object",
"required": [
"copier_id",
"follower_id"
],
"properties": {
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"follower_id": {
"type": "string",
"format": "uuid",
"examples": [
"9a8b7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d"
],
"description": "The follower's ID (not its account's)."
}
},
"additionalProperties": false
}Your connected MetaTrader accounts, newest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1 to 100 (default 50). |
| cursor | string | The `next_cursor` of the previous page. Leave it out for the first page. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1 to 100 (default 50)."
},
"cursor": {
"type": "string",
"description": "The `next_cursor` of the previous page. Leave it out for the first page."
}
},
"additionalProperties": false
}Your copiers with their followers, oldest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1 to 100 (default 50). |
| cursor | string | The `next_cursor` of the previous page. Leave it out for the first page. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1 to 100 (default 50)."
},
"cursor": {
"type": "string",
"description": "The `next_cursor` of the previous page. Leave it out for the first page."
}
},
"additionalProperties": false
}What the copier engine did, or decided not to do, on the copier's followers, newest first. Events are kept for 90 days.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1 to 100 (default 50). |
| cursor | string | The `next_cursor` of the previous page. Leave it out for the first page. |
| copier_id* | string | The copier's ID. |
| follower_id | string | Only this follower's events. |
{
"type": "object",
"required": [
"copier_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1 to 100 (default 50)."
},
"cursor": {
"type": "string",
"description": "The `next_cursor` of the previous page. Leave it out for the first page."
},
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"follower_id": {
"type": "string",
"format": "uuid",
"examples": [
"9a8b7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d"
],
"description": "Only this follower's events."
}
},
"additionalProperties": false
}The copier's followers, oldest first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1 to 100 (default 50). |
| cursor | string | The `next_cursor` of the previous page. Leave it out for the first page. |
| copier_id* | string | The copier's ID. |
{
"type": "object",
"required": [
"copier_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1 to 100 (default 50)."
},
"cursor": {
"type": "string",
"description": "The `next_cursor` of the previous page. Leave it out for the first page."
},
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
}
},
"additionalProperties": false
}Detaches the account from the copier and deletes its activity log. The account stays connected. With `close_positions=true` its copies are closed first.
| Argument | Type | Description |
|---|---|---|
| copier_id* | string | The copier's ID. |
| follower_id* | string | The follower's ID (not its account's). |
| close_positions | boolean | `true` pauses copying and closes every copy at market before deleting; if a terminal refuses, nothing is deleted (`close_failed`). `false` leaves the copies open on the followers as ordinary positions. |
{
"type": "object",
"required": [
"copier_id",
"follower_id"
],
"properties": {
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"follower_id": {
"type": "string",
"format": "uuid",
"examples": [
"9a8b7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d"
],
"description": "The follower's ID (not its account's)."
},
"close_positions": {
"type": "boolean",
"default": false,
"description": "`true` pauses copying and closes every copy at market before deleting; if a terminal refuses, nothing is deleted (`close_failed`). `false` leaves the copies open on the followers as ordinary positions."
}
},
"additionalProperties": false
}Rename, pause or resume a copier. Pausing stops new copies on every follower; copies already open stay and still follow the master's closes and changes. Resuming copies only what the master opens from then on.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| copier_id* | string | The copier's ID. |
| is_active | boolean | Pause every follower with `false`. Copies already open stay and still follow the master's closes and changes. Resuming copies only what the master opens from then on. |
{
"type": "object",
"required": [
"copier_id"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Gold strategy v2"
],
"maxLength": 64,
"minLength": 1
},
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"is_active": {
"type": "boolean",
"description": "Pause every follower with `false`. Copies already open stay and still follow the master's closes and changes. Resuming copies only what the master opens from then on."
}
},
"additionalProperties": false
}Change rules, or pause and resume this follower. Changes apply to what's copied from then on.
| Argument | Type | Description |
|---|---|---|
| max_lot | number | null | The most lots one copy may have; null for no limit. |
| reverse | boolean | Sell when the master buys and the other way round; stop loss and take profit swap. |
| symbols | array | The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`. |
| lot_mode | string | How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped. |
| sessions | array | When new trades are copied; empty means any time. Closes and changes to copies already open are always copied. |
| timezone | string | The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`. |
| copier_id |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
| string |
| The copier's ID. |
| is_active | boolean | Pause with `false`. Resuming copies only what the master opens from then on, also with `copy_existing`. |
| lot_value | number | The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places. |
| copy_stops | boolean | Copy stop loss and take profit, including later changes. |
| symbol_map | object | Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed. |
| follower_id* | string | The follower's ID (not its account's). |
| copy_pending | boolean | Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version. |
| below_minimum | string | When a copy comes out below the broker's minimum lot: trade the minimum, or skip it. |
| copy_existing | boolean | Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied. |
| symbol_filter | string | `all` copies every symbol, `include` only those in `symbols`, `exclude` all but them. |
| max_delay_seconds | integer | How late a master trade may still be copied, for example after a reconnect; older ones are skipped. |
| max_slippage_pips | number | null | The slippage allowed per order; null uses the broker's default. |
| adjust_contract_size | boolean | Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes. |
{
"type": "object",
"required": [
"copier_id",
"follower_id"
],
"properties": {
"max_lot": {
"type": [
"number",
"null"
],
"description": "The most lots one copy may have; null for no limit.",
"exclusiveMinimum": 0
},
"reverse": {
"type": "boolean",
"description": "Sell when the master buys and the other way round; stop loss and take profit swap."
},
"symbols": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"examples": [
[
"XAUUSD",
"EURUSD"
]
],
"maxItems": 200,
"description": "The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`."
},
"lot_mode": {
"enum": [
"multiplier",
"fixed",
"balance_ratio",
"equity_ratio",
"risk_percent"
],
"type": "string",
"description": "How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped."
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"required": [
"days",
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"examples": [
"16:30"
],
"description": "`HH:MM`. An end before its start runs past midnight."
},
"days": {
"type": "array",
"items": {
"type": "integer",
"maximum": 6,
"minimum": 0
},
"examples": [
[
0,
1,
2,
3,
4
]
],
"minItems": 1,
"description": "0 is Monday, 6 Sunday."
},
"start": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"examples": [
"07:00"
],
"description": "`HH:MM`, 24-hour."
}
},
"description": "A window in which new trades are copied."
},
"maxItems": 14,
"description": "When new trades are copied; empty means any time. Closes and changes to copies already open are always copied."
},
"timezone": {
"type": "string",
"examples": [
"broker"
],
"description": "The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`."
},
"copier_id": {
"type": "string",
"format": "uuid",
"examples": [
"3d2c1b0a-9f8e-4d7c-8b6a-5f4e3d2c1b0a"
],
"description": "The copier's ID."
},
"is_active": {
"type": "boolean",
"description": "Pause with `false`. Resuming copies only what the master opens from then on, also with `copy_existing`."
},
"lot_value": {
"type": "number",
"maximum": 1000,
"examples": [
1
],
"description": "The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places.",
"exclusiveMinimum": 0
},
"copy_stops": {
"type": "boolean",
"description": "Copy stop loss and take profit, including later changes."
},
"symbol_map": {
"type": "object",
"examples": [
{
"XAUUSD": "GOLD.m"
}
],
"description": "Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed.",
"maxProperties": 200,
"additionalProperties": {
"type": "string",
"maxLength": 32
}
},
"follower_id": {
"type": "string",
"format": "uuid",
"examples": [
"9a8b7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d"
],
"description": "The follower's ID (not its account's)."
},
"copy_pending": {
"type": "boolean",
"description": "Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version."
},
"below_minimum": {
"enum": [
"minimum",
"skip"
],
"type": "string",
"description": "When a copy comes out below the broker's minimum lot: trade the minimum, or skip it."
},
"copy_existing": {
"type": "boolean",
"description": "Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied."
},
"symbol_filter": {
"enum": [
"all",
"include",
"exclude"
],
"type": "string",
"description": "`all` copies every symbol, `include` only those in `symbols`, `exclude` all but them."
},
"max_delay_seconds": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "How late a master trade may still be copied, for example after a reconnect; older ones are skipped."
},
"max_slippage_pips": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "The slippage allowed per order; null uses the broker's default."
},
"adjust_contract_size": {
"type": "boolean",
"description": "Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes."
}
},
"additionalProperties": false
}