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)

93 lines (79 loc) 3.53 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>RPC Api example</title> </head> <body> <div id='info'></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 token = '<put in your token here>'; const accountId = '<put in your account id here>'; const api = new MetaApi.default(token); async function testMetaApiSynchronization() { try { const account = await api.metatraderAccountApi.getAccount(accountId); log('Waiting for API server to connect to broker (may take couple of minutes)'); await account.waitConnected(); // connect to MetaApi API let connection = account.getRPCConnection(); await connection.connect(); // wait until terminal state synchronized to the local state log('Waiting for SDK to synchronize to terminal state (may take some time depending on your history size)'); await connection.waitSynchronized(); // invoke RPC API (replace ticket numbers with actual ticket numbers which exist in your MT account) log('Testing MetaAPI RPC API'); log('account information:', JSON.stringify(await connection.getAccountInformation())); log('positions:', JSON.stringify(await connection.getPositions())); //log(await connection.getPosition('1234567')); log('open orders:', JSON.stringify(await connection.getOrders())); //log(await connection.getOrder('1234567')); log('history orders by ticket:', JSON.stringify(await connection.getHistoryOrdersByTicket('1234567'))); log('history orders by position:', JSON.stringify(await connection.getHistoryOrdersByPosition('1234567'))); log('history orders (~last 3 months):', JSON.stringify(await connection.getHistoryOrdersByTimeRange(new Date(Date.now() - 90 * 24 * 60 * 60 * 1000), new Date()))); log('history deals by ticket:', JSON.stringify(await connection.getDealsByTicket('1234567'))); log('history deals by position:', JSON.stringify(await connection.getDealsByPosition('1234567'))); log('history deals (~last 3 months):', JSON.stringify(await connection.getDealsByTimeRange(new Date(Date.now() - 90 * 24 * 60 * 60 * 1000), new Date()))); log('server time', JSON.stringify(await connection.getServerTime())); // calculate margin required for trade log('margin required for trade', JSON.stringify(await connection.calculateMargin({ symbol: 'GBPUSD', type: 'ORDER_TYPE_BUY', volume: 0.1, openPrice: 1.1 }))); // trade log('Submitting pending order'); try { let result = await connection.createLimitBuyOrder('GBPUSD', 0.07, 1.0, 0.9, 2.0, { comment: 'comm', clientId: 'TE_GBPUSD_7hyINWqAlE', expiration: { type: 'ORDER_TIME_SPECIFIED', time: new Date(Date.now() + 24 * 60 * 60 * 1000) } }); log('Trade successful, result code is ' + result.stringCode); } catch (err) { log('Trade failed with result code ' + err.stringCode); } } catch (err) { log(err); } return; } testMetaApiSynchronization(); </script> </html>