MT5APIPosition.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. //+------------------------------------------------------------------+
  2. //| MetaTrader 5 API |
  3. //| Copyright 2000-2019, MetaQuotes Software Corp. |
  4. //| http://www.metaquotes.net |
  5. //+------------------------------------------------------------------+
  6. #pragma once
  7. //+------------------------------------------------------------------+
  8. //| Trade position interface |
  9. //+------------------------------------------------------------------+
  10. class IMTPosition
  11. {
  12. public:
  13. //--- position types
  14. enum EnPositionAction
  15. {
  16. POSITION_BUY =0, // buy
  17. POSITION_SELL =1, // sell
  18. //--- enumeration borders
  19. POSITION_FIRST =POSITION_BUY,
  20. POSITION_LAST =POSITION_SELL
  21. };
  22. //--- activation modes
  23. enum EnActivation
  24. {
  25. ACTIVATION_NONE =0, // none
  26. ACTIVATION_SL =1, // SL activated
  27. ACTIVATION_TP =2, // TP activated
  28. ACTIVATION_STOPOUT =3, // Stop-Out activated
  29. //--- enumeration borders
  30. ACTIVATION_FIRST =ACTIVATION_NONE,
  31. ACTIVATION_LAST =ACTIVATION_STOPOUT,
  32. };
  33. //--- position activation flags
  34. enum EnTradeActivationFlags
  35. {
  36. ACTIV_FLAGS_NO_LIMIT =0x00000001,
  37. ACTIV_FLAGS_NO_STOP =0x00000002,
  38. ACTIV_FLAGS_NO_SLIMIT =0x00000004,
  39. ACTIV_FLAGS_NO_SL =0x00000008,
  40. ACTIV_FLAGS_NO_TP =0x00000010,
  41. ACTIV_FLAGS_NO_SO =0x00000020,
  42. ACTIV_FLAGS_NO_EXPIRATION=0x00000040,
  43. //---
  44. ACTIV_FLAGS_NONE =0x00000000,
  45. ACTIV_FLAGS_ALL =ACTIV_FLAGS_NO_LIMIT|ACTIV_FLAGS_NO_STOP|ACTIV_FLAGS_NO_SLIMIT|ACTIV_FLAGS_NO_SL|
  46. ACTIV_FLAGS_NO_TP|ACTIV_FLAGS_NO_SO|ACTIV_FLAGS_NO_EXPIRATION
  47. };
  48. //--- position creation reasons
  49. enum EnPositionReason
  50. {
  51. POSITION_REASON_CLIENT =0, // position placed manually
  52. POSITION_REASON_EXPERT =1, // position placed by expert
  53. POSITION_REASON_DEALER =2, // position placed by dealer
  54. POSITION_REASON_SL =3, // position placed due SL
  55. POSITION_REASON_TP =4, // position placed due TP
  56. POSITION_REASON_SO =5, // position placed due Stop-Out
  57. POSITION_REASON_ROLLOVER =6, // position placed due rollover
  58. POSITION_REASON_EXTERNAL_CLIENT=7, // position placed from the external system by client
  59. POSITION_REASON_VMARGIN =8, // position placed due variation margin
  60. POSITION_REASON_GATEWAY =9, // position placed by gateway
  61. POSITION_REASON_SIGNAL =10, // position placed by signal service
  62. POSITION_REASON_SETTLEMENT=11, // position placed due settlement
  63. POSITION_REASON_TRANSFER =12, // position placed due position transfer
  64. POSITION_REASON_SYNC =13, // position placed due position synchronization
  65. POSITION_REASON_EXTERNAL_SERVICE=14, // position placed from the external system due service issues
  66. POSITION_REASON_MIGRATION=15, // position placed due migration
  67. POSITION_REASON_MOBILE =16, // position placed by mobile terminal
  68. POSITION_REASON_WEB =17, // position placed by web terminal
  69. POSITION_REASON_SPLIT =18, // position placed due split
  70. //--- enumeration borders
  71. POSITION_REASON_FIRST =POSITION_REASON_CLIENT,
  72. POSITION_REASON_LAST =POSITION_REASON_SPLIT
  73. };
  74. //--- modification flags
  75. enum EnTradeModifyFlags
  76. {
  77. MODIFY_FLAGS_ADMIN =0x00000001,
  78. MODIFY_FLAGS_MANAGER =0x00000002,
  79. MODIFY_FLAGS_POSITION =0x00000004,
  80. MODIFY_FLAGS_RESTORE =0x00000008,
  81. MODIFY_FLAGS_API_ADMIN =0x00000010,
  82. MODIFY_FLAGS_API_MANAGER =0x00000020,
  83. MODIFY_FLAGS_API_SERVER =0x00000040,
  84. MODIFY_FLAGS_API_GATEWAY =0x00000080,
  85. //--- enumeration borders
  86. MODIFY_FLAGS_NONE =0x00000000,
  87. MODIFY_FLAGS_ALL =MODIFY_FLAGS_ADMIN|MODIFY_FLAGS_MANAGER|MODIFY_FLAGS_POSITION|MODIFY_FLAGS_RESTORE|
  88. MODIFY_FLAGS_API_ADMIN|MODIFY_FLAGS_API_MANAGER|MODIFY_FLAGS_API_SERVER|MODIFY_FLAGS_API_GATEWAY
  89. };
  90. //--- common methods
  91. virtual void Release(void)=0;
  92. virtual MTAPIRES Assign(const IMTPosition* position)=0;
  93. virtual MTAPIRES Clear(void)=0;
  94. virtual LPCWSTR Print(MTAPISTR& string) const=0;
  95. //--- owner client login
  96. virtual UINT64 Login(void) const=0;
  97. //--- position symbol
  98. virtual LPCWSTR Symbol(void) const=0;
  99. virtual MTAPIRES Symbol(LPCWSTR symbol)=0;
  100. //--- EnPositionAction
  101. virtual UINT Action(void) const=0;
  102. virtual MTAPIRES Action(const UINT action)=0;
  103. //--- price digits
  104. virtual UINT Digits(void) const=0;
  105. virtual MTAPIRES Digits(const UINT digits)=0;
  106. //--- currency digits
  107. virtual UINT DigitsCurrency(void) const=0;
  108. virtual MTAPIRES DigitsCurrency(const UINT digits)=0;
  109. //--- symbol contract size
  110. virtual double ContractSize(void) const=0;
  111. virtual MTAPIRES ContractSize(const double contract_size)=0;
  112. //--- position create time
  113. virtual INT64 TimeCreate(void) const=0;
  114. virtual MTAPIRES TimeCreate(const INT64 time)=0;
  115. //--- position last update time
  116. virtual INT64 TimeUpdate(void) const=0;
  117. virtual MTAPIRES TimeUpdate(const INT64 time)=0;
  118. //--- position weighted average open price
  119. virtual double PriceOpen(void) const=0;
  120. virtual MTAPIRES PriceOpen(const double price)=0;
  121. //--- position current price
  122. virtual double PriceCurrent(void) const=0;
  123. virtual MTAPIRES PriceCurrent(const double price)=0;
  124. //--- position SL price
  125. virtual double PriceSL(void) const=0;
  126. virtual MTAPIRES PriceSL(const double price)=0;
  127. //--- position TP price
  128. virtual double PriceTP(void) const=0;
  129. virtual MTAPIRES PriceTP(const double price)=0;
  130. //--- position volume
  131. virtual UINT64 Volume(void) const=0;
  132. virtual MTAPIRES Volume(const UINT64 volume)=0;
  133. //--- position floating profit
  134. virtual double Profit(void) const=0;
  135. virtual MTAPIRES Profit(const double profit)=0;
  136. //--- position accumulated swaps
  137. virtual double Storage(void) const=0;
  138. virtual MTAPIRES Storage(const double storage)=0;
  139. //--- obsolete value
  140. virtual double ObsoleteValue(void) const=0;
  141. virtual MTAPIRES ObsoleteValue(const double value)=0;
  142. //--- profit conversion rate (from symbol profit currency to deposit currency)
  143. virtual double RateProfit(void) const=0;
  144. virtual MTAPIRES RateProfit(const double rate)=0;
  145. //--- margin conversion rate (from symbol margin currency to deposit currency)
  146. virtual double RateMargin(void) const=0;
  147. virtual MTAPIRES RateMargin(const double rate)=0;
  148. //--- expert id (filled by expert advisor)
  149. virtual UINT64 ExpertID(void) const=0;
  150. virtual MTAPIRES ExpertID(const UINT64 id)=0;
  151. //--- expert position id
  152. virtual UINT64 ExpertPositionID(void) const=0;
  153. virtual MTAPIRES ExpertPositionID(const UINT64 id)=0;
  154. //--- comment
  155. virtual LPCWSTR Comment(void) const=0;
  156. virtual MTAPIRES Comment(LPCWSTR comment)=0;
  157. //--- order activation state, time and price
  158. virtual UINT ActivationMode(void) const=0;
  159. virtual INT64 ActivationTime(void) const=0;
  160. virtual double ActivationPrice(void) const=0;
  161. virtual UINT ActivationFlags(void) const=0;
  162. //--- position internal data for API usage
  163. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const INT64 value)=0;
  164. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  165. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const double value)=0;
  166. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,INT64& value) const=0;
  167. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,UINT64& value) const=0;
  168. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,double& value) const=0;
  169. virtual MTAPIRES ApiDataClear(const USHORT app_id)=0;
  170. virtual MTAPIRES ApiDataClearAll(void)=0;
  171. //--- position create time in msc since 1970.01.01
  172. virtual INT64 TimeCreateMsc(void) const=0;
  173. virtual MTAPIRES TimeCreateMsc(const INT64 time)=0;
  174. //--- position last update time in msc since 1970.01.01
  175. virtual INT64 TimeUpdateMsc(void) const=0;
  176. virtual MTAPIRES TimeUpdateMsc(const INT64 time)=0;
  177. //--- order activation state, time and price
  178. virtual MTAPIRES ActivationMode(const UINT mode)=0;
  179. virtual MTAPIRES ActivationTime(const INT64 atm)=0;
  180. virtual MTAPIRES ActivationPrice(const double price)=0;
  181. virtual MTAPIRES ActivationFlags(const UINT flags)=0;
  182. //--- processed dealer login (0-means auto) (first position deal dealer)
  183. virtual UINT64 Dealer(void) const=0;
  184. virtual MTAPIRES Dealer(const UINT64 dealer)=0;
  185. //--- user record internal data for API usage
  186. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const INT64 value)=0;
  187. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  188. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const double value)=0;
  189. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,INT64& value) const=0;
  190. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,UINT64& value) const=0;
  191. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,double& value) const=0;
  192. //--- owner client login
  193. virtual MTAPIRES LoginSet(const UINT64 login)=0;
  194. //--- position ticket
  195. virtual UINT64 Position(void) const=0;
  196. //--- position ticket in external system (exchange, ECN, etc)
  197. virtual LPCWSTR ExternalID(void) const=0;
  198. virtual MTAPIRES ExternalID(LPCWSTR id)=0;
  199. //--- modification flags
  200. virtual UINT ModificationFlags(void) const=0;
  201. //--- position reason - EnPositionReason
  202. virtual UINT Reason(void) const=0;
  203. //--- position volume
  204. virtual UINT64 VolumeExt(void) const=0;
  205. virtual MTAPIRES VolumeExt(const UINT64 volume)=0;
  206. //--- EnPositionReason
  207. virtual MTAPIRES ReasonSet(const UINT reason)=0;
  208. };
  209. //+------------------------------------------------------------------+
  210. //| Position array interface |
  211. //+------------------------------------------------------------------+
  212. class IMTPositionArray
  213. {
  214. public:
  215. //--- common methods
  216. virtual void Release(void)=0;
  217. virtual MTAPIRES Assign(const IMTPositionArray* array)=0;
  218. virtual MTAPIRES Clear(void)=0;
  219. //--- add
  220. virtual MTAPIRES Add(IMTPosition* position)=0;
  221. virtual MTAPIRES AddCopy(const IMTPosition* position)=0;
  222. virtual MTAPIRES Add(IMTPositionArray* array)=0;
  223. virtual MTAPIRES AddCopy(const IMTPositionArray* array)=0;
  224. //--- delete & detach
  225. virtual MTAPIRES Delete(const UINT pos)=0;
  226. virtual IMTPosition* Detach(const UINT pos)=0;
  227. //--- update
  228. virtual MTAPIRES Update(const UINT pos,IMTPosition* position)=0;
  229. virtual MTAPIRES UpdateCopy(const UINT pos,const IMTPosition* position)=0;
  230. virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
  231. //--- data access
  232. virtual UINT Total(void) const=0;
  233. virtual IMTPosition* Next(const UINT index) const=0;
  234. //--- sorting and search
  235. virtual MTAPIRES Sort(MTSortFunctionPtr sort_function)=0;
  236. virtual int Search(const void *key,MTSortFunctionPtr sort_function) const=0;
  237. virtual int SearchGreatOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  238. virtual int SearchGreater(const void *key,MTSortFunctionPtr sort_function) const=0;
  239. virtual int SearchLessOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  240. virtual int SearchLess(const void *key,MTSortFunctionPtr sort_function) const=0;
  241. virtual int SearchLeft(const void *key,MTSortFunctionPtr sort_function) const=0;
  242. virtual int SearchRight(const void *key,MTSortFunctionPtr sort_function) const=0;
  243. };
  244. //+------------------------------------------------------------------+
  245. //| Position events notification interface |
  246. //+------------------------------------------------------------------+
  247. class IMTPositionSink
  248. {
  249. public:
  250. virtual void OnPositionAdd(const IMTPosition* /*position*/) { }
  251. virtual void OnPositionUpdate(const IMTPosition* /*position*/) { }
  252. virtual void OnPositionDelete(const IMTPosition* /*position*/) { }
  253. virtual void OnPositionClean(const UINT64 /*login*/) { }
  254. virtual void OnPositionSync(void) { }
  255. };
  256. //+------------------------------------------------------------------+