Python SDK for SDK for CopyFactory trade copying API. Can copy trades both between MetaTrader 5 (MT5) and MetaTrader 4 (MT4). (https://metaapi.cloud)
Project description
CopyFactory is a powerful trade copying API which makes developing forex trade copying applications as easy as writing few lines of code.
CopyFactory API is a member of MetaApi project (https://metaapi.cloud), a powerful cloud forex trading API which supports both MetaTrader 4 and MetaTrader 5 platforms.
MetaApi is a paid service, however API access to one MetaTrader account is free of charge.
The MetaApi pricing was developed with the intent to make your charges less or equal to what you would have to pay for hosting your own infrastructure. This is possible because over time we managed to heavily optimize our MetaTrader infrastructure. And with MetaApi you can save significantly on application development and maintenance costs and time thanks to high-quality API, open-source SDKs and convenience of a cloud service.
Why do we offer CopyFactory API trade copying API
We found that developing reliable and flexible trade copier is a task which requires lots of effort, because developers have to solve a series of complex technical tasks to create a product.
We decided to share our product as it allows developers to start with a powerful solution in almost no time, saving on development and infrastructure maintenance costs.
Frequently asked questions (FAQ)
FAQ is located here: http://metaapi.cloud/docs/copyfactory/faq
CopyFactory copytrading API features
Features supported:
low latency trade copying API
reliable trade copying API
suitable for large-scale deployments
suitable for large number of subscribers
connect arbitrary number of strategy providers and subscribers
subscribe accounts to multiple strategies at once
select arbitrary copy ratio for each subscription
configure symbol mapping between strategy providers and subscribers
apply advanced risk filters on strategy provider side
override risk filters on subscriber side
provide multiple strategies from a single account based on magic or symbol filters
supports manual trading on subscriber accounts while copying trades
synchronize subscriber account with strategy providers
monitor trading history
calculate trade copying commissions for account managers
support portfolio strategies as trading signal source, i.e. the strategies which include signals of several other strategies (also known as combos on some platforms)
Please note that trade copying to MT5 netting accounts is not supported in the current API version
REST API documentation
CopyFactory SDK is built on top of CopyFactory REST API.
CopyFactory REST API docs are available at https://metaapi.cloud/docs/copyfactory/
Code examples
We published some code examples in our github repository, namely:
Installation
pip install metaapi-cloud-copyfactory-sdk
Retrieving API token
Please visit https://app.metaapi.cloud/token web UI to obtain your API token.
Configuring trade copying
In order to configure trade copying you need to:
add MetaApi MetaTrader accounts with CopyFactory as application field value (see above)
create CopyFactory master and slave accounts and connect them to MetaApi accounts via connectionId field
create a strategy being copied
subscribe slave CopyFactory accounts to the strategy
from metaapi_cloud_sdk import MetaApi
from metaapi_cloud_copyfactory_sdk import CopyFactory
token = '...'
metaapi = MetaApi(token=token)
copy_factory = CopyFactory(token=token)
# retrieve MetaApi MetaTrader accounts with CopyFactory as application field value
master_metaapi_account = await metaapi.metatrader_account_api.get_account(account_id='masterMetaapiAccountId')
if master_metaapi_account.application != 'CopyFactory'
raise Exception('Please specify CopyFactory application field value in your MetaApi account in order to use it in CopyFactory API')
slave_metaapi_account = await metaapi.metatrader_account_api.get_account(account_id='slaveMetaapiAccountId')
if slave_metaapi_account.application != 'CopyFactory'
raise Exception('Please specify CopyFactory application field value in your MetaApi account in order to use it in CopyFactory API')
# create CopyFactory master and slave accounts and connect them to MetaApi accounts via connectionId field
configuration_api = copy_factory.configuration_api
master_account_id = configuration_api.generate_account_id()
slave_account_id = configuration_api.generate_account_id()
await configuration_api.update_account(id=master_account_id, account={
'name': 'Demo account',
'connectionId': master_metaapi_account.id,
'subscriptions': []
})
# create a strategy being copied
strategy_id = await configuration_api.generate_strategy_id()
await configuration_api.update_strategy(id=strategy_id['id'], strategy={
'name': 'Test strategy',
'description': 'Some useful description about your strategy',
'positionLifecycle': 'hedging',
'connectionId': master_metaapi_account.id,
'maxTradeRisk': 0.1,
'stopOutRisk': {
'value': 0.4,
'startTime': '2020-08-24T00:00:00.000Z'
},
'timeSettings': {
'lifetimeInHours': 192,
'openingIntervalInMinutes': 5
}
})
# subscribe slave CopyFactory accounts to the strategy
await configuration_api.update_account(id=slave_account_id, account={
'name': 'Demo account',
'connectionId': slave_metaapi_account.id,
'subscriptions': [
{
'strategyId': strategy_id['id'],
'multiplier': 1
}
]
})
See in-code documentation for full definition of possible configuration options.
Retrieving trade copying history
CopyFactory allows you to monitor transactions conducted on trading accounts in real time.
Retrieving trading history on provider side
history_api = copy_factory.history_api
# retrieve list of subscribers
print(await history_api.get_subscribers())
# retrieve list of strategies provided
print(await history_api.get_provided_strategies())
# retrieve trading history, please note that this method support pagination and limits number of records
print(await history_api.get_provided_strategies_transactions(time_from=datetime.fromisoformat('2020-08-01'),
time_till=datetime.fromisoformat('2020-09-01')))
Retrieving trading history on subscriber side
history_api = copy_factory.history_api
# retrieve list of providers
print(await history_api.get_providers())
# retrieve list of strategies subscribed to
print(await history_api.get_strategies_subscribed())
# retrieve trading history, please note that this method support pagination and limits number of records
print(await history_api.get_strategies_subscribed_transactions(time_from=datetime.fromisoformat('2020-08-01'),
time_till=datetime.fromisoformat('2020-09-01')))
Resynchronizing slave accounts to masters
There is a configurable time limit during which the trades can be opened. Sometimes trades can not open in time due to broker errors or trading session time discrepancy. You can resynchronize a slave account to place such late trades. Please note that positions which were closed manually on a slave account will also be reopened during resynchronization.
account_id = '...' # CopyFactory account id
# resynchronize all strategies
await copy_factory.trading_api.resynchronize(account_id=account_id)
# resynchronize specific strategy
await copy_factory.trading_api.resynchronize(account_id=account_id, strategy_ids=['ABCD'])
Managing stopouts
A subscription to a strategy can be stopped if the strategy have exceeded allowed risk limit.
trading_api = copy_factory.trading_api
account_id = '...' # CopyFactory account id
strategy_id = '...' # CopyFactory strategy id
# retrieve list of strategy stopouts
print(await trading_api.get_stopouts(account_id=account_id))
# reset a stopout so that subscription can continue
await trading_api.reset_stopout(account_id=account_id, strategy_id=strategy_id, reason='daily-equity')
Retrieving slave trading logs
trading_api = copy_factory.trading_api
account_id = '...' # CopyFactory account id
# retrieve slave trading log
print(await trading_api.get_user_log(account_id))
# retrieve paginated slave trading log by time range
print(await trading_api.get_user_log(account_id, datetime.fromtimestamp(datetime.now().timestamp() - 24 * 60 * 60), None, 20, 10))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for metaapi_cloud_copyfactory_sdk-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfaae2ec9db2c8ec841ceff481d5466debb8c03c187a571b998d3d95b56e2ece |
|
MD5 | bcdd6eca5e4788a2dce3651f2700cc95 |
|
BLAKE2b-256 | 00cd80763ec6426ec16e247f31e6f6608c7dda8dc9e0c18a028d389253efd635 |