| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- //+------------------------------------------------------------------+
- //| MetaTrader 5 API |
- //| Copyright 2000-2019, MetaQuotes Software Corp. |
- //| http://www.metaquotes.net |
- //+------------------------------------------------------------------+
- #pragma once
- //+------------------------------------------------------------------+
- //| User record interface |
- //+------------------------------------------------------------------+
- class IMTUser
- {
- public:
- //--- client rights bit flags
- enum EnUsersRights
- {
- USER_RIGHT_NONE =0x0000000000000000, // none
- USER_RIGHT_ENABLED =0x0000000000000001, // client allowed to connect
- USER_RIGHT_PASSWORD =0x0000000000000002, // client allowed to change password
- USER_RIGHT_TRADE_DISABLED =0x0000000000000004, // client trading disabled
- USER_RIGHT_INVESTOR =0x0000000000000008, // client is investor
- USER_RIGHT_CONFIRMED =0x0000000000000010, // client certificate confirmed
- USER_RIGHT_TRAILING =0x0000000000000020, // trailing stops are allowed
- USER_RIGHT_EXPERT =0x0000000000000040, // expert advisors are allowed
- USER_RIGHT_API =0x0000000000000080, // client API are allowed
- USER_RIGHT_REPORTS =0x0000000000000100, // trade reports are allowed
- USER_RIGHT_READONLY =0x0000000000000200, // client is readonly
- USER_RIGHT_RESET_PASS =0x0000000000000400, // client must change password at next login
- USER_RIGHT_OTP_ENABLED =0x0000000000000800, // client allowed to use one-time password
- USER_RIGHT_SPONSORED_HOSTING=0x0000000000002000, // client allowed to use sponsored by broker MetaTrader Virtual Hosting
- //--- enumeration borders
- USER_RIGHT_DEFAULT =USER_RIGHT_ENABLED |USER_RIGHT_PASSWORD|USER_RIGHT_TRAILING|USER_RIGHT_EXPERT|USER_RIGHT_REPORTS,
- USER_RIGHT_ALL =USER_RIGHT_ENABLED |USER_RIGHT_PASSWORD |USER_RIGHT_TRADE_DISABLED|
- USER_RIGHT_INVESTOR|USER_RIGHT_CONFIRMED|USER_RIGHT_TRAILING |
- USER_RIGHT_EXPERT |USER_RIGHT_API |USER_RIGHT_REPORTS |
- USER_RIGHT_READONLY|USER_RIGHT_RESET_PASS|USER_RIGHT_OTP_ENABLED | USER_RIGHT_SPONSORED_HOSTING
- };
- //--- password types
- enum EnUsersPasswords
- {
- USER_PASS_MAIN =0,
- USER_PASS_INVESTOR=1,
- USER_PASS_API =2,
- //--- enumeration borders
- USER_PASS_FIRST =USER_PASS_MAIN,
- USER_PASS_LAST =USER_PASS_API,
- };
- //--- connection types
- enum EnUsersConnectionTypes
- {
- //--- client types
- USER_TYPE_CLIENT =0,
- USER_TYPE_CLIENT_WINMOBILE =1,
- USER_TYPE_CLIENT_WINPHONE =2,
- USER_TYPE_CLIENT_IPHONE =4,
- USER_TYPE_CLIENT_ANDROID =5,
- USER_TYPE_CLIENT_BLACKBERRY =6,
- USER_TYPE_CLIENT_WEB =11,
- //--- manager types
- USER_TYPE_ADMIN =32,
- USER_TYPE_MANAGER =33,
- USER_TYPE_MANAGER_API =34,
- USER_TYPE_ADMIN_API =36,
- //--- enumeration borders
- USER_TYPE_FIRST =USER_TYPE_CLIENT,
- USER_TYPE_LAST =USER_TYPE_ADMIN_API
- };
- //--- common methods
- virtual void Release(void)=0;
- virtual MTAPIRES Assign(const IMTUser* user)=0;
- virtual MTAPIRES Clear(void)=0;
- //--- login
- virtual UINT64 Login(void) const=0;
- virtual MTAPIRES Login(const UINT64 login)=0;
- //--- group
- virtual LPCWSTR Group(void) const=0;
- virtual MTAPIRES Group(LPCWSTR group)=0;
- //--- certificate serial number
- virtual UINT64 CertSerialNumber(void) const=0;
- //--- EnUsersRights
- virtual UINT64 Rights(void) const=0;
- virtual MTAPIRES Rights(const UINT64 rights)=0;
- //--- registration datetime (filled by MT5)
- virtual INT64 Registration(void) const=0;
- virtual INT64 LastAccess(void) const =0;
- virtual LPCWSTR LastIP(MTAPISTR& ip) const=0;
- //--- name
- virtual LPCWSTR Name(void) const=0;
- virtual MTAPIRES Name(LPCWSTR name)=0;
- //--- company
- virtual LPCWSTR Company(void) const=0;
- virtual MTAPIRES Company(LPCWSTR id)=0;
- //--- external system account (exchange, ECN, etc)
- virtual LPCWSTR Account(void) const=0;
- virtual MTAPIRES Account(LPCWSTR account)=0;
- //--- country
- virtual LPCWSTR Country(void) const=0;
- virtual MTAPIRES Country(LPCWSTR account)=0;
- //--- client language (WinAPI LANGID)
- virtual UINT Language(void) const=0;
- virtual MTAPIRES Language(const UINT language)=0;
- //--- city
- virtual LPCWSTR City(void) const=0;
- virtual MTAPIRES City(LPCWSTR city)=0;
- //--- state
- virtual LPCWSTR State(void) const=0;
- virtual MTAPIRES State(LPCWSTR state)=0;
- //--- ZIP code
- virtual LPCWSTR ZIPCode(void) const=0;
- virtual MTAPIRES ZIPCode(LPCWSTR code)=0;
- //--- address
- virtual LPCWSTR Address(void) const=0;
- virtual MTAPIRES Address(LPCWSTR code)=0;
- //--- phone
- virtual LPCWSTR Phone(void) const=0;
- virtual MTAPIRES Phone(LPCWSTR phone)=0;
- //--- email
- virtual LPCWSTR EMail(void) const=0;
- virtual MTAPIRES EMail(LPCWSTR email)=0;
- //--- additional ID
- virtual LPCWSTR ID(void) const=0;
- virtual MTAPIRES ID(LPCWSTR email)=0;
- //--- additional status
- virtual LPCWSTR Status(void) const=0;
- virtual MTAPIRES Status(LPCWSTR id)=0;
- //--- comment
- virtual LPCWSTR Comment(void) const=0;
- virtual MTAPIRES Comment(LPCWSTR comment)=0;
- //--- color
- virtual COLORREF Color(void) const=0;
- virtual MTAPIRES Color(const COLORREF color)=0;
- //--- phone password
- virtual LPCWSTR PhonePassword(void) const=0;
- virtual MTAPIRES PhonePassword(LPCWSTR password)=0;
- //--- leverage
- virtual UINT Leverage(void) const=0;
- virtual MTAPIRES Leverage(const UINT leverage)=0;
- //--- agent account
- virtual UINT64 Agent(void) const=0;
- virtual MTAPIRES Agent(const UINT64 agent)=0;
- //--- balance & credit
- virtual double Balance(void) const=0;
- virtual double Credit(void) const=0;
- //--- accumulated interest rate
- virtual double InterestRate(void) const=0;
- //--- accumulated daily and monthly commissions
- virtual double CommissionDaily(void) const=0;
- virtual double CommissionMonthly(void) const=0;
- //--- accumulated daily and monthly agent commissions
- virtual double CommissionAgentDaily(void) const=0;
- virtual double CommissionAgentMonthly(void) const=0;
- //--- previous balance state
- virtual double BalancePrevDay(void) const=0;
- virtual double BalancePrevMonth(void) const=0;
- //--- previous equity state
- virtual double EquityPrevDay(void) const=0;
- virtual double EquityPrevMonth(void) const=0;
- //--- user record internal data for API usage
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const INT64 value)=0;
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const UINT64 value)=0;
- virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const double value)=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,INT64& value) const=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,UINT64& value) const=0;
- virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,double& value) const=0;
- virtual MTAPIRES ApiDataClear(const USHORT app_id)=0;
- virtual MTAPIRES ApiDataClearAll(void)=0;
- //--- external accounts
- virtual MTAPIRES ExternalAccountAdd(const UINT64 gateway_id,LPCWSTR account)=0;
- virtual MTAPIRES ExternalAccountUpdate(const UINT pos,const UINT64 gateway_id,LPCWSTR account)=0;
- virtual MTAPIRES ExternalAccountDelete(const UINT pos)=0;
- virtual MTAPIRES ExternalAccountClear(void)=0;
- virtual UINT ExternalAccountTotal(void) const=0;
- virtual MTAPIRES ExternalAccountNext(const UINT pos,UINT64& gateway_id,MTAPISTR& account) const=0;
- virtual MTAPIRES ExternalAccountGet(const UINT64 gateway_id,MTAPISTR& account) const=0;
- //--- last password change datetime (filled by MT5)
- virtual INT64 LastPassChange(void) const =0;
- //--- client's MetaQuotes ID
- virtual LPCWSTR MQID(MTAPISTR& mqid) const=0;
- //--- user record internal data for API usage
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const INT64 value)=0;
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const UINT64 value)=0;
- virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const double value)=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,INT64& value) const=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,UINT64& value) const=0;
- virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,double& value) const=0;
- //--- clients passwords derivative hash for password comparisson
- virtual MTAPIRES PasswordHash(const UINT type,MTAPISTR& password_hash) const=0;
- //--- lead campaign
- virtual LPCWSTR LeadCampaign(void) const=0;
- virtual MTAPIRES LeadCampaign(LPCWSTR lead_campaign)=0;
- //--- lead source
- virtual LPCWSTR LeadSource(void) const=0;
- virtual MTAPIRES LeadSource(LPCWSTR lead_source)=0;
- //--- client id
- virtual UINT64 ClientID(void) const=0;
- virtual UINT64 ClientID(const UINT64 id)=0;
- };
- //+------------------------------------------------------------------+
- //| User array interface |
- //+------------------------------------------------------------------+
- class IMTUserArray
- {
- public:
- //--- common methods
- virtual void Release(void)=0;
- virtual MTAPIRES Assign(const IMTUserArray* array)=0;
- virtual MTAPIRES Clear(void)=0;
- //--- add
- virtual MTAPIRES Add(IMTUser* user)=0;
- virtual MTAPIRES AddCopy(const IMTUser* user)=0;
- virtual MTAPIRES Add(IMTUserArray* array)=0;
- virtual MTAPIRES AddCopy(const IMTUserArray* array)=0;
- //--- delete & detach
- virtual MTAPIRES Delete(const UINT pos)=0;
- virtual IMTUser* Detach(const UINT pos)=0;
- //--- update
- virtual MTAPIRES Update(const UINT pos,IMTUser* account)=0;
- virtual MTAPIRES UpdateCopy(const UINT pos,const IMTUser* account)=0;
- virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
- //--- data access
- virtual UINT Total(void) const=0;
- virtual IMTUser* Next(const UINT index) const=0;
- //--- sorting and search
- virtual MTAPIRES Sort(MTSortFunctionPtr sort_function)=0;
- virtual int Search(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchGreatOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchGreater(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLessOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLess(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchLeft(const void *key,MTSortFunctionPtr sort_function) const=0;
- virtual int SearchRight(const void *key,MTSortFunctionPtr sort_function) const=0;
- };
- //+------------------------------------------------------------------+
- //| User records notification interface |
- //+------------------------------------------------------------------+
- class IMTUserSink
- {
- public:
- //--- events
- virtual void OnUserAdd(const IMTUser* /*user*/) { }
- virtual void OnUserUpdate(const IMTUser* /*user*/) { }
- virtual void OnUserDelete(const IMTUser* /*user*/) { }
- virtual void OnUserClean(const UINT64 /*login*/) { }
- virtual void OnUserLogin(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { }
- virtual void OnUserSync(void) { }
- //--- hooks
- virtual MTAPIRES HookUserAdd(IMTUser* /*user*/) { return(MT_RET_OK); }
- virtual MTAPIRES HookUserUpdate(const IMTUser* /*prev*/,IMTUser* /*user*/) { return(MT_RET_OK); }
- virtual MTAPIRES HookUserDelete(const IMTUser* /*user*/) { return(MT_RET_OK); }
- virtual MTAPIRES HookUserLogin(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { return(MT_RET_OK); }
- //--- events
- virtual void OnUserLogout(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { }
- virtual void OnUserArchive(const IMTUser* /*user*/) { }
- virtual void OnUserRestore(const IMTUser* /*user*/) { }
- //--- hooks
- virtual MTAPIRES HookUserArchive(const IMTUser* /*user*/) { return(MT_RET_OK); }
- };
- //+------------------------------------------------------------------+
|