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)
421 lines (392 loc) • 13.5 kB
TypeScript
import DomainClient from '../domain.client';
import TrackerEventListener from './trackerEventListener';
import PeriodStatisticsListener from './periodStatisticsListener';
import EquityChartListener from './equityChartListener';
import EquityBalanceListener from './equityBalanceListener';
import MetaApi from '../../../metaApi/metaApi';
/**
* metaapi.cloud RiskManagement equity tracking API client (see https://metaapi.cloud/docs/risk-management/)
*/
export default class EquityTrackingClient {
/**
* Constructs RiskManagement equity tracking API client instance
* @param {DomainClient} domainClient domain client
* @param {MetaApi} metaApi metaApi SDK instance
*/
constructor(domainClient: DomainClient, metaApi: MetaApi);
/**
* Creates a profit/drawdown tracker. See
* https://metaapi.cloud/docs/risk-management/restApi/api/createTracker/
* @param {string} accountId id of the MetaApi account
* @param {NewTracker} tracker profit/drawdown tracker
* @return {Promise<TrackerId>} promise resolving with profit/drawdown tracker id
*/
createTracker(accountId: string, tracker: NewTracker): Promise<TrackerId>;
/**
* Returns trackers defined for an account. See
* https://metaapi.cloud/docs/risk-management/restApi/api/getTrackers/
* @param {string} accountId id of the MetaApi account
* @return {Promise<Tracker[]>} promise resolving with trackers
*/
getTrackers(accountId: string): Promise<Tracker[]>;
/**
* Returns profit/drawdown tracker by account and id. See
* https://metaapi.cloud/docs/risk-management/restApi/api/getTracker/
* @param {string} accountId id of the MetaApi account
* @param {string} id tracker id
* @returns {Promise<Tracker>} promise resolving with profit/drawdown tracker found
*/
getTracker(accountId: string, id: string): Promise<Tracker>;
/**
* Returns profit/drawdown tracker by account and name
* @param {string} accountId id of the MetaApi account
* @param {string} name tracker name
* @return {Promise<Tracker>} promise resolving with profit/drawdown tracker found
*/
getTrackerByName(accountId: string, name: string): Promise<Tracker>;
/**
* Updates profit/drawdown tracker. See
* https://metaapi.cloud/docs/risk-management/restApi/api/updateTracker/
* @param {string} accountId id of the MetaApi account
* @param {string} id id of the tracker
* @param {TrackerUpdate} update tracker update
* @return {Promise} promise resolving when profit/drawdown tracker updated
*/
updateTracker(accountId: string, id: string, update: TrackerUpdate): Promise<void>;
/**
* Removes profit/drawdown tracker. See
* https://metaapi.cloud/docs/risk-management/restApi/api/removeTracker/
* @param {string} accountId id of the MetaApi account
* @param {string} id id of the tracker
* @return {Promise} promise resolving when profit/drawdown tracker removed
*/
deleteTracker(accountId: string, id: string): Promise<void>;
/**
* Returns tracker events by broker time range. See
* https://metaapi.cloud/docs/risk-management/restApi/api/getTrackerEvents/
* @param {string} [startBrokerTime] value of the event time in broker timezone to start loading data from, inclusive,
* in 'YYYY-MM-DD HH:mm:ss.SSS format
* @param {string} [endBrokerTime] value of the event time in broker timezone to end loading data at, inclusive,
* in 'YYYY-MM-DD HH:mm:ss.SSS format
* @param {string} [accountId] id of the MetaApi account
* @param {string} [trackerId] id of the tracker
* @param {number} [limit] pagination limit, default is 1000
* @return {Promise<TrackerEvent[]>} promise resolving with tracker events
*/
getTrackerEvents(startBrokerTime?: string, endBrokerTime?: string, accountId?: string, trackerId?: string,
limit?: number): Promise<TrackerEvent[]>;
/**
* Adds a tracker event listener and creates a job to make requests
* @param {TrackerEventListener} listener tracker event listener
* @param {string} [accountId] account id
* @param {string} [trackerId] tracker id
* @param {number} [sequencenumber] sequence number
* @return {string} listener id
*/
addTrackerEventListener(listener: TrackerEventListener, accountId?: string, trackerId?: string,
sequencenumber?: string): string;
/**
* Removes tracker event listener and cancels the event stream
* @param {string} listenerId tracker event listener id
*/
removeTrackerEventListener(listenerId: string): void;
/**
* Returns account profit and drawdown tracking statistics by tracker id. See
* https://metaapi.cloud/docs/risk-management/restApi/api/getTrackingStats/
* @param {string} accountId id of MetaAPI account
* @param {string} trackerId id of the tracker
* @param {string} [startTime] time to start loading stats from, default is current time. Note that stats is loaded in
* backwards direction
* @param {number} [limit] number of records to load, default is 1
* @param {boolean} [realTime] if true, real-time data will be requested
* @return {Promise<PeriodStatistics[]>} promise resolving with profit and drawdown statistics
*/
getTrackingStatistics(accountId: string, trackerId: string, startTime?: string, limit?: number, realTime?: boolean):
Promise<PeriodStatistics[]>
/**
* Adds a period statistics event listener
* @param {PeriodStatisticsListener} listener period statistics event listener
* @param {string} accountId account id
* @param {string} trackerId tracker id
* @return {Promise<string>} listener id
*/
addPeriodStatisticsListener(listener: PeriodStatisticsListener, accountId: string, trackerId: string): Promise<string>;
/**
* Removes period statistics event listener by id
* @param {string} listenerId tracker event listener id
*/
removePeriodStatisticsListener(listenerId: string): void;
/**
* Returns equity chart by account id. See
* https://metaapi.cloud/docs/risk-management/restApi/api/getEquityChart/
* @param {string} accountId metaApi account id
* @param {string} [startTime] starting broker time in YYYY-MM-DD HH:mm:ss format
* @param {string} [endTime] ending broker time in YYYY-MM-DD HH:mm:ss format
* @param {boolean} [realTime] if true, real-time data will be requested
* @param {boolean} [fillSkips] if true, skipped records will be automatically filled based on existing ones
* @return {Promise<EquityChartItem[]>} promise resolving with equity chart
*/
getEquityChart(accountId: string, startTime?: string, endTime?: string, realTime?: boolean, fillSkips?: boolean): Promise<EquityChartItem[]>;
/**
* Adds an equity chart event listener
* @param {EquityChartListener} listener equity chart event listener
* @param {string} accountId account id
* @param {Date} [startTime] date to start tracking from
* @return {Promise<string>} listener id
*/
addEquityChartListener(listener: EquityChartListener, accountId: string, startTime?: Date): Promise<string>;
/**
* Removes equity chart event listener by id
* @param {string} listenerId equity chart listener id
*/
removeEquityChartListener(listenerId: string): void;
/**
* Adds an equity balance event listener
* @param {EquityBalanceListener} listener equity balance event listener
* @param {String} accountId account id
* @returns {Promise<string>} listener id
*/
addEquityBalanceListener(listener: EquityBalanceListener, accountId: string): Promise<string>;
/**
* Removes equity balance event listener by id
* @param {string} listenerId equity balance listener id
*/
removeEquityBalanceListener(listenerId: string): void;
}
/**
* Tracker configuration update
*/
export declare type TrackerUpdate = {
/**
* unique tracker name
*/
name: string
}
/**
* Period length to track profit and drawdown for
* @see {@link https://metaapi.cloud/docs/risk-management/trackingPeriods/}
*/
export declare type Period = 'day' | 'date' | 'week' | 'week-to-date' | 'month' | 'month-to-date' | 'quarter' |
'quarter-to-date' | 'year' | 'year-to-date' | 'lifetime';
/**
* New tracker configuration
*/
export declare type NewTracker = TrackerUpdate & {
/**
* time to start tracking from in broker timezone, YYYY-MM-DD HH:mm:ss.SSS format
*/
startBrokerTime?: string,
/**
* time to end tracking at in broker timezone, YYYY-MM-DD HH:mm:ss.SSS format
*/
endBrokerTime?: string,
/**
* period to track profit and drawdown for
*/
period: Period,
/**
* relative drawdown threshold after which tracker event is generated, a fraction of 1
*/
relativeDrawdownThreshold?: number,
/**
* absolute drawdown threshold after which tracker event is generated, should be greater than 0
*/
absoluteDrawdownThreshold?: number,
/**
* relative profit threshold after which tracker event is generated. A fraction of 1
*/
relativeProfitThreshold?: number,
/**
* absolute profit threshold after which tracker event is generated. Should be greater than 0
*/
absoluteProfitThreshold?: number,
}
/**
* Tracker id
*/
export declare type TrackerId = {
/**
* unique tracker id
*/
id: string
}
/**
* Tracker configuration
*/
export declare type Tracker = NewTracker & {
/**
* unique tracker id
*/
_id: string
}
/**
* Type of the exceeded threshold
*/
export declare type ExceededThresholdType = 'profit' | 'drawdown';
/**
* Profit/drawdown threshold exceeded event model
*/
export declare type TrackerEvent = {
/**
* event unique sequence number
*/
sequencenumber: number,
/**
* MetaApi account id
*/
accountId: string,
/**
* profit/drawdown tracker id
*/
trackerId: string,
/**
* profit/drawdown tracking period start time in broker timezone, in YYYY-MM-DD HH:mm:ss.SSS format
*/
startBrokerTime: string,
/**
* profit/drawdown tracking period end time in broker timezone, in YYYY-MM-DD HH:mm:ss.SSS format
*/
endBrokerTime?: string,
/**
* profit/drawdown tracking period
*/
period: Period,
/**
* profit/drawdown threshold exceeded event time in broker timezone, in YYY-MM-DD HH:mm:ss.SSS format
*/
brokerTime: string,
/**
* absolute drawdown value which was observed when the profit or drawdown threshold was exceeded
*/
absoluteDrawdown: number,
/**
* relative drawdown value which was observed when the profit or drawdown threshold was exceeded
*/
relativeDrawdown: number,
/**
* absolute profit value which was observed when the profit or drawdown threshold was exceeded
*/
absoluteProfit: number,
/**
* relative profit value which was observed when the profit or drawdown threshold was exceeded
*/
relativeProfit: number,
/**
* type of the exceeded threshold
*/
exceededThresholdType: ExceededThresholdType
}
/**
* Period statistics
*/
export declare type PeriodStatistics = {
/**
* period start time in broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
startBrokerTime: string,
/**
* period end time in broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
endBrokerTime?: string,
/**
* period length
*/
period: Period,
/**
* balance at period start time
*/
initialBalance: number,
/**
* time max drawdown was observed at in broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
maxDrawdownTime?: string,
/**
* the value of maximum absolute drawdown observed
*/
maxAbsoluteDrawdown?: number,
/**
* the value of maximum relative drawdown observed
*/
maxRelativeDrawdown?: number,
/**
* time max profit was observed at in broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
maxProfitTime?: string,
/**
* the value of maximum absolute profit observed
*/
maxAbsoluteProfit?: number,
/**
* the value of maximum relative profit observed
*/
maxRelativeProfit?: number,
/**
* the flag indicating that max allowed total drawdown was exceeded
*/
thresholdExceeded: boolean
/**
* type of the exceeded threshold
*/
exceededThresholdType: ExceededThresholdType,
/**
* balance adjustment applied to equity for tracking drawdown/profit
*/
balanceAdjustment?: number,
/**
* count of days when trades were performed during the period
*/
tradeDayCount?: number
}
/**
* Equity chart item
*/
export declare type EquityChartItem = {
/**
* start time of a chart item as per broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
startBrokerTime: string,
/**
* end time of a chart item as per broker timezone, in YYYY-MM-DD HH:mm:ss format
*/
endBrokerTime: string,
/**
* average balance value during the period
*/
averageBalance: number,
/**
* minimum balance value during the period
*/
minBalance: number,
/**
* maximum balance value during the period
*/
maxBalance: number,
/**
* average equity value during the period
*/
averageEquity: number,
/**
* minimum equity value during the period
*/
minEquity: number,
/**
* maximum equity value during the period
*/
maxEquity: number,
/**
* starting balance value observed during the period
*/
startBalance: number,
/**
* starting equity value observed during the period
*/
startEquity: number,
/**
* last balance value observed during the period
*/
lastBalance: number,
/**
* last equity value observed during the period
*/
lastEquity: number
}