MT5APIConfigRoute.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  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 routing condition |
  9. //+------------------------------------------------------------------+
  10. class IMTConCondition
  11. {
  12. public:
  13. //--- condition types
  14. enum EnRouteCondition
  15. {
  16. //--- trade request parameters
  17. CONDITION_DATETIME =0, // datetime
  18. CONDITION_SYMBOL =1, // symbol
  19. CONDITION_VOLUME =2, // volume
  20. CONDITION_MARKET_DEVIATION =3, // deviation from market
  21. CONDITION_TIME =4, // time (in minutes from 00:00)
  22. CONDITION_WEEKDAY =5, // day of week 0 - sunday
  23. CONDITION_COMMENT =6, // find substring in request comment
  24. CONDITION_EXPERT =7, // request placed by expert
  25. CONDITION_SIGNAL =8, // request placed by signal
  26. CONDITION_DEALER_LOGIN =9, // dealer processed specified order or position
  27. CONDITION_SOURCE_LOGIN =10, // dealer processed specified order or position
  28. CONDITION_MARKET_DEVIATION_SPR=11, // deviation from market in spreads
  29. CONDITION_GAP =12, // symbol in gap mode
  30. //--- client data
  31. CONDITION_LOGIN =1000, // login
  32. CONDITION_GROUP =1001, // group
  33. CONDITION_COUNTRY =1002, // country
  34. CONDITION_CITY =1003, // city
  35. CONDITION_COLOR =1004, // color
  36. CONDITION_LEVERAGE =1005, // leverage
  37. CONDITION_COMMENT_CLIENT =1006, // client record comment
  38. //--- client trade account
  39. CONDITION_MARGIN =2000, // margin
  40. CONDITION_MARGIN_LEVEL =2001, // margin level
  41. CONDITION_MARGIN_FREE =2002, // free margin
  42. CONDITION_EQUITY =2003, // equity
  43. CONDITION_BALANCE =2004, // balance
  44. CONDITION_PROFIT =2005, // profit
  45. //--- trading statistic
  46. CONDITION_DAILY_DEALS =3000, // deals count
  47. CONDITION_DAILY_DEALS_PERIOD =3001, // average period between deals
  48. CONDITION_DAILY_PROFIT =3002, // fixed profit
  49. //--- position and orders parameters
  50. CONDITION_POSITION_VOLUME =4000, // position volume
  51. CONDITION_POSITION_PROFIT =4001, // position profit
  52. CONDITION_POSITION_AGE =4002, // position age
  53. CONDITION_POSITION_MODIFY_TIME=4003, // modify last time
  54. CONDITION_POSITION_AVERAGE_TIME=4004, // position average time
  55. CONDITION_POSITION_TOTAL =4005, // total client positions
  56. CONDITION_POSITION_TOTAL_SYMBOL=4006, // client positions by request symbol
  57. CONDITION_ORDER_TOTAL =4007, // total client orders
  58. CONDITION_ORDER_TOTAL_SYMBOL =4008, // client orders by request symbol
  59. CONDITION_POSITION_SL_TOUCHED =4009, // position SL touched
  60. CONDITION_POSITION_TP_TOUCHED =4010, // position TP touched
  61. CONDITION_ORDER_SL_TOUCHED =4011, // order SL touched
  62. CONDITION_ORDER_TP_TOUCHED =4012, // order TP touched
  63. CONDITION_ORDER_ENTRY_IN =4013, // order entry in
  64. CONDITION_ORDER_ENTRY_OUT =4014, // order entry out
  65. //--- market conditions
  66. CONDITION_MARKET_MAX_CHANGE1 =5000, // reserved
  67. CONDITION_MARKET_MAX_CHANGE2 =5001, // reserved
  68. CONDITION_MARKET_MAX_CHANGE3 =5002, // reserved
  69. CONDITION_MARKET_MAX_CHANGE4 =5003, // reserved
  70. CONDITION_MARKET_MAX_CHANGE5 =5004, // reserved
  71. CONDITION_MARKET_MAX_CHANGE6 =5005, // reserved
  72. CONDITION_MARKET_MAX_CHANGE7 =5006, // reserved
  73. CONDITION_MARKET_MAX_CHANGE8 =5007, // reserved
  74. CONDITION_MARKET_MAX_CHANGE9 =5008, // reserved
  75. CONDITION_MARKET_MAX_CHANGE10 =5009, // reserved
  76. //--- enumeration borders
  77. CONDITION_FIRST =CONDITION_DATETIME,
  78. CONDITION_LAST =CONDITION_ORDER_ENTRY_OUT
  79. };
  80. //--- compare method
  81. enum EnConditionRule
  82. {
  83. RULE_EQ =0, // equal (==)
  84. RULE_NOT_EQ =1, // not equal (!=)
  85. RULE_GREATER =2, // greater (> )
  86. RULE_NOT_LESS =3, // not less (>=)
  87. RULE_LESS =4, // less (< )
  88. RULE_NOT_GREATER =5, // not greater(<=)
  89. //--- enumeration borders
  90. RULE_FIRST =RULE_EQ,
  91. RULE_LAST =RULE_NOT_GREATER
  92. };
  93. //--- condition value type
  94. enum EnConditionType
  95. {
  96. TYPE_NONE =0, // none
  97. TYPE_STRING =1, // string
  98. TYPE_INT =2, // integer
  99. TYPE_UINT =3, // unsigned integer
  100. TYPE_DOUBLE =4, // double
  101. TYPE_COLOR =5, // color
  102. TYPE_MONEY =6, // money
  103. TYPE_VOLUME =7, // volume
  104. TYPE_DATETIME =8, // datetime
  105. TYPE_LEVERAGE =9, // leverage
  106. TYPE_BOOL =10, // boolean
  107. TYPE_TIME =11, // time
  108. TYPE_WEEKDAY =12, // weekday
  109. //--- enumeration borders
  110. TYPE_FIRST =TYPE_NONE,
  111. TYPE_LAST =TYPE_WEEKDAY
  112. };
  113. //--- common methods
  114. virtual void Release(void)=0;
  115. virtual MTAPIRES Assign(const IMTConCondition* config)=0;
  116. virtual MTAPIRES Clear(void)=0;
  117. //--- condition
  118. virtual UINT Condition(void) const=0;
  119. virtual MTAPIRES Condition(const UINT condition)=0;
  120. //--- rule
  121. virtual UINT Rule(void) const=0;
  122. virtual MTAPIRES Rule(const UINT rule)=0;
  123. //--- type
  124. virtual UINT ValueType(void) const=0;
  125. //--- value int
  126. virtual INT64 ValueInt(void) const=0;
  127. virtual MTAPIRES ValueInt(const INT64 value)=0;
  128. //--- value uint
  129. virtual UINT64 ValueUInt(void) const=0;
  130. virtual MTAPIRES ValueUInt(const UINT64 value)=0;
  131. //--- value double
  132. virtual double ValueDouble(void) const=0;
  133. virtual MTAPIRES ValueDouble(const double value)=0;
  134. //--- value string
  135. virtual LPCWSTR ValueString(void) const=0;
  136. virtual MTAPIRES ValueString(LPCWSTR value)=0;
  137. //--- value color
  138. virtual COLORREF ValueColor(void) const=0;
  139. virtual MTAPIRES ValueColor(const COLORREF value)=0;
  140. //--- value money
  141. virtual double ValueMoney(void) const=0;
  142. virtual MTAPIRES ValueMoney(const double value)=0;
  143. //--- value volume
  144. virtual UINT64 ValueVolume(void) const=0;
  145. virtual MTAPIRES ValueVolume(const UINT64 value)=0;
  146. //--- value datetime
  147. virtual INT64 ValueDatetime(void) const=0;
  148. virtual MTAPIRES ValueDatetime(const INT64 value)=0;
  149. //--- value leverage
  150. virtual INT64 ValueLeverage(void) const=0;
  151. virtual MTAPIRES ValueLeverage(const INT64 value)=0;
  152. //--- value bool
  153. virtual bool ValueBool(void) const=0;
  154. virtual MTAPIRES ValueBool(const bool value)=0;
  155. //--- value time
  156. virtual UINT ValueTime(void) const=0;
  157. virtual MTAPIRES ValueTime(const UINT value)=0;
  158. //--- value weekday
  159. virtual UINT ValueWeekDay(void) const=0;
  160. virtual MTAPIRES ValueWeekDay(const UINT value)=0;
  161. //--- value volume with extended accuracy
  162. virtual UINT64 ValueVolumeExt(void) const=0;
  163. virtual MTAPIRES ValueVolumeExt(const UINT64 value)=0;
  164. };
  165. //+------------------------------------------------------------------+
  166. //| Trade request routing dealer |
  167. //+------------------------------------------------------------------+
  168. class IMTConRouteDealer
  169. {
  170. public:
  171. //--- common methods
  172. virtual void Release(void)=0;
  173. virtual MTAPIRES Assign(const IMTConRouteDealer* config)=0;
  174. virtual MTAPIRES Clear(void)=0;
  175. //--- login
  176. virtual UINT64 Login(void) const=0;
  177. virtual MTAPIRES Login(const UINT64 login)=0;
  178. //--- name
  179. virtual LPCWSTR Name(void) const=0;
  180. };
  181. //+------------------------------------------------------------------+
  182. //| Trade request routing rule |
  183. //+------------------------------------------------------------------+
  184. class IMTConRoute
  185. {
  186. public:
  187. //--- modes
  188. enum EnRouteMode
  189. {
  190. MODE_DISABLED =0,
  191. MODE_ENABLED =1,
  192. //--- enumeration borders
  193. MODE_FIRST =MODE_DISABLED,
  194. MODE_LAST =MODE_ENABLED
  195. };
  196. //--- trade request flags
  197. enum EnRouteFlags
  198. {
  199. REQUEST_NONE =0x00000000, // empty
  200. //--- client requests
  201. REQUEST_PRICE =0x00000001, // price request
  202. REQUEST_REQUEST =0x00000002, // market order on request execution
  203. REQUEST_INSTANT =0x00000004, // market order on instant execution
  204. REQUEST_MARKET =0x00000008, // market order on market execution
  205. REQUEST_EXCHANGE =0x00000010, // market order on exchange execution
  206. REQUEST_PENDING =0x00000020, // pending order place
  207. REQUEST_SLTP =0x00000040, // SL/TP modification
  208. REQUEST_MODIFY =0x00000080, // pending order modification
  209. REQUEST_REMOVE =0x00000100, // pending order modification
  210. //--- activations
  211. REQUEST_ACTIVATE =0x00000200, // pending order activation
  212. REQUEST_STOPLIMIT =0x00000400, // Stop-Limit order activation
  213. REQUEST_SL =0x00000800, // SL activation
  214. REQUEST_TP =0x00001000, // TP activation
  215. REQUEST_STOPOUT_ORDER =0x00002000, // order Stop-Out
  216. REQUEST_STOPOUT_POSITION =0x00004000, // position Stop-Out
  217. REQUEST_EXPIRATION =0x00008000, // order expiration
  218. //--- dealer request
  219. REQUEST_DEALER_POS_EXECUTE =0x00010000, // position placing by dealer
  220. REQUEST_DEALER_ORD_PENDING =0x00020000, // order placing by dealer
  221. REQUEST_DEALER_POS_MODIFY =0x00040000, // position modification by dealer
  222. REQUEST_DEALER_ORD_MODIFY =0x00080000, // order modification by dealer
  223. REQUEST_DEALER_ORD_REMOVE =0x00100000, // order remove by dealer
  224. REQUEST_DEALER_ORD_ACTIVATE =0x00200000, // order actvation by dealer
  225. REQUEST_DEALER_ORD_SLIMIT =0x00400000, // Stop-Limit order actvation by dealer
  226. REQUEST_DEALER_CLOSE_BY =0x00800000, // close by hedged position by dealer
  227. //--- client requests
  228. REQUEST_CLOSE_BY =0x01000000, // close by hedged position
  229. //--- all
  230. REQUEST_ALL =REQUEST_PRICE | REQUEST_REQUEST | REQUEST_INSTANT | REQUEST_MARKET |
  231. REQUEST_EXCHANGE | REQUEST_PENDING | REQUEST_SLTP | REQUEST_MODIFY | REQUEST_REMOVE |
  232. REQUEST_ACTIVATE | REQUEST_STOPLIMIT | REQUEST_SL | REQUEST_TP | REQUEST_STOPOUT_ORDER |
  233. REQUEST_STOPOUT_POSITION | REQUEST_EXPIRATION| REQUEST_DEALER_POS_EXECUTE | REQUEST_DEALER_ORD_PENDING |
  234. REQUEST_DEALER_POS_MODIFY|REQUEST_DEALER_ORD_MODIFY | REQUEST_DEALER_ORD_REMOVE | REQUEST_DEALER_ORD_ACTIVATE | REQUEST_DEALER_ORD_SLIMIT | REQUEST_DEALER_CLOSE_BY |
  235. REQUEST_CLOSE_BY,
  236. //--- enumeration borders
  237. REQUEST_FIRST =REQUEST_NONE,
  238. REQUEST_LAST =REQUEST_ALL
  239. };
  240. //--- order-position types
  241. enum EnTypeFlags
  242. {
  243. TYPE_NONE =0x0000, // none
  244. TYPE_BUY =0x0001, // BUY
  245. TYPE_SELL =0x0002, // SELL
  246. TYPE_BUY_LIMIT =0x0004, // BUY LIMIT
  247. TYPE_SELL_LIMIT =0x0008, // SELL LIMIT
  248. TYPE_BUY_STOP =0x0010, // BUY STOP
  249. TYPE_SELL_STOP =0x0020, // SELL STOP
  250. TYPE_BUY_STOP_LIMIT =0x0040, // BUY STOP LIMIT
  251. TYPE_SELL_STOP_LIMIT =0x0080, // SELL STOP LIMIT
  252. //--- all
  253. TYPE_ALL =TYPE_BUY|TYPE_SELL|TYPE_BUY_LIMIT|TYPE_SELL_LIMIT|
  254. TYPE_BUY_STOP|TYPE_SELL_STOP|TYPE_BUY_STOP_LIMIT|TYPE_SELL_STOP_LIMIT,
  255. //--- enumeration borders
  256. TYPE_FIRST =TYPE_NONE,
  257. TYPE_LAST =TYPE_ALL
  258. };
  259. //--- actions
  260. enum EnRouteAction
  261. {
  262. //--- intermediate actions
  263. ACTION_DELAY_TIME =0, // N seconds timeout
  264. ACTION_DELAY_TICK =1, // N ticks timeout
  265. ACTION_CLEAR_TP =2, // clear TP
  266. ACTION_CLEAR_SL =3, // clear SL
  267. ACTION_CLEAR_SLTP =4, // clear SL & TP
  268. //--- final actions
  269. ACTION_DEALER =1001, // route request to dealers\gateways
  270. ACTION_DEALER_ONLINE =1002, // route request to online dealers\gateways
  271. ACTION_REJECT =1003, // reject request
  272. ACTION_REQUOTE =1004, // requote request using current market
  273. ACTION_CONFIRM_CLIENT =1005, // confirm using client price
  274. ACTION_CONFIRM_MARKET =1006, // confirm using market price
  275. ACTION_CANCEL_ORDER =1007, // reject request and cancel order
  276. //--- enumeration borders
  277. ACTION_FIRST =ACTION_DELAY_TIME,
  278. ACTION_LAST =ACTION_CANCEL_ORDER
  279. };
  280. //--- common methods
  281. virtual void Release(void)=0;
  282. virtual MTAPIRES Assign(const IMTConRoute* config)=0;
  283. virtual MTAPIRES Clear(void)=0;
  284. //--- name
  285. virtual LPCWSTR Name(void) const=0;
  286. virtual MTAPIRES Name(LPCWSTR name)=0;
  287. //--- request EnRouteMode
  288. virtual UINT Mode(void) const=0;
  289. virtual MTAPIRES Mode(const UINT mode)=0;
  290. //--- request EnRouteFlags
  291. virtual UINT Request(void) const=0;
  292. virtual MTAPIRES Request(const UINT request)=0;
  293. //--- order-posiion type EnRouteType
  294. virtual UINT Type(void) const=0;
  295. virtual MTAPIRES Type(const UINT type)=0;
  296. //--- action for request EnRouteAction
  297. virtual UINT Action(void) const=0;
  298. virtual MTAPIRES Action(const UINT action)=0;
  299. //--- action value type IMTConRouteCondition::EnConditionType
  300. virtual UINT ParamType(void) const=0;
  301. //--- value int
  302. virtual INT64 ParamInt(void) const=0;
  303. virtual MTAPIRES ParamInt(const INT64 value)=0;
  304. //--- value uind
  305. virtual UINT64 ParamUInt(void) const=0;
  306. virtual MTAPIRES ParamUInt(const UINT64 value)=0;
  307. //--- value double
  308. virtual double ParamDouble(void) const=0;
  309. virtual MTAPIRES ParamDouble(const double value)=0;
  310. //--- value string
  311. virtual LPCWSTR ParamString(void) const=0;
  312. virtual MTAPIRES ParamString(LPCWSTR value)=0;
  313. //--- value color
  314. virtual COLORREF ParamColor(void) const=0;
  315. virtual MTAPIRES ParamColor(const COLORREF value)=0;
  316. //--- value money
  317. virtual double ParamMoney(void) const=0;
  318. virtual MTAPIRES ParamMoney(const double value)=0;
  319. //--- value volume
  320. virtual UINT64 ParamVolume(void) const=0;
  321. virtual MTAPIRES ParamVolume(const UINT64 value)=0;
  322. //--- value datetime
  323. virtual INT64 ParamDatetime(void) const=0;
  324. virtual MTAPIRES ParamDatetime(const INT64 value)=0;
  325. //--- value leverage
  326. virtual INT64 ParamLeverage(void) const=0;
  327. virtual MTAPIRES ParamLeverage(const INT64 value)=0;
  328. //--- value bool
  329. virtual bool ParamBool(void) const=0;
  330. virtual MTAPIRES ParamBool(const bool value)=0;
  331. //--- value time
  332. virtual UINT ParamTime(void) const=0;
  333. virtual MTAPIRES ParamTime(const UINT value)=0;
  334. //--- conditions
  335. virtual MTAPIRES ConditionAdd(IMTConCondition* condition)=0;
  336. virtual MTAPIRES ConditionUpdate(const UINT pos,const IMTConCondition* condition)=0;
  337. virtual MTAPIRES ConditionDelete(const UINT pos)=0;
  338. virtual MTAPIRES ConditionClear(void)=0;
  339. virtual MTAPIRES ConditionShift(const UINT pos,const int shift)=0;
  340. virtual UINT ConditionTotal(void) const=0;
  341. virtual MTAPIRES ConditionNext(const UINT pos,IMTConCondition* condition) const=0;
  342. //--- dealers
  343. virtual MTAPIRES DealerAdd(IMTConRouteDealer* dealer)=0;
  344. virtual MTAPIRES DealerUpdate(const UINT pos,const IMTConRouteDealer* dealer)=0;
  345. virtual MTAPIRES DealerDelete(const UINT pos)=0;
  346. virtual MTAPIRES DealerClear(void)=0;
  347. virtual MTAPIRES DealerShift(const UINT pos,const int shift)=0;
  348. virtual UINT DealerTotal(void) const=0;
  349. virtual MTAPIRES DealerNext(const UINT pos,IMTConRouteDealer* dealer) const=0;
  350. virtual MTAPIRES DealerGet(const UINT64 login,IMTConRouteDealer* dealer) const=0;
  351. //--- value volume with extended accuracy
  352. virtual UINT64 ParamVolumeExt(void) const=0;
  353. virtual MTAPIRES ParamVolumeExt(const UINT64 value)=0;
  354. };
  355. //+------------------------------------------------------------------+
  356. //| Config events notification interface |
  357. //+------------------------------------------------------------------+
  358. class IMTConRouteSink
  359. {
  360. public:
  361. virtual void OnRouteAdd(const IMTConRoute* /*config*/) { }
  362. virtual void OnRouteUpdate(const IMTConRoute* /*config*/) { }
  363. virtual void OnRouteDelete(const IMTConRoute* /*config*/) { }
  364. virtual void OnRouteSync(void) { }
  365. };
  366. //+------------------------------------------------------------------+