MT5APIRequest.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. //+------------------------------------------------------------------+
  2. //| MetaTrader 5 API |
  3. //| Copyright 2000-2019, MetaQuotes Software Corp. |
  4. //| http://www.metaquotes.net |
  5. //+------------------------------------------------------------------+
  6. #pragma once
  7. //+------------------------------------------------------------------+
  8. //| Trade request interface |
  9. //+------------------------------------------------------------------+
  10. class IMTRequest
  11. {
  12. public:
  13. //--- trade action types
  14. enum EnTradeActions
  15. {
  16. //--- clients actions
  17. TA_CLIENT_FIRST =0,
  18. TA_PRICE =0,
  19. TA_REQUEST =1,
  20. TA_INSTANT =2,
  21. TA_MARKET =3,
  22. TA_EXCHANGE =4,
  23. TA_PENDING =5,
  24. TA_SLTP =6,
  25. TA_MODIFY =7,
  26. TA_REMOVE =8,
  27. TA_TRANSFER =9,
  28. TA_CLOSE_BY =10,
  29. TA_CLIENT_LAST =TA_CLOSE_BY,
  30. //--- server actions
  31. TA_SERVER_FIRST =100,
  32. TA_ACTIVATE =100,
  33. TA_ACTIVATE_SL =101,
  34. TA_ACTIVATE_TP =102,
  35. TA_ACTIVATE_STOPLIMIT =103,
  36. TA_STOPOUT_ORDER =104,
  37. TA_STOPOUT_POSITION =105,
  38. TA_EXPIRATION =106,
  39. TA_SERVER_LAST =TA_EXPIRATION,
  40. //--- dealer actions
  41. TA_DEALER_FIRST =200,
  42. TA_DEALER_POS_EXECUTE =200,
  43. TA_DEALER_ORD_PENDING =201,
  44. TA_DEALER_POS_MODIFY =202,
  45. TA_DEALER_ORD_MODIFY =203,
  46. TA_DEALER_ORD_REMOVE =204,
  47. TA_DEALER_ORD_ACTIVATE=205,
  48. TA_DEALER_BALANCE =206,
  49. TA_DEALER_ORD_SLIMIT =207,
  50. TA_DEALER_CLOSE_BY =208,
  51. TA_DEALER_LAST =TA_DEALER_CLOSE_BY,
  52. //--- enumeration borders
  53. TA_FIRST =TA_PRICE,
  54. TA_LAST =TA_DEALER_CLOSE_BY,
  55. TA_END =255
  56. };
  57. //--- trade action flags
  58. enum EnTradeActionFlags
  59. {
  60. TA_FLAG_CLOSE =0x00000001, // position close request
  61. TA_FLAG_MARKET =0x00000002, // market prices request
  62. TA_FLAG_CHANGED_PRICE =0x00000004, // order price or position open price will be changed
  63. TA_FLAG_CHANGED_TRIGGER =0x00000008, // order trigger price will be changed
  64. TA_FLAG_CHANGED_SL =0x00000010, // order or position SL will be changed
  65. TA_FLAG_CHANGED_TP =0x00000020, // order or position TP will be changed
  66. TA_FLAG_CHANGED_EXP_TYPE =0x00000040, // order expiration type will be changed
  67. TA_FLAG_CHANGED_EXP_TIME =0x00000080, // order expiration datetime will be changed
  68. TA_FLAG_EXPERT =0x00000100, // request from expert
  69. TA_FLAG_SIGNAL =0x00000200, // request from signal
  70. TA_FLAG_SKIP_MARGIN_CHECK=0x00000400, // skip margin check (only for dealers)
  71. //--- enumeration borders
  72. TA_FLAG_NONE =0x00000000,
  73. TA_FLAG_ALL =TA_FLAG_CLOSE | TA_FLAG_MARKET | TA_FLAG_CHANGED_PRICE | TA_FLAG_CHANGED_TRIGGER |
  74. TA_FLAG_CHANGED_SL | TA_FLAG_CHANGED_TP | TA_FLAG_CHANGED_EXP_TYPE | TA_FLAG_CHANGED_EXP_TIME | TA_FLAG_EXPERT | TA_FLAG_SIGNAL |
  75. TA_FLAG_SKIP_MARGIN_CHECK
  76. };
  77. //--- common methods
  78. virtual void Release(void)=0;
  79. virtual MTAPIRES Assign(const IMTRequest* request)=0;
  80. virtual MTAPIRES Clear(void)=0;
  81. virtual LPCWSTR Print(MTAPISTR& string) const=0;
  82. //--- request id
  83. virtual UINT ID(void) const=0;
  84. //--- client login
  85. virtual UINT64 Login(void) const=0;
  86. virtual MTAPIRES Login(const UINT64 login)=0;
  87. //--- client group
  88. virtual LPCWSTR Group(void) const=0;
  89. //--- symbol
  90. virtual LPCWSTR Symbol(void) const=0;
  91. virtual MTAPIRES Symbol(LPCWSTR symbol)=0;
  92. //--- price digits
  93. virtual UINT Digits(void) const=0;
  94. //--- EnTradeActions
  95. virtual UINT Action(void) const=0;
  96. virtual MTAPIRES Action(const UINT action)=0;
  97. //--- order expiration
  98. virtual INT64 TimeExpiration(void) const=0;
  99. virtual MTAPIRES TimeExpiration(const INT64 time)=0;
  100. //--- order type IMTOrder::EnOrderType
  101. virtual UINT Type(void) const=0;
  102. virtual MTAPIRES Type(const UINT type)=0;
  103. //--- IMTOrder::EnOrderFilling
  104. virtual UINT TypeFill(void) const=0;
  105. virtual MTAPIRES TypeFill(const UINT type)=0;
  106. //--- IMTOrder::EnOrderTime
  107. virtual UINT TypeTime(void) const=0;
  108. virtual MTAPIRES TypeTime(const UINT type)=0;
  109. //--- additional flags EnTradeActionFlags
  110. virtual UINT64 Flags(void) const=0;
  111. virtual MTAPIRES Flags(const UINT64 flags)=0;
  112. //--- volume
  113. virtual UINT64 Volume(void) const=0;
  114. virtual MTAPIRES Volume(const UINT64 volume)=0;
  115. //--- order ticket
  116. virtual UINT64 Order(void) const=0;
  117. virtual MTAPIRES Order(const UINT64 order)=0;
  118. //--- order ticket in external system (exchange, ECN, etc)
  119. virtual LPCWSTR OrderExternalID(void) const=0;
  120. virtual MTAPIRES OrderExternalID(LPCWSTR id)=0;
  121. //--- order price
  122. virtual double PriceOrder(void) const=0;
  123. virtual MTAPIRES PriceOrder(const double price)=0;
  124. //--- order trigger price
  125. virtual double PriceTrigger(void) const=0;
  126. virtual MTAPIRES PriceTrigger(const double price)=0;
  127. //--- order SL price
  128. virtual double PriceSL(void) const=0;
  129. virtual MTAPIRES PriceSL(const double price)=0;
  130. //--- order TP price
  131. virtual double PriceTP(void) const=0;
  132. virtual MTAPIRES PriceTP(const double price)=0;
  133. //--- price deviation details
  134. virtual UINT64 PriceDeviation(void) const=0;
  135. virtual MTAPIRES PriceDeviation(const UINT64 deviation)=0;
  136. virtual double PriceDeviationTop(void) const=0;
  137. virtual double PriceDeviationBottom(void) const=0;
  138. //--- comment
  139. virtual LPCWSTR Comment(void) const=0;
  140. virtual MTAPIRES Comment(LPCWSTR comment)=0;
  141. //---
  142. //--- request result information
  143. //---
  144. //--- request state retcode
  145. virtual MTAPIRES ResultRetcode(void) const=0;
  146. //--- request dealer
  147. virtual UINT64 ResultDealer(void) const=0;
  148. //--- request result deal
  149. virtual UINT64 ResultDeal(void) const=0;
  150. //--- request result order
  151. virtual UINT64 ResultOrder(void) const=0;
  152. //--- request result confirmed volume
  153. virtual UINT64 ResultVolume(void) const=0;
  154. //--- request result confirmed price
  155. virtual double ResultPrice(void) const=0;
  156. //--- request result dealer prices
  157. virtual double ResultDealerBid(void) const=0;
  158. virtual double ResultDealerAsk(void) const=0;
  159. virtual double ResultDealerLast(void) const=0;
  160. //--- request result market prices
  161. virtual double ResultMarketBid(void) const=0;
  162. virtual double ResultMarketAsk(void) const=0;
  163. virtual double ResultMarketLast(void) const=0;
  164. //--- request result comment
  165. virtual LPCWSTR ResultComment(void) const=0;
  166. //--- external system trade account (exchange, ECN, etc)
  167. virtual LPCWSTR ExternalAccount(void) const=0;
  168. virtual MTAPIRES ExternalAccount(LPCWSTR account)=0;
  169. //--- client side request id
  170. virtual UINT IDClient(void) const=0;
  171. //--- source request ip
  172. virtual LPCWSTR IP(void) const=0;
  173. virtual MTAPIRES IP(LPCWSTR ip)=0;
  174. //--- source dealer login (for dealer transaction)
  175. virtual UINT64 SourceLogin(void) const=0;
  176. virtual MTAPIRES SourceLogin(const UINT64 login)=0;
  177. //--- position ticket
  178. virtual UINT64 Position(void) const=0;
  179. virtual MTAPIRES Position(const UINT64 position)=0;
  180. //--- position ticket for close-by
  181. virtual UINT64 PositionBy(void) const=0;
  182. virtual MTAPIRES PositionBy(const UINT64 position)=0;
  183. //--- position ticket in external system (exchange, ECN, etc)
  184. virtual LPCWSTR PositionExternalID(void) const=0;
  185. virtual MTAPIRES PositionExternalID(LPCWSTR id)=0;
  186. //--- position ticket in external system (exchange, ECN, etc)
  187. virtual LPCWSTR PositionByExternalID(void) const=0;
  188. virtual MTAPIRES PositionByExternalID(LPCWSTR id)=0;
  189. //--- volume with extended accuracy
  190. virtual UINT64 VolumeExt(void) const=0;
  191. virtual MTAPIRES VolumeExt(const UINT64 volume)=0;
  192. //--- request result confirmed volume with extended accuracy
  193. virtual UINT64 ResultVolumeExt(void) const=0;
  194. //--- price digits
  195. virtual MTAPIRES DigitsSet(const UINT digits)=0;
  196. //--- request internal data for API usage
  197. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const INT64 value)=0;
  198. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  199. virtual MTAPIRES ApiDataSet(const USHORT app_id,const UCHAR id,const double value)=0;
  200. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,INT64& value) const=0;
  201. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,UINT64& value) const=0;
  202. virtual MTAPIRES ApiDataGet(const USHORT app_id,const UCHAR id,double& value) const=0;
  203. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const INT64 value)=0;
  204. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const UINT64 value)=0;
  205. virtual MTAPIRES ApiDataUpdate(const UINT pos,const USHORT app_id,const UCHAR id,const double value)=0;
  206. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,INT64& value) const=0;
  207. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,UINT64& value) const=0;
  208. virtual MTAPIRES ApiDataNext(const UINT pos,USHORT& app_id,UCHAR& id,double& value) const=0;
  209. virtual LPVOID ApiDataRaw(void) const=0;
  210. virtual UINT ApiDataRawMax(void) const=0;
  211. virtual MTAPIRES ApiDataClear(const USHORT app_id)=0;
  212. virtual MTAPIRES ApiDataClearAll(void)=0;
  213. };
  214. //+------------------------------------------------------------------+
  215. //| Order array interface |
  216. //+------------------------------------------------------------------+
  217. class IMTRequestArray
  218. {
  219. public:
  220. //--- common methods
  221. virtual void Release(void)=0;
  222. virtual MTAPIRES Assign(const IMTRequestArray* array)=0;
  223. virtual MTAPIRES Clear(void)=0;
  224. //--- add
  225. virtual MTAPIRES Add(IMTRequest* request)=0;
  226. virtual MTAPIRES AddCopy(const IMTRequest* request)=0;
  227. virtual MTAPIRES Add(IMTRequestArray* array)=0;
  228. virtual MTAPIRES AddCopy(const IMTRequestArray* array)=0;
  229. //--- delete & detach
  230. virtual MTAPIRES Delete(const UINT pos)=0;
  231. virtual IMTRequest* Detach(const UINT pos)=0;
  232. //--- update
  233. virtual MTAPIRES Update(const UINT pos,IMTRequest* request)=0;
  234. virtual MTAPIRES UpdateCopy(const UINT pos,const IMTRequest* request)=0;
  235. virtual MTAPIRES Shift(const UINT pos,const int shift)=0;
  236. //--- data access
  237. virtual UINT Total(void) const=0;
  238. virtual IMTRequest* Next(const UINT index) const=0;
  239. //--- sorting and search
  240. virtual MTAPIRES Sort(MTSortFunctionPtr sort_function)=0;
  241. virtual int Search(const void *key,MTSortFunctionPtr sort_function) const=0;
  242. virtual int SearchGreatOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  243. virtual int SearchGreater(const void *key,MTSortFunctionPtr sort_function) const=0;
  244. virtual int SearchLessOrEq(const void *key,MTSortFunctionPtr sort_function) const=0;
  245. virtual int SearchLess(const void *key,MTSortFunctionPtr sort_function) const=0;
  246. virtual int SearchLeft(const void *key,MTSortFunctionPtr sort_function) const=0;
  247. virtual int SearchRight(const void *key,MTSortFunctionPtr sort_function) const=0;
  248. };
  249. //+------------------------------------------------------------------+
  250. //| Request events notification interface |
  251. //+------------------------------------------------------------------+
  252. class IMTRequestSink
  253. {
  254. public:
  255. virtual void OnRequestAdd(const IMTRequest* /*request*/) { }
  256. virtual void OnRequestUpdate(const IMTRequest* /*request*/) { }
  257. virtual void OnRequestDelete(const IMTRequest* /*request*/) { }
  258. virtual void OnRequestSync(void) { }
  259. };
  260. //+------------------------------------------------------------------+