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)
107 lines (91 loc) • 3.83 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Metastats 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="account-id-input" style="margin-bottom: 5px">Account ID</label>
<input id="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 accountId = document.getElementById('account-id-input').value;
if (token && accountId) {
const api = new MetaApi.default(token);
const metaStats = new MetaApi.MetaStats(token);
// you can configure http client via second parameter,
// see esdoc in-code documentation for full definition of possible configuration options
async function accountDeploy() {
try {
const account = await api.metatraderAccountApi.getAccount(accountId);
// wait until account is deployed and connected to broker
log('Deploying account');
if (account.state !== 'DEPLOYED') {
await account.deploy();
} else {
log('Account already deployed');
}
log('Waiting for API server to connect to broker (may take couple of minutes)');
if (account.connectionStatus !== 'CONNECTED') {
await account.waitConnected();
}
} catch (err) {
log(err);
}
}
accountDeploy();
async function getAccountMetrics() {
try {
let metrics = await metaStats.getMetrics(accountId);
log(metrics);//-> {trades: ..., balance: ..., ...}
} catch (err) {
log(err);
}
}
async function getAccountTrades(startTime, endTime) {
try {
let trades = await metaStats.getAccountTrades(accountId, startTime, endTime);
log(trades.slice(-5));//-> {_id: ..., gain: ..., ...}
} catch (err) {
log(err);
}
}
async function getAccountOpenTrades() {
try {
let openTrades = await metaStats.getAccountOpenTrades(accountId);
log(openTrades);//-> {_id: ..., gain: ..., ...}
} catch (err) {
log(err);
}
}
await Promise.all([
getAccountMetrics(),
getAccountTrades('2020-01-01 00:00:00.000', '2021-01-01 00:00:00.000'),
getAccountOpenTrades(),
])
}
buttonElement.disabled = false;
}
</script>
</html>