metaapi.cloud-copyfactory-sdk
Version:
Javascript SDK for SDK for CopyFactory trade copying API. Can copy trades both between MetaTrader 5 (MT5) and MetaTrader 4 (MT4). (https://metaapi.cloud)
118 lines (117 loc) • 13 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, /**
* CopyFactory client for strategy signal requests
*/ "default", {
enumerable: true,
get: function() {
return StrategySignalClient;
}
});
const _randomstring = /*#__PURE__*/ _interop_require_default(require("randomstring"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
let StrategySignalClient = class StrategySignalClient {
/**
* Constructs CopyFactory strategy signal client instance
* @param {string} accountId strategy provider id
* @param {string} strategyId strategy id
* @param {Object} host host data
* @param {DomainClient} domainClient domain client
*/ constructor(accountId, strategyId, host, domainClient){
this._accountId = accountId;
this._strategyId = strategyId;
this._domainClient = domainClient;
this._host = host;
}
/**
* Generates random signal id
* @return {String} signal id
*/ generateSignalId() {
return _randomstring.default.generate(8);
}
/**
* CopyFactory external signal update payload
* @typedef {Object} CopyFactoryExternalSignalUpdate
* @property {String} symbol trade symbol
* @property {String} type trade type (one of POSITION_TYPE_BUY, POSITION_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT,
* ORDER_TYPE_BUY_STOP, ORDER_TYPE_SELL_STOP)
* @property {Date} time time the signal was emitted at
* @property {Date} [updateTime] last time of the signal update
* @property {Number} volume volume traded
* @property {Number} [magic] expert advisor id
* @property {Number} [stopLoss] stop loss price
* @property {Number} [takeProfit] take profit price
* @property {Number} [openPrice] pending order open price
*/ /**
* CopyFactory external signal
* @typedef {CopyFactoryExternalSignalUpdate} CopyFactoryExternalSignal
* @property {String} id external signal id
*/ /**
* CopyFactory external signal remove payload
* @typedef {Object} CopyFactoryExternalSignalRemove
* @property {Date} time the time signal was removed (closed) at
*/ /**
* Returns active external signals of a strategy. Requires access to
* copyfactory-api:rest:public:external-signals:getSignals method which is included into reader role.
* Requires access to strategy, account resources.
* @param {String} strategyId strategy id
* @returns {Promise<Array<CopyFactoryExternalSignal>>}
*/ getExternalSignals() {
const opts = {
url: `/users/current/strategies/${this._strategyId}/external-signals`,
method: "GET",
headers: {
"auth-token": this._domainClient.token
},
json: true
};
return this._domainClient.requestSignal(opts, this._host, this._accountId);
}
/**
* Updates external signal for a strategy or creates it if it does not exist. See
* https://metaapi.cloud/docs/copyfactory/restApi/api/trading/updateExternalSignal/
* @param {String} signalId external signal id (should be 8 alphanumerical symbols)
* @param {CopyFactoryExternalSignalUpdate} signal signal update payload
* @return {Promise} promise which resolves when the external signal is updated
*/ updateExternalSignal(signalId, signal) {
const opts = {
url: `/users/current/strategies/${this._strategyId}/external-signals/${signalId}`,
method: "PUT",
headers: {
"auth-token": this._domainClient.token
},
data: signal,
json: true
};
return this._domainClient.requestSignal(opts, this._host, this._accountId);
}
/**
* CopyFactory external signal remove payload
* @typedef {Object} CopyFactoryExternalSignalRemove
* @property {Date} time the time signal was removed (closed) at
*/ /**
* Removes (closes) external signal for a strategy. See
* https://metaapi.cloud/docs/copyfactory/restApi/api/trading/removeExternalSignal/
* @param {String} signalId external signal id
* @param {CopyFactoryExternalSignalRemove} signal signal removal payload
* @return {Promise} promise which resolves when the external signal is removed
*/ removeExternalSignal(signalId, signal) {
const opts = {
url: `/users/current/strategies/${this._strategyId}/external-signals/${signalId}/remove`,
method: "POST",
headers: {
"auth-token": this._domainClient.token
},
data: signal,
json: true
};
return this._domainClient.requestSignal(opts, this._host, this._accountId);
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmFuZG9tc3RyaW5nIGZyb20gJ3JhbmRvbXN0cmluZyc7XG5cbi8qKlxuICogQ29weUZhY3RvcnkgY2xpZW50IGZvciBzdHJhdGVneSBzaWduYWwgcmVxdWVzdHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyYXRlZ3lTaWduYWxDbGllbnQge1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIENvcHlGYWN0b3J5IHN0cmF0ZWd5IHNpZ25hbCBjbGllbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjY291bnRJZCBzdHJhdGVneSBwcm92aWRlciBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyYXRlZ3lJZCBzdHJhdGVneSBpZFxuICAgKiBAcGFyYW0ge09iamVjdH0gaG9zdCBob3N0IGRhdGFcbiAgICogQHBhcmFtIHtEb21haW5DbGllbnR9IGRvbWFpbkNsaWVudCBkb21haW4gY2xpZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihhY2NvdW50SWQsIHN0cmF0ZWd5SWQsIGhvc3QsIGRvbWFpbkNsaWVudCkge1xuICAgIHRoaXMuX2FjY291bnRJZCA9IGFjY291bnRJZDtcbiAgICB0aGlzLl9zdHJhdGVneUlkID0gc3RyYXRlZ3lJZDtcbiAgICB0aGlzLl9kb21haW5DbGllbnQgPSBkb21haW5DbGllbnQ7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHJhbmRvbSBzaWduYWwgaWRcbiAgICogQHJldHVybiB7U3RyaW5nfSBzaWduYWwgaWRcbiAgICovXG4gIGdlbmVyYXRlU2lnbmFsSWQoKSB7XG4gICAgcmV0dXJuIHJhbmRvbXN0cmluZy5nZW5lcmF0ZSg4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5RmFjdG9yeSBleHRlcm5hbCBzaWduYWwgdXBkYXRlIHBheWxvYWRcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ29weUZhY3RvcnlFeHRlcm5hbFNpZ25hbFVwZGF0ZVxuICAgKiBAcHJvcGVydHkge1N0cmluZ30gc3ltYm9sIHRyYWRlIHN5bWJvbFxuICAgKiBAcHJvcGVydHkge1N0cmluZ30gdHlwZSB0cmFkZSB0eXBlIChvbmUgb2YgUE9TSVRJT05fVFlQRV9CVVksIFBPU0lUSU9OX1RZUEVfU0VMTCwgT1JERVJfVFlQRV9CVVlfTElNSVQsIE9SREVSX1RZUEVfU0VMTF9MSU1JVCwgXG4gICAqIE9SREVSX1RZUEVfQlVZX1NUT1AsIE9SREVSX1RZUEVfU0VMTF9TVE9QKVxuICAgKiBAcHJvcGVydHkge0RhdGV9IHRpbWUgdGltZSB0aGUgc2lnbmFsIHdhcyBlbWl0dGVkIGF0XG4gICAqIEBwcm9wZXJ0eSB7RGF0ZX0gW3VwZGF0ZVRpbWVdIGxhc3QgdGltZSBvZiB0aGUgc2lnbmFsIHVwZGF0ZVxuICAgKiBAcHJvcGVydHkge051bWJlcn0gdm9sdW1lIHZvbHVtZSB0cmFkZWRcbiAgICogQHByb3BlcnR5IHtOdW1iZXJ9IFttYWdpY10gZXhwZXJ0IGFkdmlzb3IgaWRcbiAgICogQHByb3BlcnR5IHtOdW1iZXJ9IFtzdG9wTG9zc10gc3RvcCBsb3NzIHByaWNlXG4gICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBbdGFrZVByb2ZpdF0gdGFrZSBwcm9maXQgcHJpY2VcbiAgICogQHByb3BlcnR5IHtOdW1iZXJ9IFtvcGVuUHJpY2VdIHBlbmRpbmcgb3JkZXIgb3BlbiBwcmljZVxuICAgKi9cblxuICAvKipcbiAgICogQ29weUZhY3RvcnkgZXh0ZXJuYWwgc2lnbmFsXG4gICAqIEB0eXBlZGVmIHtDb3B5RmFjdG9yeUV4dGVybmFsU2lnbmFsVXBkYXRlfSBDb3B5RmFjdG9yeUV4dGVybmFsU2lnbmFsXG4gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBpZCBleHRlcm5hbCBzaWduYWwgaWRcbiAgICovXG5cbiAgLyoqXG4gICAqIENvcHlGYWN0b3J5IGV4dGVybmFsIHNpZ25hbCByZW1vdmUgcGF5bG9hZFxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDb3B5RmFjdG9yeUV4dGVybmFsU2lnbmFsUmVtb3ZlXG4gICAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZSB0aGUgdGltZSBzaWduYWwgd2FzIHJlbW92ZWQgKGNsb3NlZCkgYXRcbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWN0aXZlIGV4dGVybmFsIHNpZ25hbHMgb2YgYSBzdHJhdGVneS4gUmVxdWlyZXMgYWNjZXNzIHRvXG4gICAqIGNvcHlmYWN0b3J5LWFwaTpyZXN0OnB1YmxpYzpleHRlcm5hbC1zaWduYWxzOmdldFNpZ25hbHMgbWV0aG9kIHdoaWNoIGlzIGluY2x1ZGVkIGludG8gcmVhZGVyIHJvbGUuXG4gICAqIFJlcXVpcmVzIGFjY2VzcyB0byBzdHJhdGVneSwgYWNjb3VudCByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJhdGVneUlkIHN0cmF0ZWd5IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PENvcHlGYWN0b3J5RXh0ZXJuYWxTaWduYWw+Pn1cbiAgICovXG4gIGdldEV4dGVybmFsU2lnbmFscygpIHtcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgdXJsOiBgL3VzZXJzL2N1cnJlbnQvc3RyYXRlZ2llcy8ke3RoaXMuX3N0cmF0ZWd5SWR9L2V4dGVybmFsLXNpZ25hbHNgLFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ2F1dGgtdG9rZW4nOiB0aGlzLl9kb21haW5DbGllbnQudG9rZW5cbiAgICAgIH0sXG4gICAgICBqc29uOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9kb21haW5DbGllbnQucmVxdWVzdFNpZ25hbChvcHRzLCB0aGlzLl9ob3N0LCB0aGlzLl9hY2NvdW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgZXh0ZXJuYWwgc2lnbmFsIGZvciBhIHN0cmF0ZWd5IG9yIGNyZWF0ZXMgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QuIFNlZVxuICAgKiBodHRwczovL21ldGFhcGkuY2xvdWQvZG9jcy9jb3B5ZmFjdG9yeS9yZXN0QXBpL2FwaS90cmFkaW5nL3VwZGF0ZUV4dGVybmFsU2lnbmFsL1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc2lnbmFsSWQgZXh0ZXJuYWwgc2lnbmFsIGlkIChzaG91bGQgYmUgOCBhbHBoYW51bWVyaWNhbCBzeW1ib2xzKVxuICAgKiBAcGFyYW0ge0NvcHlGYWN0b3J5RXh0ZXJuYWxTaWduYWxVcGRhdGV9IHNpZ25hbCBzaWduYWwgdXBkYXRlIHBheWxvYWRcbiAgICogQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSBleHRlcm5hbCBzaWduYWwgaXMgdXBkYXRlZFxuICAgKi9cbiAgdXBkYXRlRXh0ZXJuYWxTaWduYWwoc2lnbmFsSWQsIHNpZ25hbCkge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICB1cmw6IGAvdXNlcnMvY3VycmVudC9zdHJhdGVnaWVzLyR7dGhpcy5fc3RyYXRlZ3lJZH0vZXh0ZXJuYWwtc2lnbmFscy8ke3NpZ25hbElkfWAsXG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnYXV0aC10b2tlbic6IHRoaXMuX2RvbWFpbkNsaWVudC50b2tlblxuICAgICAgfSxcbiAgICAgIGRhdGE6IHNpZ25hbCxcbiAgICAgIGpzb246IHRydWVcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLl9kb21haW5DbGllbnQucmVxdWVzdFNpZ25hbChvcHRzLCB0aGlzLl9ob3N0LCB0aGlzLl9hY2NvdW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHlGYWN0b3J5IGV4dGVybmFsIHNpZ25hbCByZW1vdmUgcGF5bG9hZFxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDb3B5RmFjdG9yeUV4dGVybmFsU2lnbmFsUmVtb3ZlXG4gICAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZSB0aGUgdGltZSBzaWduYWwgd2FzIHJlbW92ZWQgKGNsb3NlZCkgYXRcbiAgICovXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgKGNsb3NlcykgZXh0ZXJuYWwgc2lnbmFsIGZvciBhIHN0cmF0ZWd5LiBTZWVcbiAgICogaHR0cHM6Ly9tZXRhYXBpLmNsb3VkL2RvY3MvY29weWZhY3RvcnkvcmVzdEFwaS9hcGkvdHJhZGluZy9yZW1vdmVFeHRlcm5hbFNpZ25hbC9cbiAgICogQHBhcmFtIHtTdHJpbmd9IHNpZ25hbElkIGV4dGVybmFsIHNpZ25hbCBpZFxuICAgKiBAcGFyYW0ge0NvcHlGYWN0b3J5RXh0ZXJuYWxTaWduYWxSZW1vdmV9IHNpZ25hbCBzaWduYWwgcmVtb3ZhbCBwYXlsb2FkXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgZXh0ZXJuYWwgc2lnbmFsIGlzIHJlbW92ZWRcbiAgICovXG4gIHJlbW92ZUV4dGVybmFsU2lnbmFsKHNpZ25hbElkLCBzaWduYWwpIHtcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgdXJsOiBgL3VzZXJzL2N1cnJlbnQvc3RyYXRlZ2llcy8ke3RoaXMuX3N0cmF0ZWd5SWR9L2V4dGVybmFsLXNpZ25hbHMvJHtzaWduYWxJZH0vcmVtb3ZlYCxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnYXV0aC10b2tlbic6IHRoaXMuX2RvbWFpbkNsaWVudC50b2tlblxuICAgICAgfSxcbiAgICAgIGRhdGE6IHNpZ25hbCxcbiAgICAgIGpzb246IHRydWVcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLl9kb21haW5DbGllbnQucmVxdWVzdFNpZ25hbChvcHRzLCB0aGlzLl9ob3N0LCB0aGlzLl9hY2NvdW50SWQpO1xuICB9XG5cbn0iXSwibmFtZXMiOlsiU3RyYXRlZ3lTaWduYWxDbGllbnQiLCJjb25zdHJ1Y3RvciIsImFjY291bnRJZCIsInN0cmF0ZWd5SWQiLCJob3N0IiwiZG9tYWluQ2xpZW50IiwiX2FjY291bnRJZCIsIl9zdHJhdGVneUlkIiwiX2RvbWFpbkNsaWVudCIsIl9ob3N0IiwiZ2VuZXJhdGVTaWduYWxJZCIsInJhbmRvbXN0cmluZyIsImdlbmVyYXRlIiwiZ2V0RXh0ZXJuYWxTaWduYWxzIiwib3B0cyIsInVybCIsIm1ldGhvZCIsImhlYWRlcnMiLCJ0b2tlbiIsImpzb24iLCJyZXF1ZXN0U2lnbmFsIiwidXBkYXRlRXh0ZXJuYWxTaWduYWwiLCJzaWduYWxJZCIsInNpZ25hbCIsImRhdGEiLCJyZW1vdmVFeHRlcm5hbFNpZ25hbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFFQTs7Q0FFQyxHQUNEOzs7ZUFBcUJBOzs7cUVBTEk7Ozs7OztBQUtWLElBQUEsQUFBTUEsdUJBQU4sTUFBTUE7SUFFbkI7Ozs7OztHQU1DLEdBQ0RDLFlBQVlDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksQ0FBRTtRQUNyRCxJQUFJLENBQUNDLFVBQVUsR0FBR0o7UUFDbEIsSUFBSSxDQUFDSyxXQUFXLEdBQUdKO1FBQ25CLElBQUksQ0FBQ0ssYUFBYSxHQUFHSDtRQUNyQixJQUFJLENBQUNJLEtBQUssR0FBR0w7SUFDZjtJQUVBOzs7R0FHQyxHQUNETSxtQkFBbUI7UUFDakIsT0FBT0MscUJBQVksQ0FBQ0MsUUFBUSxDQUFDO0lBQy9CO0lBRUE7Ozs7Ozs7Ozs7Ozs7R0FhQyxHQUVEOzs7O0dBSUMsR0FFRDs7OztHQUlDLEdBRUQ7Ozs7OztHQU1DLEdBQ0RDLHFCQUFxQjtRQUNuQixNQUFNQyxPQUFPO1lBQ1hDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUNSLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRVMsUUFBUTtZQUNSQyxTQUFTO2dCQUNQLGNBQWMsSUFBSSxDQUFDVCxhQUFhLENBQUNVLEtBQUs7WUFDeEM7WUFDQUMsTUFBTSxJQUFJO1FBQ1o7UUFFQSxPQUFPLElBQUksQ0FBQ1gsYUFBYSxDQUFDWSxhQUFhLENBQUNOLE1BQU0sSUFBSSxDQUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDSCxVQUFVO0lBQzNFO0lBRUE7Ozs7OztHQU1DLEdBQ0RlLHFCQUFxQkMsUUFBUSxFQUFFQyxNQUFNLEVBQUU7UUFDckMsTUFBTVQsT0FBTztZQUNYQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDUixXQUFXLENBQUMsa0JBQWtCLEVBQUVlLFNBQVMsQ0FBQztZQUNqRk4sUUFBUTtZQUNSQyxTQUFTO2dCQUNQLGNBQWMsSUFBSSxDQUFDVCxhQUFhLENBQUNVLEtBQUs7WUFDeEM7WUFDQU0sTUFBTUQ7WUFDTkosTUFBTSxJQUFJO1FBQ1o7UUFDQSxPQUFPLElBQUksQ0FBQ1gsYUFBYSxDQUFDWSxhQUFhLENBQUNOLE1BQU0sSUFBSSxDQUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDSCxVQUFVO0lBQzNFO0lBRUE7Ozs7R0FJQyxHQUVEOzs7Ozs7R0FNQyxHQUNEbUIscUJBQXFCSCxRQUFRLEVBQUVDLE1BQU0sRUFBRTtRQUNyQyxNQUFNVCxPQUFPO1lBQ1hDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUNSLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRWUsU0FBUyxPQUFPLENBQUM7WUFDeEZOLFFBQVE7WUFDUkMsU0FBUztnQkFDUCxjQUFjLElBQUksQ0FBQ1QsYUFBYSxDQUFDVSxLQUFLO1lBQ3hDO1lBQ0FNLE1BQU1EO1lBQ05KLE1BQU0sSUFBSTtRQUNaO1FBQ0EsT0FBTyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1ksYUFBYSxDQUFDTixNQUFNLElBQUksQ0FBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQ0gsVUFBVTtJQUMzRTtBQUVGIn0=