{"id":21447156,"url":"https://github.com/metaapi/metaapi-java-sdk","last_synced_at":"2026-01-24T01:31:58.208Z","repository":{"id":206148922,"uuid":"715949090","full_name":"metaapi/metaapi-java-sdk","owner":"metaapi","description":"Java SDK for MetaApi, a professional cloud forex trading API for MetaTrader platform which supports both MetaTrader MetaTrader 5 and MetaTrader 4. Free usage tier available.","archived":false,"fork":false,"pushed_at":"2024-01-20T09:28:55.000Z","size":16,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T13:12:25.346Z","etag":null,"topics":["api","cloud","forex","java","metaapi","metaapi-cloud","metatrader","metatrader4","metatrader5","mt4","mt4-api","mt5","mt5-api","rest","trading","websocket","ws"],"latest_commit_sha":null,"homepage":"https://metaapi.cloud","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metaapi.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-08T06:51:37.000Z","updated_at":"2025-03-07T15:10:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"c273874f-f16e-4c2a-845d-4e3beb55b508","html_url":"https://github.com/metaapi/metaapi-java-sdk","commit_stats":null,"previous_names":["metaapi/metaapi-java-sdk"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaapi%2Fmetaapi-java-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaapi%2Fmetaapi-java-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaapi%2Fmetaapi-java-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaapi%2Fmetaapi-java-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metaapi","download_url":"https://codeload.github.com/metaapi/metaapi-java-sdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249796021,"owners_count":21326780,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","cloud","forex","java","metaapi","metaapi-cloud","metatrader","metatrader4","metatrader5","mt4","mt4-api","mt5","mt5-api","rest","trading","websocket","ws"],"created_at":"2024-11-23T03:09:03.149Z","updated_at":"2026-01-24T01:31:58.152Z","avatar_url":"https://github.com/metaapi.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# metaapi.cloud SDK for Java\n\n**Note: The Java SDK was updated long time ago and lacks important bugfixes and updates, and in order to access our service using Java SDK you need to request an explicit permission to do so via online chat. We plan to update the java SDK sometime in future. Meanwhile we recommend you to use javascript or python SDK instead.**\n\nMetaApi is a powerful, fast, cost-efficient, easy to use and standards-driven cloud forex trading API for MetaTrader 4 and MetaTrader 5 platform designed for traders, investors and forex application developers to boost forex application development process. MetaApi can be used with any broker and does not require you to be a brokerage.\n\nCopyFactory is a simple yet powerful copy-trading API which is a part of MetaApi. See below for CopyFactory readme section.\n\nMetaApi is a paid service, but API access to one MetaTrader account is free of charge.\n\nThe [MetaApi pricing](https://metaapi.cloud/#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.\n\nOfficial REST and websocket API documentation: [https://metaapi.cloud/docs/client/](https://metaapi.cloud/docs/client/)\n\nPlease note that this SDK provides an abstraction over REST and websocket API to simplify your application logic.\n\nFor more information about SDK APIs please check esdoc documentation in source codes located inside lib folder of this npm package.\n\n## Working code examples\nPlease check [this short video](https://youtu.be/dDOUWBjdfA4) to see how you can download samples via our web application.\n\nYou can also find code examples at [examples folder of our github repo](https://github.com/metaapi/metaapi-java-sdk/tree/master/examples) or in the examples folder of the project.\n\nWe have composed a [short guide explaining how to use the example code](https://metaapi.cloud/docs/client/usingCodeExamples/)\n\n## Installation\nIf you use Apache Maven, add this to `\u003cdependencies\u003e` in your `pom.xml`:\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecloud.metaapi.sdk\u003c/groupId\u003e\n  \u003cartifactId\u003emetaapi-java-sdk\u003c/artifactId\u003e\n  \u003cversion\u003e14.0.8\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nOther options can be found on [this page](https://search.maven.org/artifact/cloud.metaapi.sdk/metaapi-java-sdk/14.0.4/jar).\n\n## Running Java SDK examples\nIn order to run Java SDK examples, follow these steps:\n1. Make sure that you have installed [Maven](http://maven.apache.org) and its command `mvn` is accessible.\n2. Navigate to the root folder of the example project (where its `pom.xml` is located).\n3. Build the project with `mvn package`.\n4. Run `mvn exec:java@`_`ExampleClassName`_ where _`ExampleClassName`_ is the example to execute, e.g. `mvn exec:java@MetaApiRpcExample`.\n\nExample parameters such as token or account id can be passed via environment variables, or set directly in the example source code. In the last case you need to rebuild the example with `mvn package`. \n\n## Connecting to MetaApi\nPlease use one of these ways: \n1. [https://app.metaapi.cloud/token](https://app.metaapi.cloud/token) web UI to obtain your API token.\n2. An account access token which grants access to a single account. See section below on instructions on how to retrieve account access token.\n\nSupply token to the MetaApi class constructor.\n\n```java\nimport cloud.metaapi.sdk.metaApi.MetaApi;\n\nString token = \"...\";\nMetaApi api = new MetaApi(token);\n```\n\n## Retrieving account access token\nAccount access token grants access to a single account. You can retrieve account access token via API:\n```java\nString accountId = \"...\";\nMetatraderAccount account = api.getMetatraderAccountApi().getAccount(accountId).join();\nString accountAccessToken = account.getAccessToken();\nSystem.out.println(accountAccessToken);\n```\n\nAlternatively, you can retrieve account access token via web UI on https://app.metaapi.cloud/accounts page (see [this video](https://youtu.be/PKYiDns6_xI)).\n\n## Managing MetaTrader accounts (API servers for MT accounts)\nBefore you can use the API you have to add an MT account to MetaApi and start an API server for it.\n\nHowever, before you can create an account, you have to create a provisioning profile.\n\n### Managing provisioning profiles via web UI\nYou can manage provisioning profiles here: [https://app.metaapi.cloud/provisioning-profiles](https://app.metaapi.cloud/provisioning-profiles)\n\n### Creating a provisioning profile via API\n```java\n// if you do not have created a provisioning profile for your broker,\n// you should do it before creating an account\nProvisioningProfile provisioningProfile = api.getProvisioningProfileApi()\n    .createProvisioningProfile(new NewProvisioningProfileDto() {{\n        name = \"My profile\";\n        version = 5;\n        brokerTimezone = \"EET\";\n        brokerDSTSwitchTimezone = \"EET\";\n    }}).join();\n// servers.dat file is required for MT5 profile and can be found inside\n// config directory of your MetaTrader terminal data folder. It contains\n// information about available broker servers\nprovisioningProfile.uploadFile(\"servers.dat\", \"/path/to/servers.dat\").join();\n// for MT4, you should upload an .srv file instead\nprovisioningProfile.uploadFile(\"broker.srv\", \"/path/to/broker.srv\").join();\n```\n\n### Retrieving existing provisioning profiles via API\n```java\nList\u003cProvisioningProfile\u003e provisioningProfiles = api.getProvisioningProfileApi()\n    .getProvisioningProfiles(null, null).join();\nProvisioningProfile provisioningProfile = api.getProvisioningProfileApi().getProvisioningProfile(\"profileId\").join();\n```\n\n### Updating a provisioning profile via API\n```java\nprovisioningProfile.update(new ProvisioningProfileUpdateDto() {{ name = \"New name\" }}).join();\n// for MT5, you should upload a servers.dat file\nprovisioningProfile.uploadFile(\"servers.dat\", \"/path/to/servers.dat\").join();\n// for MT4, you should upload an .srv file instead\nprovisioningProfile.uploadFile(\"broker.srv\", \"/path/to/broker.srv\").join();\n```\n\n### Removing a provisioning profile\n```java\nprovisioningProfile.remove().join();\n```\n\n### Managing MetaTrader accounts (API servers) via web UI\nYou can manage MetaTrader accounts here: [https://app.metaapi.cloud/accounts](https://app.metaapi.cloud/accounts)\n\n### Create a MetaTrader account (API server) via API\n```java\nMetatraderAccount account = api.getMetatraderAccountApi().createAccount(new NewMetatraderAccountDto() {\n  name = \"Trading account #1\";\n  type = \"cloud\";\n  login = \"1234567\";\n  // password can be investor password for read-only access\n  password = \"qwerty\";\n  server = \"ICMarketsSC-Demo\";\n  provisioningProfileId = provisioningProfile.getId();\n  application = \"MetaApi\";\n  magic = 123456;\n  quoteStreamingIntervalInSeconds = 2.5; // set to 0 to receive quote per tick\n  reliability = \"regular\"; // set this field to 'high' value if you want to increase uptime of your account (recommended for production environments)\n});\n```\n\n### Retrieving existing accounts via API\n```java\n// filter and paginate accounts, see docs for full list of filter options available\nList\u003cMetatraderAccount\u003e accounts = api.getMetatraderAccountApi().getAccounts(new AccountsFilter() {{\n  limit = 10;\n  offset = 0;\n  query = \"ICMarketsSC-MT5\";\n  state = List.of(DeploymentState.DEPLOYED);\n}}).join();\n// get accounts without filter (returns 1000 accounts max)\nList\u003cMetatraderAccount\u003e accounts = api.getMetatraderAccountApi().getAccounts(null).join();\n\nMetatraderAccount account = api.getMetatraderAccountApi().getAccount(\"accountId\").join();\n```\n\n### Updating an existing account via API\n```java\naccount.update(new MetatraderAccountUpdateDto() {\n  name = \"Trading account #1\";\n  login = \"1234567\";\n  // password can be investor password for read-only access\n  password = \"qwerty\";\n  server = \"ICMarketsSC-Demo\";\n  quoteStreamingIntervalInSeconds = 2.5; // set to 0 to receive quote per tick\n}).join();\n```\n\n### Removing an account\n```java\naccount.remove().join();\n```\n\n### Deploying, undeploying and redeploying an account (API server) via API\n```java\naccount.deploy().join();\naccount.undeploy().join();\naccount.redeploy().join();\n```\n\n### Manage custom experts (EAs)\nCustom expert advisors can only be used for MT4 accounts on g1 infrastructure. EAs which use DLLs are not supported.\n\n### Creating an expert advisor via API\nYou can use the code below to create an EA. Please note that preset field is a base64-encoded preset file.\n```java\nExpertAdvisor expert = account.createExpertAdvisor(\"expertId\", new NewExpertAdvisorDto() {{\n  period = \"1h\";\n  symbol = \"EURUSD\";\n  preset = \"a2V5MT12YWx1ZTEKa2V5Mj12YWx1ZTIKa2V5Mz12YWx1ZTMKc3VwZXI9dHJ1ZQ\";\n}}).join();\nexpert.uploadFile(\"/path/to/custom-ea\").join();\n```\n\n### Retrieving existing experts via API\n```java\nList\u003cExpertAdvisor\u003e experts = account.getExpertAdvisors().join();\n```\n\n### Retrieving existing expert by id via API\n```java\nExpertAdvisor expert = account.getExpertAdvisor(\"expertId\").join();\n```\n\n### Updating existing expert via API\nYou can use the code below to update an EA. Please note that preset field is a base64-encoded preset file.\n```java\nexpert.update(new NewExpertAdvisorDto() {{\n  period = \"4h\";\n  symbol = \"EURUSD\";\n  preset = \"a2V5MT12YWx1ZTEKa2V5Mj12YWx1ZTIKa2V5Mz12YWx1ZTMKc3VwZXI9dHJ1ZQ\";\n}}).join();\nexpert.uploadFile(\"/path/to/custom-ea\").join();\n```\n\n### Removing expert via API\n```java\nexpert.remove().join();\n```\n\n## Access MetaTrader account via RPC API\nRPC API let you query the trading terminal state. You should use\nRPC API if you develop trading monitoring apps like myfxbook or other\nsimple trading apps.\n\n### Query account information, positions, orders and history via RPC API\n```java\nMetaApiConnection connection = account.connect().join();\n\nconnection.waitSynchronized().join();\n\n// retrieve balance and equity\nSystem.out.println(connection.getAccountInformation().join());\n// retrieve open positions\nSystem.out.println(connection.getPositions().join());\n// retrieve a position by id\nSystem.out.println(connection.getPosition(\"1234567\").join());\n// retrieve pending orders\nSystem.out.println(connection.getOrders().join());\n// retrieve a pending order by id\nSystem.out.println(connection.getOrder(\"1234567\").join());\n// retrieve history orders by ticket\nSystem.out.println(connection.getHistoryOrdersByTicket(\"1234567\").join());\n// retrieve history orders by position id\nSystem.out.println(connection.getHistoryOrdersByPosition(\"1234567\").join());\n// retrieve history orders by time range\nSystem.out.println(connection.getHistoryOrdersByTimeRange(startTime, endTime).join());\n// retrieve history deals by ticket\nSystem.out.println(connection.getDealsByTicket(\"1234567\").join());\n// retrieve history deals by position id\nSystem.out.println(connection.getDealsByPosition(\"1234567\").join());\n// retrieve history deals by time range\nSystem.out.println(connection.getDealsByTimeRange(startTime, endTime).join());\n```\n\n### Query contract specifications and quotes via RPC API\n```java\nMetaApiConnection connection = account.connect().join();\n\nconnection.waitSynchronized().join();\n\n// first, subscribe to market data\nconnection.subscribeToMarketData(\"GBPUSD\").join();\n\n// read symbols available\nSystem.out.println(connection.getSymbols().join());\n// read constract specification\nSystem.out.println(connection.getSymbolSpecification(\"GBPUSD\").join());\n// read current price\nSystem.out.println(connection.getSymbolPrice(\"GBPUSD\").join());\n```\n\n### Query historical market data via RPC API\nCurrently this API is supported on G1 and MT4 G2 only.\n\n```java\n// retrieve 1000 candles before the specified time\nList\u003cMetatraderCandle\u003e candles = account.getHistoricalCandles(\"EURUSD\", \"1m\", new IsoTime(\"2021-05-01T00:00:00.000Z\"), 1000).join();\n// retrieve 1000 ticks after the specified time\nList\u003cMetatraderTick\u003e ticks = account.getHistoricalTicks(\"EURUSD\", new IsoTime(\"2021-05-01T00:00:00.000Z\"), 5, 1000).join();\n// retrieve 1000 latest ticks\nList\u003cMetatraderTick\u003e ticks = account.getHistoricalTicks(\"EURUSD\", null, 0, 1000).join();\n```\n\n### Use real-time streaming API\nReal-time streaming API is good for developing trading applications like trade copiers or automated trading strategies.\nThe API synchronizes the terminal state locally so that you can query local copy of the terminal state really fast.\n\n#### Synchronizing and reading teminal state\n```java\nMetatraderAccount account = api.getMetatraderAccountApi().getAccount(\"accountId\").join();\n\n// access local copy of terminal state\nTerminalState terminalState = connection.getTerminalState();\n\n// wait until synchronization completed\nconnection.waitSynchronized().join();\n\nSystem.out.println(terminalState.isConnected());\nSystem.out.println(terminalState.isConnectedToBroker());\nSystem.out.println(terminalState.getAccountInformation());\nSystem.out.println(terminalState.getPositions());\nSystem.out.println(terminalState.getOrders());\n// symbol specifications\nSystem.out.println(terminalState.getSpecifications());\nSystem.out.println(terminalState.getSpecification(\"EURUSD\"));\nSystem.out.println(terminalState.getPrice(\"EURUSD\"));\n\n// access history storage\nHistoryStorage historyStorage = connection.getHistoryStorage();\n\n// both orderSynchronizationFinished and dealSynchronizationFinished\n// should be true once history synchronization have finished\nSystem.out.println(historyStorage.isOrderSynchronizationFinished());\nSystem.out.println(historyStorage.isDealSynchronizationFinished());\n```\n\n#### Overriding local history storage\nBy default history is stored in memory only. You can override history storage to save trade history to a persistent storage like MongoDB database.\n```java\nimport cloud.metaapi.sdk.metaApi.HistoryStorage;\n\nclass MongodbHistoryStorage extends HistoryStorage {\n  // implement the abstract methods, see MemoryHistoryStorage for sample\n  // implementation\n}\n\nHistoryStorage historyStorage = new MongodbHistoryStorage();\n\n// Note: if you will not specify history storage, then in-memory storage\n// will be used (instance of MemoryHistoryStorage)\nMetaApiConnection connection = account.connect(historyStorage).join();\n\n// access history storage\nHistoryStorage historyStorage = connection.getHistoryStorage();\n\n// invoke other methods provided by your history storage implementation\nSystem.out.println(((MongodbHistoryStorage) historyStorage).yourMethod().join());\n```\n\n#### Receiving synchronization events\nYou can override SynchronizationListener in order to receive synchronization event notifications, such as account/position/order/history updates or symbol quote updates.\n```java\nimport cloud.metaapi.sdk.clients.metaApi.SynchronizationListener;\n\n// receive synchronization event notifications\n// first, implement your listener\nclass MySynchronizationListener extends SynchronizationListener {\n  // override abstract methods you want to receive notifications for\n}\n\n// now add the listener\nSynchronizationListener listener = new MySynchronizationListener();\nconnection.addSynchronizationListener(listener);\n\n// remove the listener when no longer needed\nconnection.removeSynchronizationListener(listener);\n```\n\n### Retrieve contract specifications and quotes via streaming API\n```java\nMetaApiConnection connection = account.connect().join();\nconnection.waitSynchronized().join();\n// first, subscribe to market data\nconnection.subscribeToMarketData(\"GBPUSD\").join();\n// read constract specification\nSystem.out.println(terminalState.getSpecification(\"EURUSD\"));\n// read current price\nSystem.out.println(terminalState.getPrice(\"EURUSD\"));\n\n// unsubscribe from market data when no longer needed\nconnection.unsubscribeFromMarketData(\"GBPUSD\").join();\n```\n\n### Execute trades (both RPC and streaming APIs)\n```java\nMetaApiConnection connection = account.connect().join();\n\nconnection.waitSynchronized().join();\n\n// trade\nTradeOptions options = new TradeOptions() {{ comment = \"comment\"; clientId = \"TE_GBPUSD_7hyINWqAl\"; }};\nSystem.out.println(connection.createMarketBuyOrder(\"GBPUSD\", 0.07, 0.9, 2.0, options).join());\nSystem.out.println(connection.createMarketSellOrder(\"GBPUSD\", 0.07, 2.0, 0.9, options).join());\nSystem.out.println(connection.createLimitBuyOrder(\"GBPUSD\", 0.07, 1.0, 0.9, 2.0, options).join());\nSystem.out.println(connection.createLimitSellOrder(\"GBPUSD\", 0.07, 1.5, 2.0, 0.9, options).join());\nSystem.out.println(connection.createStopBuyOrder(\"GBPUSD\", 0.07, 1.5, 0.9, 2.0, options).join());\nSystem.out.println(connection.createStopSellOrder(\"GBPUSD\", 0.07, 1.0, 2.0, 0.9, options).join());\nSystem.out.println(connection.createStopLimitBuyOrder(\"GBPUSD\", 0.07, 1.5, 1.4, 0.9, 2.0, options).join());\nSystem.out.println(connection.createStopLimitSellOrder(\"GBPUSD\", 0.07, 1.0, 1.1, 2.0, 0.9, options).join());\nSystem.out.println(connection.modifyPosition(\"46870472\", 2.0, 0.9).join());\nSystem.out.println(connection.closePositionPartially(\"46870472\", 0.9, null).join());\nSystem.out.println(connection.closePosition(\"46870472\", null).join());\nSystem.out.println(connection.closeBy(\"46870472\", \"46870482\", null).join());\nSystem.out.println(connection.closePositionsBySymbol(\"EURUSD\", null).join());\nSystem.out.println(connection.modifyOrder(\"46870472\", 1.0, 2.0, 0.9).join());\nSystem.out.println(connection.cancelOrder(\"46870472\").join());\n\n// if you need to, check the extra result information in stringCode and numericCode properties of the response\nMetatraderTradeResponse result = connection.createMarketBuyOrder(\"GBPUSD\", 0.07, 0.9, 2.0, options).join();\nSystem.out.println(\"Trade successful, result code is \" + result.stringCode);\n```\n\n## Monitoring account connection health and uptime\nYou can monitor account connection health using MetaApiConnection.healthMonitor API.\n```java\nConnectionHealthMonitor monitor = connection.getHealthMonitor();\n// retrieve server-side app health status\nSystem.out.println(monitor.getServerHealthStatus());\n// retrieve detailed connection health status\nSystem.out.println(monitor.getHealthStatus());\n// retrieve account connection update measured over last 7 days\nSystem.out.println(monitor.getUptime());\n```\n\n## Tracking latencies\nYou can track latencies uring MetaApi.latencyMonitor API. Client-side latencies include network communication delays, thus the lowest client-side latencies are achieved if you host your app in AWS Ohio region.\n```java\nMetaApi api = new MetaApi(\"token\", new MetaApi.Options() {{\n  enableLatencyMonitor = true;\n}});\nLatencyMonitor monitor = api.getLatencyMonitor();\n// retrieve trade latecy stats\nSystem.out.println(monitor.getTradeLatencies());\n// retrieve update streaming latency stats\nSystem.out.println(monitor.getUpdateLatencies());\n// retrieve quote streaming latency stats\nSystem.out.println(monitor.getPriceLatencies());\n// retrieve request latency stats\nSystem.out.println(monitor.getRequestLatencies());\n```\n\n## Managing MetaTrader demo accounts via API\nPlease note that not all MT4/MT5 servers allows you to create demo accounts using the method below.\n### Create a MetaTrader 4 demo account\n```java\nMetatraderDemoAccount demoAccount = api.getMetatraderDemoAccountApi()\n  .createMT4DemoAccount(provisioningProfile.getId(), new NewMT4DemoAccount() {{\n  balance = 100000;\n  email = \"example@example.com\";\n  leverage = 100;\n  serverName = \"Exness-Trial4\";\n}}).join();\n```\n\n### Create a MetaTrader 5 demo account\n```java\nMetatraderDemoAccount demoAccount = api.getMetatraderDemoAccountApi()\n  .createMT5DemoAccount(provisioningProfile.getId(), new NewMT5DemoAccount() {{\n  balance = 100000;\n  email = \"example@example.com\";\n  leverage = 100;\n  serverName = \"ICMarketsSC-Demo\";\n}}).join();\n```\n\n## Rate limits \u0026 quotas\nAPI calls you make are subject to rate limits. See [MT account management API](https://metaapi.cloud/docs/provisioning/rateLimiting/) and [MetaApi API](https://metaapi.cloud/docs/client/rateLimiting/) for details.\n\nMetaApi applies quotas to the number of accounts and provisioning profiles, for more details see the [MT account management API quotas](https://metaapi.cloud/docs/provisioning/userQuota/)\n\n## CopyFactory copy trading API\n\nCopyFactory is a powerful trade copying API which makes developing forex\ntrade copying applications as easy as writing few lines of code.\n\nYou can find CopyFactory Java SDK documentation here: [https://github.com/metaapi/metaapi-copyfactory-java-sdk](https://github.com/metaapi/metaapi-copyfactory-java-sdk)\n\n## MetaStats trading statistics API\n\nMetaStats is a powerful trade statistics API which makes it possible to add forex trading metrics into forex applications.\n\nYou can find MetaStats Java SDK documentation here: [https://github.com/metaapi/metaapi-metastats-java-sdk](https://github.com/metaapi/metaapi-metastats-java-sdk)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaapi%2Fmetaapi-java-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetaapi%2Fmetaapi-java-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaapi%2Fmetaapi-java-sdk/lists"}