MT5APIUser.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. //+------------------------------------------------------------------+
  2. //| MetaTrader 5 API |
  3. //| Copyright 2000-2019, MetaQuotes Software Corp. |
  4. //| http://www.metaquotes.net |
  5. //+------------------------------------------------------------------+
  6. #pragma once
  7. //+------------------------------------------------------------------+
  8. //| User record interface |
  9. //+------------------------------------------------------------------+
  10. class IMTUser
  11. {
  12. public:
  13. //--- client rights bit flags
  14. enum EnUsersRights
  15. {
  16. USER_RIGHT_NONE =0x0000000000000000, // none
  17. USER_RIGHT_ENABLED =0x0000000000000001, // client allowed to connect
  18. USER_RIGHT_PASSWORD =0x0000000000000002, // client allowed to change password
  19. USER_RIGHT_TRADE_DISABLED =0x0000000000000004, // client trading disabled
  20. USER_RIGHT_INVESTOR =0x0000000000000008, // client is investor
  21. USER_RIGHT_CONFIRMED =0x0000000000000010, // client certificate confirmed
  22. USER_RIGHT_TRAILING =0x0000000000000020, // trailing stops are allowed
  23. USER_RIGHT_EXPERT =0x0000000000000040, // expert advisors are allowed
  24. USER_RIGHT_API =0x0000000000000080, // client API are allowed
  25. USER_RIGHT_REPORTS =0x0000000000000100, // trade reports are allowed
  26. USER_RIGHT_READONLY =0x0000000000000200, // client is readonly
  27. USER_RIGHT_RESET_PASS =0x0000000000000400, // client must change password at next login
  28. USER_RIGHT_OTP_ENABLED =0x0000000000000800, // client allowed to use one-time password
  29. USER_RIGHT_SPONSORED_HOSTING=0x0000000000002000, // client allowed to use sponsored by broker MetaTrader Virtual Hosting
  30. //--- enumeration borders
  31. USER_RIGHT_DEFAULT =USER_RIGHT_ENABLED |USER_RIGHT_PASSWORD|USER_RIGHT_TRAILING|USER_RIGHT_EXPERT|USER_RIGHT_REPORTS,
  32. USER_RIGHT_ALL =USER_RIGHT_ENABLED |USER_RIGHT_PASSWORD |USER_RIGHT_TRADE_DISABLED|
  33. USER_RIGHT_INVESTOR|USER_RIGHT_CONFIRMED|USER_RIGHT_TRAILING |
  34. USER_RIGHT_EXPERT |USER_RIGHT_API |USER_RIGHT_REPORTS |
  35. USER_RIGHT_READONLY|USER_RIGHT_RESET_PASS|USER_RIGHT_OTP_ENABLED | USER_RIGHT_SPONSORED_HOSTING
  36. };
  37. //--- password types
  38. enum EnUsersPasswords
  39. {
  40. USER_PASS_MAIN =0,
  41. USER_PASS_INVESTOR=1,
  42. USER_PASS_API =2,
  43. //--- enumeration borders
  44. USER_PASS_FIRST =USER_PASS_MAIN,
  45. USER_PASS_LAST =USER_PASS_API,
  46. };
  47. //--- connection types
  48. enum EnUsersConnectionTypes
  49. {
  50. //--- client types
  51. USER_TYPE_CLIENT =0,
  52. USER_TYPE_CLIENT_WINMOBILE =1,
  53. USER_TYPE_CLIENT_WINPHONE =2,
  54. USER_TYPE_CLIENT_IPHONE =4,
  55. USER_TYPE_CLIENT_ANDROID =5,
  56. USER_TYPE_CLIENT_BLACKBERRY =6,
  57. USER_TYPE_CLIENT_WEB =11,
  58. //--- manager types
  59. USER_TYPE_ADMIN =32,
  60. USER_TYPE_MANAGER =33,
  61. USER_TYPE_MANAGER_API =34,
  62. USER_TYPE_ADMIN_API =36,
  63. //--- enumeration borders
  64. USER_TYPE_FIRST =USER_TYPE_CLIENT,
  65. USER_TYPE_LAST =USER_TYPE_ADMIN_API
  66. };
  67. //--- common methods
  68. virtual void Release(void)=0;
  69. virtual MTAPIRES Assign(const IMTUser* user)=0;
  70. virtual MTAPIRES Clear(void)=0;
  71. //--- login
  72. virtual UINT64 Login(void) const=0;
  73. virtual MTAPIRES Login(const UINT64 login)=0;
  74. //--- group
  75. virtual LPCWSTR Group(void) const=0;
  76. virtual MTAPIRES Group(LPCWSTR group)=0;
  77. //--- certificate serial number
  78. virtual UINT64 CertSerialNumber(void) const=0;
  79. //--- EnUsersRights
  80. virtual UINT64 Rights(void) const=0;
  81. virtual MTAPIRES Rights(const UINT64 rights)=0;
  82. //--- registration datetime (filled by MT5)
  83. virtual INT64 Registration(void) const=0;
  84. virtual INT64 LastAccess(void) const =0;
  85. virtual LPCWSTR LastIP(MTAPISTR& ip) const=0;
  86. //--- name
  87. virtual LPCWSTR Name(void) const=0;
  88. virtual MTAPIRES Name(LPCWSTR name)=0;
  89. //--- company
  90. virtual LPCWSTR Company(void) const=0;
  91. virtual MTAPIRES Company(LPCWSTR id)=0;
  92. //--- external system account (exchange, ECN, etc)
  93. virtual LPCWSTR Account(void) const=0;
  94. virtual MTAPIRES Account(LPCWSTR account)=0;
  95. //--- country
  96. virtual LPCWSTR Country(void) const=0;
  97. virtual MTAPIRES Country(LPCWSTR account)=0;
  98. //--- client language (WinAPI LANGID)
  99. virtual UINT Language(void) const=0;
  100. virtual MTAPIRES Language(const UINT language)=0;
  101. //--- city
  102. virtual LPCWSTR City(void) const=0;
  103. virtual MTAPIRES City(LPCWSTR city)=0;
  104. //--- state
  105. virtual LPCWSTR State(void) const=0;
  106. virtual MTAPIRES State(LPCWSTR state)=0;
  107. //--- ZIP code
  108. virtual LPCWSTR ZIPCode(void) const=0;
  109. virtual MTAPIRES ZIPCode(LPCWSTR code)=0;
  110. //--- address
  111. virtual LPCWSTR Address(void) const=0;
  112. virtual MTAPIRES Address(LPCWSTR code)=0;
  113. //--- phone
  114. virtual LPCWSTR Phone(void) const=0;
  115. virtual MTAPIRES Phone(LPCWSTR phone)=0;
  116. //--- email
  117. virtual LPCWSTR EMail(void) const=0;
  118. virtual MTAPIRES EMail(LPCWSTR email)=0;
  119. //--- additional ID
  120. virtual LPCWSTR ID(void) const=0;
  121. virtual MTAPIRES ID(LPCWSTR email)=0;
  122. //--- additional status
  123. virtual LPCWSTR Status(void) const=0;
  124. virtual MTAPIRES Status(LPCWSTR id)=0;
  125. //--- comment
  126. virtual LPCWSTR Comment(void) const=0;
  127. virtual MTAPIRES Comment(LPCWSTR comment)=0;
  128. //--- color
  129. virtual COLORREF Color(void) const=0;
  130. virtual MTAPIRES Color(const COLORREF color)=0;
  131. //--- phone password
  132. virtual LPCWSTR PhonePassword(void) const=0;
  133. virtual MTAPIRES PhonePassword(LPCWSTR password)=0;
  134. //--- leverage
  135. virtual UINT Leverage(void) const=0;
  136. virtual MTAPIRES Leverage(const UINT leverage)=0;
  137. //--- agent account
  138. virtual UINT64 Agent(void) const=0;
  139. virtual MTAPIRES Agent(const UINT64 agent)=0;
  140. //--- balance & credit
  141. virtual double Balance(void) const=0;
  142. virtual double Credit(void) const=0;
  143. //--- accumulated interest rate
  144. virtual double InterestRate(void) const=0;
  145. //--- accumulated daily and monthly commissions
  146. virtual double CommissionDaily(void) const=0;
  147. virtual double CommissionMonthly(void) const=0;
  148. //--- accumulated daily and monthly agent commissions
  149. virtual double CommissionAgentDaily(void) const=0;
  150. virtual double CommissionAgentMonthly(void) const=0;
  151. //--- previous balance state
  152. virtual double BalancePrevDay(void) const=0;
  153. virtual double BalancePrevMonth(void) const=0;
  154. //--- previous equity state
  155. virtual double EquityPrevDay(void) const=0;
  156. virtual double EquityPrevMonth(void) const=0;
  157. //--- user record internal data for API usage
  158. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const INT64 value)=0;
  159. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  160. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const double value)=0;
  161. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,INT64& value) const=0;
  162. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,UINT64& value) const=0;
  163. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,double& value) const=0;
  164. virtual MTAPIRES ApiDataClear(const USHORT app_id)=0;
  165. virtual MTAPIRES ApiDataClearAll(void)=0;
  166. //--- external accounts
  167. virtual MTAPIRES ExternalAccountAdd(const UINT64 gateway_id,LPCWSTR account)=0;
  168. virtual MTAPIRES ExternalAccountUpdate(const UINT pos,const UINT64 gateway_id,LPCWSTR account)=0;
  169. virtual MTAPIRES ExternalAccountDelete(const UINT pos)=0;
  170. virtual MTAPIRES ExternalAccountClear(void)=0;
  171. virtual UINT ExternalAccountTotal(void) const=0;
  172. virtual MTAPIRES ExternalAccountNext(const UINT pos,UINT64& gateway_id,MTAPISTR& account) const=0;
  173. virtual MTAPIRES ExternalAccountGet(const UINT64 gateway_id,MTAPISTR& account) const=0;
  174. //--- last password change datetime (filled by MT5)
  175. virtual INT64 LastPassChange(void) const =0;
  176. //--- client's MetaQuotes ID
  177. virtual LPCWSTR MQID(MTAPISTR& mqid) const=0;
  178. //--- user record internal data for API usage
  179. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const INT64 value)=0;
  180. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  181. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const double value)=0;
  182. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,INT64& value) const=0;
  183. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,UINT64& value) const=0;
  184. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,double& value) const=0;
  185. //--- clients passwords derivative hash for password comparisson
  186. virtual MTAPIRES PasswordHash(const UINT type,MTAPISTR& password_hash) const=0;
  187. //--- lead campaign
  188. virtual LPCWSTR LeadCampaign(void) const=0;
  189. virtual MTAPIRES LeadCampaign(LPCWSTR lead_campaign)=0;
  190. //--- lead source
  191. virtual LPCWSTR LeadSource(void) const=0;
  192. virtual MTAPIRES LeadSource(LPCWSTR lead_source)=0;
  193. //--- client id
  194. virtual UINT64 ClientID(void) const=0;
  195. virtual UINT64 ClientID(const UINT64 id)=0;
  196. };
  197. //+------------------------------------------------------------------+
  198. //| User array interface |
  199. //+------------------------------------------------------------------+
  200. class IMTUserArray
  201. {
  202. public:
  203. //--- common methods
  204. virtual void Release(void)=0;
  205. virtual MTAPIRES Assign(const IMTUserArray* array)=0;
  206. virtual MTAPIRES Clear(void)=0;
  207. //--- add
  208. virtual MTAPIRES Add(IMTUser* user)=0;
  209. virtual MTAPIRES AddCopy(const IMTUser* user)=0;
  210. virtual MTAPIRES Add(IMTUserArray* array)=0;
  211. virtual MTAPIRES AddCopy(const IMTUserArray* array)=0;
  212. //--- delete & detach
  213. virtual MTAPIRES Delete(const UINT pos)=0;
  214. virtual IMTUser* Detach(const UINT pos)=0;
  215. //--- update
  216. virtual MTAPIRES Update(const UINT pos,IMTUser* account)=0;
  217. virtual MTAPIRES UpdateCopy(const UINT pos,const IMTUser* account)=0;
  218. virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
  219. //--- data access
  220. virtual UINT Total(void) const=0;
  221. virtual IMTUser* Next(const UINT index) const=0;
  222. //--- sorting and search
  223. virtual MTAPIRES Sort(MTSortFunctionPtr sort_function)=0;
  224. virtual int Search(const void *key,MTSortFunctionPtr sort_function) const=0;
  225. virtual int SearchGreatOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  226. virtual int SearchGreater(const void *key,MTSortFunctionPtr sort_function) const=0;
  227. virtual int SearchLessOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  228. virtual int SearchLess(const void *key,MTSortFunctionPtr sort_function) const=0;
  229. virtual int SearchLeft(const void *key,MTSortFunctionPtr sort_function) const=0;
  230. virtual int SearchRight(const void *key,MTSortFunctionPtr sort_function) const=0;
  231. };
  232. //+------------------------------------------------------------------+
  233. //| User records notification interface |
  234. //+------------------------------------------------------------------+
  235. class IMTUserSink
  236. {
  237. public:
  238. //--- events
  239. virtual void OnUserAdd(const IMTUser* /*user*/) { }
  240. virtual void OnUserUpdate(const IMTUser* /*user*/) { }
  241. virtual void OnUserDelete(const IMTUser* /*user*/) { }
  242. virtual void OnUserClean(const UINT64 /*login*/) { }
  243. virtual void OnUserLogin(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { }
  244. virtual void OnUserSync(void) { }
  245. //--- hooks
  246. virtual MTAPIRES HookUserAdd(IMTUser* /*user*/) { return(MT_RET_OK); }
  247. virtual MTAPIRES HookUserUpdate(const IMTUser* /*prev*/,IMTUser* /*user*/) { return(MT_RET_OK); }
  248. virtual MTAPIRES HookUserDelete(const IMTUser* /*user*/) { return(MT_RET_OK); }
  249. virtual MTAPIRES HookUserLogin(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { return(MT_RET_OK); }
  250. //--- events
  251. virtual void OnUserLogout(LPCWSTR /*ip*/,const IMTUser* /*user*/,const UINT /*type*/) { }
  252. virtual void OnUserArchive(const IMTUser* /*user*/) { }
  253. virtual void OnUserRestore(const IMTUser* /*user*/) { }
  254. //--- hooks
  255. virtual MTAPIRES HookUserArchive(const IMTUser* /*user*/) { return(MT_RET_OK); }
  256. };
  257. //+------------------------------------------------------------------+