UNPKG

metaapi.cloud-sdk

Version:

SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)

97 lines (87 loc) 4.46 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Copy trade example</title> </head> <body> <div style="padding: 20px; display: flex; flex-direction: column; width: 200px"> <label for="token-input" style="margin-bottom: 5px">Terminal access token</label> <input id="token-input" style="margin-bottom: 10px" type="text"> <label for="provider-account-id-input" style="margin-bottom: 5px">Provider account ID</label> <input id="provider-account-id-input" type="text" style="margin-bottom: 10px"> <label for="subscriber-account-id-input" style="margin-bottom: 5px">Subscriber account ID</label> <input id="subscriber-account-id-input" type="text" style="margin-bottom: 10px"> <button id="connect-button" onclick="onSubmit()">Connect</button> </div> <div id='info' style="margin-top: 20px"></div> </body> <script src="https://unpkg.com/metaapi.cloud-sdk"></script> <script> const infoElement = document.getElementById('info'); function log() { if(typeof arguments[1] === 'object'){ arguments[1] = JSON.stringify(arguments[1]); } const el = document.createElement('div'); el.innerHTML = [].join.call(arguments, ' '); infoElement.appendChild(el); console.log(...arguments); } const buttonElement = document.getElementById('connect-button') const onSubmit = async () => { buttonElement.disabled = true; const token = document.getElementById('token-input').value; const providerAccountId = document.getElementById('provider-account-id-input').value; const subscriberAccountId = document.getElementById('subscriber-account-id-input').value; if (token && providerAccountId && subscriberAccountId) { const api = new MetaApi.default(token); const copyFactory = new MetaApi.CopyFactory(token); async function configureCopyFactory() { try { let providerMetaapiAccount = await api.metatraderAccountApi.getAccount(providerAccountId); if(!providerMetaapiAccount.copyFactoryRoles || !providerMetaapiAccount.copyFactoryRoles.includes('PROVIDER')) { throw new Error('Please specify PROVIDER copyFactoryRoles value in your MetaApi account in ' + 'order to use it in CopyFactory API'); } let subscriberMetaapiAccount = await api.metatraderAccountApi.getAccount(subscriberAccountId); if(!subscriberMetaapiAccount.copyFactoryRoles || !subscriberMetaapiAccount.copyFactoryRoles.includes('SUBSCRIBER')) { throw new Error('Please specify SUBSCRIBER copyFactoryRoles value in your MetaApi account in ' + 'order to use it in CopyFactory API'); } let configurationApi = copyFactory.configurationApi; const strategies = await configurationApi.getStrategiesWithInfiniteScrollPagination(); const strategy = strategies.find(s => s.accountId === providerMetaapiAccount.id); let strategyId; if(strategy) { strategyId = strategy._id; } else { strategyId = await configurationApi.generateStrategyId(); strategyId = strategyId.id; } // create a strategy being copied await configurationApi.updateStrategy(strategyId, { name: 'Test strategy', description: 'Some useful description about your strategy', accountId: providerMetaapiAccount.id }); // create subscriber await configurationApi.updateSubscriber(subscriberMetaapiAccount.id, { name: 'Test subscriber', subscriptions: [ { strategyId: strategyId, multiplier: 1 } ] }); } catch (err) { console.error(err); } } await configureCopyFactory(); } buttonElement.disabled = false; } </script> </html>