Discussion of article "Library for easy and quick development of MetaTrader programs (part XXXI): Pending trading requests - opening positions under certain conditions"

 

New article Library for easy and quick development of MetaTrader programs (part XXXI): Pending trading requests - opening positions under certain conditions has been published:

Starting with this article, we are going to develop a functionality allowing users to trade using pending requests under certain conditions, for example, when reaching a certain time limit, exceeding a specified profit or closing a position by stop loss.

This library functionality allows users to programmatically create conditions, under which a trading order is sent to the server.
For example:

  1. Open Buy upon the occurrence or exceeding a certain time provided that the price has dropped below a specified value (two conditions related to symbol property values).
  2. Close a position partially if a specified profit is exceeded (one condition related to an account property value).
  3. If a position is closed by stop loss, open an opposite position (one condition related to an account event property).

The examples are simple but there may be plenty of conditions and their combinations. At this stage, we are going to develop control over changes in properties of accounts, symbols and events occurring on the current account. The conditions from these three lists can be set in any combination.
We will start from a simple thing — controlling changes of symbol and account property values. This will be followed by controlling account events and reacting to them.

To let a pending request object work as part of a trading logic (sending trading orders under conditions), we need to implement additional data into this object to store pending request activation conditions and methods of their control and handling. The data storage is to be made in the form of a two-dimensional array. The first dimension is to store a condition number (there may be as many conditions as necessary), while the second one is to contain all data of the condition whose number is specified in the first dimension — condition source type (symbol, account or event), condition itself (create enumerations for each of the sources), comparison method (>,<,==,!=,>=,<=), reference value of a tracked property and its current value.

Author: Artyom Trishkin

Reason: