//+------------------------------------------------------------------+
//|                                                      Defines.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://mql5.com/ru/users/artmedia70"
//+------------------------------------------------------------------+
//| Включаемые файлы                                                 |
//+------------------------------------------------------------------+
//#include "DataSND.mqh"
//#include "DataIMG.mqh"
#include "Datas.mqh"
#ifdef __MQL4__
#include "ToMQL4.mqh"
#endif 
//+------------------------------------------------------------------+
//| Макроподстановки                                                 |
//+------------------------------------------------------------------+
//--- "Описание функции с номером строки ошибки"
#define DFUN_ERR_LINE                  (__FUNCTION__+(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian" ? ", Стр. " : ", Line ")+(string)__LINE__+": ")
#define DFUN                           (__FUNCTION__+": ")        // "Описание функции"
#define COUNTRY_LANG                   ("Russian")                // Язык страны
#define END_TIME                       (D'31.12.3000 23:59:59')   // Конечная дата для запросов данных истории счёта
#define TIMER_FREQUENCY                (16)                       // Минимальная частота таймера библиотеки в милисекундах
#define TOTAL_TRY                      (5)                        // Количество торговых попыток по умолчанию
//--- Стандартные звуки
#define SND_ALERT                      "alert.wav"
#define SND_ALERT2                     "alert2.wav"
#define SND_CONNECT                    "connect.wav"
#define SND_DISCONNECT                 "disconnect.wav"
#define SND_EMAIL                      "email.wav"
#define SND_EXPERT                     "expert.wav"
#define SND_NEWS                       "news.wav"
#define SND_OK                         "ok.wav"
#define SND_REQUEST                    "request.wav"
#define SND_STOPS                      "stops.wav"
#define SND_TICK                       "tick.wav"
#define SND_TIMEOUT                    "timeout.wav"
#define SND_WAIT                       "wait.wav"
//--- Параметры таймера коллекции ордеров и сделок
#define COLLECTION_ORD_PAUSE           (250)                      // Пауза таймера коллекции ордеров и сделок в милисекундах
#define COLLECTION_ORD_COUNTER_STEP    (16)                       // Шаг приращения счётчика таймера коллекции ордеров и сделок
#define COLLECTION_ORD_COUNTER_ID      (1)                        // Идентификатор счётчика таймера коллекции ордеров и сделок
//--- Параметры таймера коллекции аккаунтов
#define COLLECTION_ACC_PAUSE           (1000)                     // Пауза таймера коллекции аккаунтов в милисекундах
#define COLLECTION_ACC_COUNTER_STEP    (16)                       // Шаг приращения счётчика таймера аккаунтов
#define COLLECTION_ACC_COUNTER_ID      (2)                        // Идентификатор счётчика таймера аккаунтов
//--- Параметры таймера1 коллекции символов
#define COLLECTION_SYM_PAUSE1          (100)                      // Пауза таймера1 коллекции символов в милисекундах (для сканирования символов в обзоре рынка)
#define COLLECTION_SYM_COUNTER_STEP1   (16)                       // Шаг приращения счётчика таймера1 символов
#define COLLECTION_SYM_COUNTER_ID1     (3)                        // Идентификатор счётчика таймера1 символов
//--- Параметры таймера2 коллекции символов
#define COLLECTION_SYM_PAUSE2          (300)                      // Пауза таймера2 коллекции символов в милисекундах (для событий списка символов в обзоре рынка)
#define COLLECTION_SYM_COUNTER_STEP2   (16)                       // Шаг приращения счётчика таймера2 символов
#define COLLECTION_SYM_COUNTER_ID2     (4)                        // Идентификатор счётчика таймера2 символов
//--- Параметры таймера торгового класса
#define COLLECTION_REQ_PAUSE           (300)                      // Пауза таймера торгового класса в милисекундах
#define COLLECTION_REQ_COUNTER_STEP    (16)                       // Шаг приращения счётчика таймера торгового класса
#define COLLECTION_REQ_COUNTER_ID      (5)                        // Идентификатор счётчика таймера торгового класса
//--- Идентификаторы списков коллекций
#define COLLECTION_HISTORY_ID          (0x7779)                   // Идентификатор списка исторической коллекции
#define COLLECTION_MARKET_ID           (0x777A)                   // Идентификатор списка рыночной коллекции
#define COLLECTION_EVENTS_ID           (0x777B)                   // Идентификатор списка коллекции событий
#define COLLECTION_ACCOUNT_ID          (0x777C)                   // Идентификатор списка коллекции аккаунтов
#define COLLECTION_SYMBOLS_ID          (0x777D)                   // Идентификатор списка коллекции символов
//--- Параметры данных для файловых операций
#define DIRECTORY                      ("DoEasy\\")               // Каталог библиотеки для расположения папок объектов классов
#define RESOURCE_DIR                   ("DoEasy\\Resource\\")     // Каталог библиотеки для расположения папок ресурсов
//--- Параметры символов
#define CLR_DEFAULT                    (0xFF000000)               // Цвет по умолчанию
#define SYMBOLS_COMMON_TOTAL           (1000)                     // Общее количество рабочих символов
//+------------------------------------------------------------------+
//| Структуры                                                        |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Перечисления                                                     |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для поиска и сортировки                                   |
//+------------------------------------------------------------------+
enum ENUM_COMPARER_TYPE
  {
   EQUAL,                                                   // Равно
   MORE,                                                    // Больше
   LESS,                                                    // Меньше
   NO_EQUAL,                                                // Не равно
   EQUAL_OR_MORE,                                           // Больше или равно
   EQUAL_OR_LESS                                            // Меньше или равно
  };
//+------------------------------------------------------------------+
//| Возможные варианты выбора по времени                             |
//+------------------------------------------------------------------+
enum ENUM_SELECT_BY_TIME
  {
   SELECT_BY_TIME_OPEN,                                     // По времени открытия (в милисекундах)
   SELECT_BY_TIME_CLOSE,                                    // По времени закрытия (в милисекундах)
  };
//+------------------------------------------------------------------+
//| Возможные причины событий базового объекта объектов библиотеки   |
//+------------------------------------------------------------------+
enum ENUM_BASE_EVENT_REASON
  {
   BASE_EVENT_REASON_INC,                                   // Увеличение значения свойства объекта
   BASE_EVENT_REASON_DEC,                                   // Уменьшение значения свойства объекта
   BASE_EVENT_REASON_MORE_THEN,                             // Значение свойства объекта стало больше контрольного значения
   BASE_EVENT_REASON_LESS_THEN,                             // Значение свойства объекта стало меньше контрольного значения
   BASE_EVENT_REASON_EQUALS                                 // Значение свойства объекта стало равно контрольному значению
  };
//+------------------------------------------------------------------+
//| Список флагов возможных вариантов изменения ордеров и позиций    |
//+------------------------------------------------------------------+
enum ENUM_CHANGE_TYPE_FLAGS
  {
   CHANGE_TYPE_FLAG_NO_CHANGE    =  0,                      // Нет изменений
   CHANGE_TYPE_FLAG_TYPE         =  1,                      // Изменение типа ордера
   CHANGE_TYPE_FLAG_PRICE        =  2,                      // Изменение цены
   CHANGE_TYPE_FLAG_STOP         =  4,                      // Изменение StopLoss
   CHANGE_TYPE_FLAG_TAKE         =  8,                      // Изменение TakeProfit
   CHANGE_TYPE_FLAG_ORDER        =  16                      // Флаг изменения свойств ордера
  };
//+------------------------------------------------------------------+
//| Возможные варианты изменения ордеров и позиций                   |
//+------------------------------------------------------------------+
enum ENUM_CHANGE_TYPE
  {
   CHANGE_TYPE_NO_CHANGE,                                   // Нет изменений
   CHANGE_TYPE_ORDER_TYPE,                                  // Изменение типа ордера
   CHANGE_TYPE_ORDER_PRICE,                                 // Изменение цены установки ордера
   CHANGE_TYPE_ORDER_PRICE_STOP_LOSS,                       // Изменение цены установки ордера и StopLoss 
   CHANGE_TYPE_ORDER_PRICE_TAKE_PROFIT,                     // Изменение цены установки ордера и TakeProfit
   CHANGE_TYPE_ORDER_PRICE_STOP_LOSS_TAKE_PROFIT,           // Изменение цены установки ордера, StopLoss и TakeProfit
   CHANGE_TYPE_ORDER_STOP_LOSS_TAKE_PROFIT,                 // Изменение StopLoss и TakeProfit
   CHANGE_TYPE_ORDER_STOP_LOSS,                             // Изменение StopLoss ордера
   CHANGE_TYPE_ORDER_TAKE_PROFIT,                           // Изменение TakeProfit ордера
   CHANGE_TYPE_POSITION_STOP_LOSS_TAKE_PROFIT,              // Изменение StopLoss и TakeProfit позиции
   CHANGE_TYPE_POSITION_STOP_LOSS,                          // Изменение StopLoss позиции
   CHANGE_TYPE_POSITION_TAKE_PROFIT,                        // Изменение TakeProfit позиции
  };
//+------------------------------------------------------------------+
//| Данные для работы с ордерами                                     |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Тип (статус) абстрактного ордера                                 |
//+------------------------------------------------------------------+
enum ENUM_ORDER_STATUS
  {
   ORDER_STATUS_MARKET_PENDING,                             // Рыночный отложенный ордер
   ORDER_STATUS_MARKET_ORDER,                               // Рыночный маркет-ордер
   ORDER_STATUS_MARKET_POSITION,                            // Рыночная позиция
   ORDER_STATUS_HISTORY_ORDER,                              // Исторический маркет-ордер
   ORDER_STATUS_HISTORY_PENDING,                            // Удаленный отложенный ордер
   ORDER_STATUS_BALANCE,                                    // Балансовая операция
   ORDER_STATUS_DEAL,                                       // Сделка
   ORDER_STATUS_UNKNOWN                                     // Неизвестный статус
  };
//+------------------------------------------------------------------+
//| Целочисленные свойства ордера, сделки, позиции                   |
//+------------------------------------------------------------------+
enum ENUM_ORDER_PROP_INTEGER
  {
   ORDER_PROP_TICKET = 0,                                   // Тикет ордера
   ORDER_PROP_MAGIC,                                        // Мэджик ордера
   ORDER_PROP_TIME_OPEN,                                    // Время открытия в милисекундах (MQL5 Время сделки)
   ORDER_PROP_TIME_CLOSE,                                   // Время закрытия в милисекундах (MQL5 Время исполнения или снятия - ORDER_TIME_DONE)
   ORDER_PROP_TIME_EXP,                                     // Дата экспирации ордера (для отложенных ордеров)
   ORDER_PROP_STATUS,                                       // Статус ордера (из перечисления ENUM_ORDER_STATUS)
   ORDER_PROP_TYPE,                                         // Тип ордера/сделки
   ORDER_PROP_REASON,                                       // Причина или источник сделки/ордера/позиции
   ORDER_PROP_STATE,                                        // Состояние ордера (из перечисления ENUM_ORDER_STATE)
   ORDER_PROP_POSITION_ID,                                  // Идентификатор позиции
   ORDER_PROP_POSITION_BY_ID,                               // Идентификатор встречной позиции
   ORDER_PROP_DEAL_ORDER_TICKET,                            // Тикет ордера, на основании которого выполнена сделка
   ORDER_PROP_DEAL_ENTRY,                                   // Направление сделки – IN, OUT или IN/OUT
   ORDER_PROP_TIME_UPDATE,                                  // Время изменения позиции  в милисекундах
   ORDER_PROP_TICKET_FROM,                                  // Тикет родительского ордера
   ORDER_PROP_TICKET_TO,                                    // Тикет дочернего ордера
   ORDER_PROP_PROFIT_PT,                                    // Профит в пунктах
   ORDER_PROP_CLOSE_BY_SL,                                  // Признак закрытия по StopLoss
   ORDER_PROP_CLOSE_BY_TP,                                  // Признак закрытия по TakeProfit
   ORDER_PROP_GROUP_ID,                                     // Идентификатор группы ордеров/позиций
   ORDER_PROP_DIRECTION,                                    // Тип по направлению (Buy, Sell)
  }; 
#define ORDER_PROP_INTEGER_TOTAL    (21)                    // Общее количество целочисленных свойств
#define ORDER_PROP_INTEGER_SKIP     (0)                     // Количество неиспользуемых в сортировке свойств ордера
//+------------------------------------------------------------------+
//| Вещественные свойства ордера, сделки, позиции                    |
//+------------------------------------------------------------------+
enum ENUM_ORDER_PROP_DOUBLE
  {
   ORDER_PROP_PRICE_OPEN = ORDER_PROP_INTEGER_TOTAL,        // Цена открытия (MQL5 цена сделки)
   ORDER_PROP_PRICE_CLOSE,                                  // Цена закрытия
   ORDER_PROP_SL,                                           // Цена StopLoss
   ORDER_PROP_TP,                                           // Цена TaleProfit
   ORDER_PROP_PROFIT,                                       // Профит
   ORDER_PROP_COMMISSION,                                   // Комиссия
   ORDER_PROP_SWAP,                                         // Своп
   ORDER_PROP_VOLUME,                                       // Объём
   ORDER_PROP_VOLUME_CURRENT,                               // Невыполненный объем
   ORDER_PROP_PROFIT_FULL,                                  // Профит+комиссия+своп
   ORDER_PROP_PRICE_STOP_LIMIT,                             // Цена постановки Limit ордера при срабатывании StopLimit ордера
  };
#define ORDER_PROP_DOUBLE_TOTAL     (11)                    // Общее количество вещественных свойств
//+------------------------------------------------------------------+
//| Строковые свойства ордера, сделки, позиции                       |
//+------------------------------------------------------------------+
enum ENUM_ORDER_PROP_STRING
  {
   ORDER_PROP_SYMBOL = (ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_DOUBLE_TOTAL), // Символ ордера
   ORDER_PROP_COMMENT,                                      // Комментарий ордера
   ORDER_PROP_COMMENT_EXT,                                  // Пользовательский комментарий ордера
   ORDER_PROP_EXT_ID                                        // Идентификатор ордера во внешней торговой системе
  };
#define ORDER_PROP_STRING_TOTAL     (4)                     // Общее количество строковых свойств
//+------------------------------------------------------------------+
//| Возможные критерии сортировки ордеров и сделок                   |
//+------------------------------------------------------------------+
#define FIRST_ORD_DBL_PROP          (ORDER_PROP_INTEGER_TOTAL-ORDER_PROP_INTEGER_SKIP)
#define FIRST_ORD_STR_PROP          (ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_DOUBLE_TOTAL-ORDER_PROP_INTEGER_SKIP)
enum ENUM_SORT_ORDERS_MODE
  {
//--- Сортировка по целочисленным свойствам
   SORT_BY_ORDER_TICKET = 0,                                // Сортировать по тикету ордера
   SORT_BY_ORDER_MAGIC,                                     // Сортировать по магику ордера
   SORT_BY_ORDER_TIME_OPEN,                                 // Сортировать по времени открытия ордера в милисекундах
   SORT_BY_ORDER_TIME_CLOSE,                                // Сортировать по времени закрытия ордера в милисекундах
   SORT_BY_ORDER_TIME_EXP,                                  // Сортировать по дате экспирации ордера
   SORT_BY_ORDER_STATUS,                                    // Сортировать по статусу ордера (маркет-ордер/отложенный ордер/сделка/балансовая,кредитная операция)
   SORT_BY_ORDER_TYPE,                                      // Сортировать по типу ордера
   SORT_BY_ORDER_REASON,                                    // Сортировать по причине/источнику сделки/ордера/позиции
   SORT_BY_ORDER_STATE,                                     // Сортировать по состоянию ордера
   SORT_BY_ORDER_POSITION_ID,                               // Сортировать по идентификатору позиции
   SORT_BY_ORDER_POSITION_BY_ID,                            // Сортировать по идентификатору встречной позиции
   SORT_BY_ORDER_DEAL_ORDER,                                // Сортировать по ордеру, на основание которого выполнена сделка
   SORT_BY_ORDER_DEAL_ENTRY,                                // Сортировать по направлению сделки – IN, OUT или IN/OUT
   SORT_BY_ORDER_TIME_UPDATE,                               // Сортировать по времени изменения позиции в секундах
   SORT_BY_ORDER_TICKET_FROM,                               // Сортировать по тикету родительского ордера
   SORT_BY_ORDER_TICKET_TO,                                 // Сортировать по тикету дочернего ордера
   SORT_BY_ORDER_PROFIT_PT,                                 // Сортировать по профиту ордера в пунктах
   SORT_BY_ORDER_CLOSE_BY_SL,                               // Сортировать по признаку закрытия ордера по StopLoss
   SORT_BY_ORDER_CLOSE_BY_TP,                               // Сортировать по признаку закрытия ордера по TakeProfit
   SORT_BY_ORDER_GROUP_ID,                                  // Сортировать по идентификатору группы ордеров/позиций
   SORT_BY_ORDER_DIRECTION,                                 // Сортировать по направлению (Buy, Sell)
//--- Сортировка по вещественным свойствам
   SORT_BY_ORDER_PRICE_OPEN = FIRST_ORD_DBL_PROP,           // Сортировать по цене открытия
   SORT_BY_ORDER_PRICE_CLOSE,                               // Сортировать по цене закрытия
   SORT_BY_ORDER_SL,                                        // Сортировать по цене StopLoss
   SORT_BY_ORDER_TP,                                        // Сортировать по цене TaleProfit
   SORT_BY_ORDER_PROFIT,                                    // Сортировать по профиту
   SORT_BY_ORDER_COMMISSION,                                // Сортировать по комиссии
   SORT_BY_ORDER_SWAP,                                      // Сортировать по свопу
   SORT_BY_ORDER_VOLUME,                                    // Сортировать по объёму
   SORT_BY_ORDER_VOLUME_CURRENT,                            // Сортировать по невыполненному объему
   SORT_BY_ORDER_PROFIT_FULL,                               // Сортировать по критерию профит+комиссия+своп
   SORT_BY_ORDER_PRICE_STOP_LIMIT,                          // Сортировать по цене постановки Limit ордера при срабатывании StopLimit ордера
//--- Сортировка по строковым свойствам
   SORT_BY_ORDER_SYMBOL = FIRST_ORD_STR_PROP,               // Сортировать по символу
   SORT_BY_ORDER_COMMENT,                                   // Сортировать по комментарию
   SORT_BY_ORDER_COMMENT_EXT,                               // Сортировать по пользовательскому комментарию
   SORT_BY_ORDER_EXT_ID                                     // Сортировать по идентификатору ордера во внешней торговой системе
  };
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для работы с событиями счёта                              |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Список флагов торговых событий на счёте                          |
//+------------------------------------------------------------------+
enum ENUM_TRADE_EVENT_FLAGS
  {
   TRADE_EVENT_FLAG_NO_EVENT        =  0,                   // Нет события
   TRADE_EVENT_FLAG_ORDER_PLASED    =  1,                   // Отложенный ордер установлен
   TRADE_EVENT_FLAG_ORDER_REMOVED   =  2,                   // Отложенный ордер удалён
   TRADE_EVENT_FLAG_ORDER_ACTIVATED =  4,                   // Отложенный ордер активирован ценой
   TRADE_EVENT_FLAG_POSITION_OPENED =  8,                   // Позиция открыта
   TRADE_EVENT_FLAG_POSITION_CHANGED=  16,                  // Позиция изменена
   TRADE_EVENT_FLAG_POSITION_REVERSE=  32,                  // Разворот позиции
   TRADE_EVENT_FLAG_POSITION_CLOSED =  64,                  // Позиция закрыта
   TRADE_EVENT_FLAG_ACCOUNT_BALANCE =  128,                 // Балансовая операция (уточнение в типе сделки)
   TRADE_EVENT_FLAG_PARTIAL         =  256,                 // Частичное исполнение
   TRADE_EVENT_FLAG_BY_POS          =  512,                 // Исполнение встречной позицией
   TRADE_EVENT_FLAG_PRICE           =  1024,                // Модификация цены установки
   TRADE_EVENT_FLAG_SL              =  2048,                // Исполнение по StopLoss
   TRADE_EVENT_FLAG_TP              =  4096,                // Исполнение по TakeProfit
   TRADE_EVENT_FLAG_ORDER_MODIFY    =  8192,                // Модификация ордера
   TRADE_EVENT_FLAG_POSITION_MODIFY =  16384,               // Модификация позиции
  };
//+------------------------------------------------------------------+
//| Список возможных торговых событий на счёте                       |
//+------------------------------------------------------------------+
enum ENUM_TRADE_EVENT
  {
   TRADE_EVENT_NO_EVENT = 0,                                // Нет торгового события
   TRADE_EVENT_PENDING_ORDER_PLASED,                        // Отложенный ордер установлен
   TRADE_EVENT_PENDING_ORDER_REMOVED,                       // Отложенный ордер удалён
//--- члены перечисления, совпадающие с членами перечисления ENUM_DEAL_TYPE
//--- (порядок следования констант ниже менять нельзя, удалять и добавлять новые - нельзя)
   TRADE_EVENT_ACCOUNT_CREDIT = DEAL_TYPE_CREDIT,           // Начисление кредита (3)
   TRADE_EVENT_ACCOUNT_CHARGE,                              // Дополнительные сборы
   TRADE_EVENT_ACCOUNT_CORRECTION,                          // Корректирующая запись
   TRADE_EVENT_ACCOUNT_BONUS,                               // Перечисление бонусов
   TRADE_EVENT_ACCOUNT_COMISSION,                           // Дополнительные комиссии
   TRADE_EVENT_ACCOUNT_COMISSION_DAILY,                     // Комиссия, начисляемая в конце торгового дня
   TRADE_EVENT_ACCOUNT_COMISSION_MONTHLY,                   // Комиссия, начисляемая в конце месяца
   TRADE_EVENT_ACCOUNT_COMISSION_AGENT_DAILY,               // Агентская комиссия, начисляемая в конце торгового дня
   TRADE_EVENT_ACCOUNT_COMISSION_AGENT_MONTHLY,             // Агентская комиссия, начисляемая в конце месяца
   TRADE_EVENT_ACCOUNT_INTEREST,                            // Начисления процентов на свободные средства
   TRADE_EVENT_BUY_CANCELLED,                               // Отмененная сделка покупки
   TRADE_EVENT_SELL_CANCELLED,                              // Отмененная сделка продажи
   TRADE_EVENT_DIVIDENT,                                    // Начисление дивиденда
   TRADE_EVENT_DIVIDENT_FRANKED,                            // Начисление франкированного дивиденда
   TRADE_EVENT_TAX                        = DEAL_TAX,       // Начисление налога
//--- константы, относящиеся к типу сделки DEAL_TYPE_BALANCE из перечисления ENUM_DEAL_TYPE
   TRADE_EVENT_ACCOUNT_BALANCE_REFILL     = DEAL_TAX+1,     // Пополнение средств на балансе
   TRADE_EVENT_ACCOUNT_BALANCE_WITHDRAWAL = DEAL_TAX+2,     // Снятие средств с баланса
//--- Остальные возможные торговые события
//--- (менять порядок следования констант ниже, удалять и добавлять новые - можно)
   TRADE_EVENT_PENDING_ORDER_ACTIVATED    = DEAL_TAX+3,     // Отложенный ордер активирован ценой
   TRADE_EVENT_PENDING_ORDER_ACTIVATED_PARTIAL,             // Отложенный ордер активирован ценой частично
   TRADE_EVENT_POSITION_OPENED,                             // Позиция открыта
   TRADE_EVENT_POSITION_OPENED_PARTIAL,                     // Позиция открыта частично
   TRADE_EVENT_POSITION_CLOSED,                             // Позиция закрыта
   TRADE_EVENT_POSITION_CLOSED_BY_POS,                      // Позиция закрыта встречной
   TRADE_EVENT_POSITION_CLOSED_BY_SL,                       // Позиция закрыта по StopLoss
   TRADE_EVENT_POSITION_CLOSED_BY_TP,                       // Позиция закрыта по TakeProfit
   TRADE_EVENT_POSITION_REVERSED_BY_MARKET,                 // Разворот позиции новой сделкой (неттинг)
   TRADE_EVENT_POSITION_REVERSED_BY_PENDING,                // Разворот позиции активацией отложенного ордера (неттинг)
   TRADE_EVENT_POSITION_REVERSED_BY_MARKET_PARTIAL,         // Разворот позиции частичным исполнением маркет-ордера (неттинг)
   TRADE_EVENT_POSITION_REVERSED_BY_PENDING_PARTIAL,        // Разворот позиции частичной активацией отложенного ордера (неттинг)
   TRADE_EVENT_POSITION_VOLUME_ADD_BY_MARKET,               // Добавлен объём к позиции новой сделкой (неттинг)
   TRADE_EVENT_POSITION_VOLUME_ADD_BY_MARKET_PARTIAL,       // Добавлен объём к позиции частичным исполнением маркет-ордера (неттинг)
   TRADE_EVENT_POSITION_VOLUME_ADD_BY_PENDING,              // Добавлен объём к позиции активацией отложенного ордера (неттинг)
   TRADE_EVENT_POSITION_VOLUME_ADD_BY_PENDING_PARTIAL,      // Добавлен объём к позиции частичной активацией отложенного ордера (неттинг)
   TRADE_EVENT_POSITION_CLOSED_PARTIAL,                     // Позиция закрыта частично
   TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_POS,              // Позиция закрыта частично встречной
   TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_SL,               // Позиция закрыта частично по StopLoss
   TRADE_EVENT_POSITION_CLOSED_PARTIAL_BY_TP,               // Позиция закрыта частично по TakeProfit
   TRADE_EVENT_TRIGGERED_STOP_LIMIT_ORDER,                  // Срабатывание StopLimit ордера
   TRADE_EVENT_MODIFY_ORDER_PRICE,                          // Изменение цены установки ордера
   TRADE_EVENT_MODIFY_ORDER_PRICE_STOP_LOSS,                // Изменение цены установки ордера и StopLoss 
   TRADE_EVENT_MODIFY_ORDER_PRICE_TAKE_PROFIT,              // Изменение цены установки ордера и TakeProfit
   TRADE_EVENT_MODIFY_ORDER_PRICE_STOP_LOSS_TAKE_PROFIT,    // Изменение цены установки ордера, StopLoss и TakeProfit
   TRADE_EVENT_MODIFY_ORDER_STOP_LOSS_TAKE_PROFIT,          // Изменение StopLoss и TakeProfit ордера
   TRADE_EVENT_MODIFY_ORDER_STOP_LOSS,                      // Изменение StopLoss ордера
   TRADE_EVENT_MODIFY_ORDER_TAKE_PROFIT,                    // Изменение TakeProfit ордера
   TRADE_EVENT_MODIFY_POSITION_STOP_LOSS_TAKE_PROFIT,       // Изменение StopLoss и TakeProfit позиции
   TRADE_EVENT_MODIFY_POSITION_STOP_LOSS,                   // Изменение StopLoss позиции
   TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT,                 // Изменение TakeProfit позиции
  };
#define TRADE_EVENTS_NEXT_CODE      (TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT+1) // Код следующего события после последнего кода торгового события
//+------------------------------------------------------------------+
//| Статус события                                                   |
//+------------------------------------------------------------------+
enum ENUM_EVENT_STATUS
  {
   EVENT_STATUS_MARKET_POSITION,                            // Событие рыночной позиции (открытие, частичное открытие, частичное закрытие, добавление объёма, разворот)
   EVENT_STATUS_MARKET_PENDING,                             // Событие рыночного отложенного ордера (установка)
   EVENT_STATUS_HISTORY_PENDING,                            // Событие исторического отложенного ордера (удаление)
   EVENT_STATUS_HISTORY_POSITION,                           // Событие исторической позиции (закрытие)
   EVENT_STATUS_BALANCE,                                    // Событие балансной операции (начисление баланса, снятие средств и события из перечисления ENUM_DEAL_TYPE)
   EVENT_STATUS_MODIFY                                      // Событие модификации ордера/позиции
  };
//+------------------------------------------------------------------+
//| Причина события                                                  |
//+------------------------------------------------------------------+
enum ENUM_EVENT_REASON
  {
   EVENT_REASON_REVERSE,                                    // Разворот позиции (неттинг)
   EVENT_REASON_REVERSE_PARTIALLY,                          // Разворот позиции частичным исполнением заявки (неттинг)
   EVENT_REASON_REVERSE_BY_PENDING,                         // Разворот позиции при срабатывании отложенного ордера (неттинг)
   EVENT_REASON_REVERSE_BY_PENDING_PARTIALLY,               // Разворот позиции при при частичном срабатывании отложенного ордера (неттинг)
//--- Все константы, относящиеся к развороту позиции, должны быть в списке выше
   EVENT_REASON_ACTIVATED_PENDING,                          // Срабатывание отложенного ордера
   EVENT_REASON_ACTIVATED_PENDING_PARTIALLY,                // Частичное срабатывание отложенного ордера
   EVENT_REASON_STOPLIMIT_TRIGGERED,                        // Срабатывание StopLimit-ордера
   EVENT_REASON_MODIFY,                                     // Модификация
   EVENT_REASON_CANCEL,                                     // Отмена
   EVENT_REASON_EXPIRED,                                    // Истечение срока действия ордера
   EVENT_REASON_DONE,                                       // Заявка исполнена полностью
   EVENT_REASON_DONE_PARTIALLY,                             // Заявка исполнена частично
   EVENT_REASON_VOLUME_ADD,                                 // Добавление объёма к позиции (неттинг)
   EVENT_REASON_VOLUME_ADD_PARTIALLY,                       // Добавление объёма к позиции частичным исполнением заявки (неттинг)
   EVENT_REASON_VOLUME_ADD_BY_PENDING,                      // Добавление объёма к позиции при срабатывании отложенного ордера (неттинг)
   EVENT_REASON_VOLUME_ADD_BY_PENDING_PARTIALLY,            // Добавление объёма к позиции при частичном срабатывании отложенного ордера (неттинг)
   EVENT_REASON_DONE_SL,                                    // Закрытие по StopLoss
   EVENT_REASON_DONE_SL_PARTIALLY,                          // Частичное закрытие по StopLoss
   EVENT_REASON_DONE_TP,                                    // Закрытие по TakeProfit
   EVENT_REASON_DONE_TP_PARTIALLY,                          // Частичное закрытие по TakeProfit
   EVENT_REASON_DONE_BY_POS,                                // Закрытие встречной позицией
   EVENT_REASON_DONE_PARTIALLY_BY_POS,                      // Частичное закрытие встречной позицией
   EVENT_REASON_DONE_BY_POS_PARTIALLY,                      // Закрытие частичным объёмом встречной позиции
   EVENT_REASON_DONE_PARTIALLY_BY_POS_PARTIALLY,            // Частичное закрытие частичным объёмом встречной позиции
//--- Константы, относящиеся к типу сделки DEAL_TYPE_BALANCE из перечисления ENUM_DEAL_TYPE
   EVENT_REASON_BALANCE_REFILL,                             // Пополнение счёта
   EVENT_REASON_BALANCE_WITHDRAWAL,                         // Снятие средств со счёта
//--- Список констант соотносится с TRADE_EVENT_ACCOUNT_CREDIT из перечисления ENUM_TRADE_EVENT, смещено на +13 относительно ENUM_DEAL_TYPE (EVENT_REASON_ACCOUNT_CREDIT-3)
   EVENT_REASON_ACCOUNT_CREDIT,                             // Начисление кредита
   EVENT_REASON_ACCOUNT_CHARGE,                             // Дополнительные сборы
   EVENT_REASON_ACCOUNT_CORRECTION,                         // Корректирующая запись
   EVENT_REASON_ACCOUNT_BONUS,                              // Перечисление бонусов
   EVENT_REASON_ACCOUNT_COMISSION,                          // Дополнительные комиссии
   EVENT_REASON_ACCOUNT_COMISSION_DAILY,                    // Комиссия, начисляемая в конце торгового дня
   EVENT_REASON_ACCOUNT_COMISSION_MONTHLY,                  // Комиссия, начисляемая в конце месяца
   EVENT_REASON_ACCOUNT_COMISSION_AGENT_DAILY,              // Агентская комиссия, начисляемая в конце торгового дня
   EVENT_REASON_ACCOUNT_COMISSION_AGENT_MONTHLY,            // Агентская комиссия, начисляемая в конце месяца
   EVENT_REASON_ACCOUNT_INTEREST,                           // Начисления процентов на свободные средства
   EVENT_REASON_BUY_CANCELLED,                              // Отмененная сделка покупки
   EVENT_REASON_SELL_CANCELLED,                             // Отмененная сделка продажи
   EVENT_REASON_DIVIDENT,                                   // Начисление дивиденда
   EVENT_REASON_DIVIDENT_FRANKED,                           // Начисление франкированного дивиденда
   EVENT_REASON_TAX                                         // Начисление налога
  };
#define REASON_EVENT_SHIFT    (EVENT_REASON_ACCOUNT_CREDIT-3)
//+------------------------------------------------------------------+
//| Целочисленные свойства события                                   |
//+------------------------------------------------------------------+
enum ENUM_EVENT_PROP_INTEGER
  {
   EVENT_PROP_TYPE_EVENT = 0,                               // Тип торгового события на счёте (из перечисления ENUM_TRADE_EVENT)
   EVENT_PROP_TIME_EVENT,                                   // Время события в милисекундах
   EVENT_PROP_STATUS_EVENT,                                 // Статус события (из перечисления ENUM_EVENT_STATUS)
   EVENT_PROP_REASON_EVENT,                                 // Причина события (из перечисления ENUM_EVENT_REASON)
   //---
   EVENT_PROP_TYPE_DEAL_EVENT,                              // Тип сделки события
   EVENT_PROP_TICKET_DEAL_EVENT,                            // Тикет сделки события
   EVENT_PROP_TYPE_ORDER_EVENT,                             // Тип ордера, на основании которого открыта сделка события (последний ордер позиции)
   EVENT_PROP_TICKET_ORDER_EVENT,                           // Тикет ордера, на основании которого открыта сделка события (последний ордер позиции)
   //---
   EVENT_PROP_TIME_ORDER_POSITION,                          // Время ордера, на основании которого открыта первая сделка позиции (первый ордер позиции на хедж-счёте)
   EVENT_PROP_TYPE_ORDER_POSITION,                          // Тип ордера, на основании которого открыта первая сделка позиции (первый ордер позиции на хедж-счёте)
   EVENT_PROP_TICKET_ORDER_POSITION,                        // Тикет ордера, на основании которого открыта первая сделка позиции (первый ордер позиции на хедж-счёте)
   EVENT_PROP_POSITION_ID,                                  // Идентификатор позиции
   //---
   EVENT_PROP_POSITION_BY_ID,                               // Идентификатор встречной позиции
   EVENT_PROP_MAGIC_ORDER,                                  // Магический номер ордера/сделки/позиции
   EVENT_PROP_MAGIC_BY_ID,                                  // Магический номер встречной позиции
   //---
   EVENT_PROP_TYPE_ORD_POS_BEFORE,                          // Тип позиции до смены направления
   EVENT_PROP_TICKET_ORD_POS_BEFORE,                        // Тикет ордера позиции до смены направления
   EVENT_PROP_TYPE_ORD_POS_CURRENT,                         // Тип текущей позиции
   EVENT_PROP_TICKET_ORD_POS_CURRENT,                       // Тикет ордера текущей позиции
  }; 
#define EVENT_PROP_INTEGER_TOTAL (19)                       // Общее количество целочисленных свойств события
#define EVENT_PROP_INTEGER_SKIP  (4)                        // Количество неиспользуемых в сортировке свойств события
//+------------------------------------------------------------------+
//| Вещественные свойства события                                    |
//+------------------------------------------------------------------+
enum ENUM_EVENT_PROP_DOUBLE
  {
   EVENT_PROP_PRICE_EVENT = EVENT_PROP_INTEGER_TOTAL,       // Цена, на которой произошло событие
   EVENT_PROP_PRICE_OPEN,                                   // Цена открытия ордера/сделки/позиции
   EVENT_PROP_PRICE_CLOSE,                                  // Цена закрытия ордера/сделки/позиции
   EVENT_PROP_PRICE_SL,                                     // Цена StopLoss ордера/сделки/позиции
   EVENT_PROP_PRICE_TP,                                     // Цена TakeProfit ордера/сделки/позиции
   EVENT_PROP_VOLUME_ORDER_INITIAL,                         // Запрашиваемый объём ордера
   EVENT_PROP_VOLUME_ORDER_EXECUTED,                        // Исполненный объём ордера
   EVENT_PROP_VOLUME_ORDER_CURRENT,                         // Оставшийся объём ордера
   EVENT_PROP_VOLUME_POSITION_EXECUTED,                     // Текущий исполненный объём позиции после сделки
   EVENT_PROP_PROFIT,                                       // Профит
   //---
   EVENT_PROP_PRICE_OPEN_BEFORE,                            // Цена установки ордера до модификации
   EVENT_PROP_PRICE_SL_BEFORE,                              // Цена StopLoss до модификации
   EVENT_PROP_PRICE_TP_BEFORE,                              // Цена TakeProfit до модификации
   EVENT_PROP_PRICE_EVENT_ASK,                              // Цена Ask в момент события
   EVENT_PROP_PRICE_EVENT_BID,                              // Цена Bid в момент события
  };
#define EVENT_PROP_DOUBLE_TOTAL  (15)                       // Общее количество вещественных свойств события
#define EVENT_PROP_DOUBLE_SKIP   (5)                        // Количество неиспользуемых в сортировке свойств события
//+------------------------------------------------------------------+
//| Строковые свойства события                                       |
//+------------------------------------------------------------------+
enum ENUM_EVENT_PROP_STRING
  {
   EVENT_PROP_SYMBOL = (EVENT_PROP_INTEGER_TOTAL+EVENT_PROP_DOUBLE_TOTAL), // Символ ордера
   EVENT_PROP_SYMBOL_BY_ID                                  // Символ встречной позиции
  };
#define EVENT_PROP_STRING_TOTAL     (2)                     // Общее количество строковых свойств события
//+------------------------------------------------------------------+
//| Возможные критерии сортировки событий                            |
//+------------------------------------------------------------------+
#define FIRST_EVN_DBL_PROP       (EVENT_PROP_INTEGER_TOTAL-EVENT_PROP_INTEGER_SKIP)
#define FIRST_EVN_STR_PROP       (EVENT_PROP_INTEGER_TOTAL-EVENT_PROP_INTEGER_SKIP+EVENT_PROP_DOUBLE_TOTAL-EVENT_PROP_DOUBLE_SKIP)
enum ENUM_SORT_EVENTS_MODE
  {
//--- Сортировка по целочисленным свойствам
   SORT_BY_EVENT_TYPE_EVENT = 0,                            // Сортировать по типу события
   SORT_BY_EVENT_TIME_EVENT,                                // Сортировать по времени события
   SORT_BY_EVENT_STATUS_EVENT,                              // Сортировать по статусу события (из перечисления ENUM_EVENT_STATUS)
   SORT_BY_EVENT_REASON_EVENT,                              // Сортировать по причине события (из перечисления ENUM_EVENT_REASON)
   SORT_BY_EVENT_TYPE_DEAL_EVENT,                           // Сортировать по типу сделки события
   SORT_BY_EVENT_TICKET_DEAL_EVENT,                         // Сортировать по тикету сделки события
   SORT_BY_EVENT_TYPE_ORDER_EVENT,                          // Сортировать по типу ордера, на основании которого открыта сделка события (последний ордер позиции)
   SORT_BY_EVENT_TICKET_ORDER_EVENT,                        // Сортировать по тикету ордера, на основании которого открыта сделка события (последний ордер позиции)
   SORT_BY_EVENT_TIME_ORDER_POSITION,                       // Сортировать по времени ордера, на основании которого открыта сделка позиции (первый ордер позиции)
   SORT_BY_EVENT_TYPE_ORDER_POSITION,                       // Сортировать по типу ордера, на основании которого открыта сделка позиции (первый ордер позиции)
   SORT_BY_EVENT_TICKET_ORDER_POSITION,                     // Сортировать по тикету ордера, на основании которого открыта сделка позиции (первый ордер позиции)
   SORT_BY_EVENT_POSITION_ID,                               // Сортировать по идентификатору позиции
   SORT_BY_EVENT_POSITION_BY_ID,                            // Сортировать по идентификатору встречной позиции
   SORT_BY_EVENT_MAGIC_ORDER,                               // Сортировать по магическому номеру ордера/сделки/позиции
   SORT_BY_EVENT_MAGIC_BY_ID,                               // Сортировать по магическому номеру встречной позиции
//--- Сортировка по вещественным свойствам
   SORT_BY_EVENT_PRICE_EVENT = FIRST_EVN_DBL_PROP,          // Сортировать по цене, на которой произошло событие
   SORT_BY_EVENT_PRICE_OPEN,                                // Сортировать по цене открытия позиции
   SORT_BY_EVENT_PRICE_CLOSE,                               // Сортировать по цене закрытия позиции
   SORT_BY_EVENT_PRICE_SL,                                  // Сортировать по цене StopLoss позиции
   SORT_BY_EVENT_PRICE_TP,                                  // Сортировать по цене TakeProfit позиции
   SORT_BY_EVENT_VOLUME_ORDER_INITIAL,                      // Сортировать по первоначальному объёму
   SORT_BY_EVENT_VOLUME_ORDER_EXECUTED,                     // Сортировать по текущему объёму
   SORT_BY_EVENT_VOLUME_ORDER_CURRENT,                      // Сортировать по оставшемуся объёму
   SORT_BY_EVENT_VOLUME_POSITION_EXECUTED,                  // Сортировать по оставшемуся объёму
   SORT_BY_EVENT_PROFIT,   // Сортировать по профиту
//--- Сортировка по строковым свойствам
   SORT_BY_EVENT_SYMBOL = FIRST_EVN_STR_PROP,               // Сортировать по символу ордера/позици/сделки
   SORT_BY_EVENT_SYMBOL_BY_ID                               // Сортировать по символу встречной позици
  };
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для работы с аккаунтами                                   |
//+------------------------------------------------------------------+
#define ACCOUNT_EVENTS_NEXT_CODE       (TRADE_EVENTS_NEXT_CODE)   // Код следующего событя после последнего кода события аккаунта
//+------------------------------------------------------------------+
//| Целочисленные свойства аккаунта                                  |
//+------------------------------------------------------------------+
enum ENUM_ACCOUNT_PROP_INTEGER
  {
   ACCOUNT_PROP_LOGIN,                                      // Номер счёта
   ACCOUNT_PROP_TRADE_MODE,                                 // Тип торгового счета
   ACCOUNT_PROP_LEVERAGE,                                   // Размер предоставленного плеча
   ACCOUNT_PROP_LIMIT_ORDERS,                               // Максимально допустимое количество действующих отложенных ордеров
   ACCOUNT_PROP_MARGIN_SO_MODE,                             // Режим задания минимально допустимого уровня залоговых средств
   ACCOUNT_PROP_TRADE_ALLOWED,                              // Разрешенность торговли для текущего счета со стороны сервера
   ACCOUNT_PROP_TRADE_EXPERT,                               // Разрешенность торговли для эксперта со стороны сервера
   ACCOUNT_PROP_MARGIN_MODE,                                // Режим расчета маржи
   ACCOUNT_PROP_CURRENCY_DIGITS,                            // Количество знаков после запятой для валюты счета, необходимых для точного отображения торговых результатов
   ACCOUNT_PROP_SERVER_TYPE,                                // Тип торгового сервера (MetaTrader5, MetaTrader4)
   ACCOUNT_PROP_FIFO_CLOSE                                  // Признак закрытия позиций только по правилу FIFO
  };
#define ACCOUNT_PROP_INTEGER_TOTAL    (11)                  // Общее количество целочисленных свойств счетов
#define ACCOUNT_PROP_INTEGER_SKIP     (0)                   // Количество неиспользуемых в сортировке целочисленных свойств счетов
//+------------------------------------------------------------------+
//| Вещественные свойства аккаунта                                   |
//+------------------------------------------------------------------+
enum ENUM_ACCOUNT_PROP_DOUBLE
  {
   ACCOUNT_PROP_BALANCE = ACCOUNT_PROP_INTEGER_TOTAL,       // Баланс счета в валюте депозита
   ACCOUNT_PROP_CREDIT,                                     // Размер предоставленного кредита в валюте депозита
   ACCOUNT_PROP_PROFIT,                                     // Размер текущей прибыли на счете в валюте депозита
   ACCOUNT_PROP_EQUITY,                                     // Значение собственных средств на счете в валюте депозита
   ACCOUNT_PROP_MARGIN,                                     // Размер зарезервированных залоговых средств на счете  в валюте депозита
   ACCOUNT_PROP_MARGIN_FREE,                                // Размер свободных средств на счете  в валюте депозита, доступных для открытия позиции
   ACCOUNT_PROP_MARGIN_LEVEL,                               // Уровень залоговых средств на счете в процентах
   ACCOUNT_PROP_MARGIN_SO_CALL,                             // Уровень залоговых средств, при котором требуется пополнение счета (Margin Call)
   ACCOUNT_PROP_MARGIN_SO_SO,                               // Уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out)
   ACCOUNT_PROP_MARGIN_INITIAL,                             // Размер средств, зарезервированных на счёте, для обеспечения гарантийной суммы по всем отложенным ордерам 
   ACCOUNT_PROP_MARGIN_MAINTENANCE,                         // Размер средств, зарезервированных на счёте, для обеспечения минимальной суммы по всем открытым позициям
   ACCOUNT_PROP_ASSETS,                                     // Текущий размер активов на счёте
   ACCOUNT_PROP_LIABILITIES,                                // Текущий размер обязательств на счёте
   ACCOUNT_PROP_COMMISSION_BLOCKED                          // Текущая сумма заблокированных комиссий по счёту
  };
#define ACCOUNT_PROP_DOUBLE_TOTAL     (14)                  // Общее количество вещественных свойств счетов
#define ACCOUNT_PROP_DOUBLE_SKIP      (0)                   // Количество неиспользуемых в сортировке вещественных свойств счетов
//+------------------------------------------------------------------+
//| Строковые свойства аккаунта                                      |
//+------------------------------------------------------------------+
enum ENUM_ACCOUNT_PROP_STRING
  {
   ACCOUNT_PROP_NAME = (ACCOUNT_PROP_INTEGER_TOTAL+ACCOUNT_PROP_DOUBLE_TOTAL), // Имя клиента
   ACCOUNT_PROP_SERVER,                                     // Имя торгового сервера
   ACCOUNT_PROP_CURRENCY,                                   // Валюта депозита
   ACCOUNT_PROP_COMPANY                                     // Имя компании, обслуживающей счет
  };
#define ACCOUNT_PROP_STRING_TOTAL     (4)                   // Общее количество строковых свойств счетов
#define ACCOUNT_PROP_STRING_SKIP      (0)                   // Количество неиспользуемых в сортировке строковых свойств счетов
//+------------------------------------------------------------------+
//| Возможные критерии сортировки аккаунтов                          |
//+------------------------------------------------------------------+
#define FIRST_ACC_DBL_PROP            (ACCOUNT_PROP_INTEGER_TOTAL-ACCOUNT_PROP_INTEGER_SKIP)
#define FIRST_ACC_STR_PROP            (ACCOUNT_PROP_INTEGER_TOTAL-ACCOUNT_PROP_INTEGER_SKIP+ACCOUNT_PROP_DOUBLE_TOTAL-ACCOUNT_PROP_DOUBLE_SKIP)
enum ENUM_SORT_ACCOUNT_MODE
  {
//--- Сортировка по целочисленным свойствам
   SORT_BY_ACCOUNT_LOGIN = 0,                               // Сортировать по номеру счёта
   SORT_BY_ACCOUNT_TRADE_MODE,                              // Сортировать по типу торгового счета
   SORT_BY_ACCOUNT_LEVERAGE,                                // Сортировать по размеру предоставленного плеча
   SORT_BY_ACCOUNT_LIMIT_ORDERS,                            // Сортировать по максимально допустимому количеству действующих отложенных ордеров
   SORT_BY_ACCOUNT_MARGIN_SO_MODE,                          // Сортировать по режиму задания минимально допустимого уровня залоговых средств
   SORT_BY_ACCOUNT_TRADE_ALLOWED,                           // Сортировать по разрешенности торговли для текущего счета
   SORT_BY_ACCOUNT_TRADE_EXPERT,                            // Сортировать по разрешенности торговли для эксперта
   SORT_BY_ACCOUNT_MARGIN_MODE,                             // Сортировать по режиму расчета маржи
   SORT_BY_ACCOUNT_CURRENCY_DIGITS,                         // Сортировать по количеству знаков после запятой для валюты счета
   SORT_BY_ACCOUNT_SERVER_TYPE,                             // Сортировать по типу торгового сервера (MetaTrader5, MetaTrader4)
   SORT_BY_ACCOUNT_FIFO_CLOSE,                              // Сортировать по признаку закрытия позиций только по правилу FIFO
//--- Сортировка по вещественным свойствам
   SORT_BY_ACCOUNT_BALANCE = FIRST_ACC_DBL_PROP,            // Сортировать по балансу счета в валюте депозита
   SORT_BY_ACCOUNT_CREDIT,                                  // Сортировать по размеру предоставленного кредита в валюте депозита
   SORT_BY_ACCOUNT_PROFIT,                                  // Сортировать по размеру текущей прибыли на счете в валюте депозита
   SORT_BY_ACCOUNT_EQUITY,                                  // Сортировать по значению собственных средств на счете в валюте депозита
   SORT_BY_ACCOUNT_MARGIN,                                  // Сортировать по размеру зарезервированных залоговых средств на счете в валюте депозита
   SORT_BY_ACCOUNT_MARGIN_FREE,                             // Сортировать по размеру свободных средств на счете в валюте депозита, доступных для открытия позиции
   SORT_BY_ACCOUNT_MARGIN_LEVEL,                            // Сортировать по уровню залоговых средств на счете в процентах
   SORT_BY_ACCOUNT_MARGIN_SO_CALL,                          // Сортировать по уровню залоговых средств, при котором требуется пополнение счета (Margin Call)
   SORT_BY_ACCOUNT_MARGIN_SO_SO,                            // Сортировать по уровню залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out)
   SORT_BY_ACCOUNT_MARGIN_INITIAL,                          // Сортировать по размеру средств, зарезервированных на счёте, для обеспечения гарантийной суммы по всем отложенным ордерам 
   SORT_BY_ACCOUNT_MARGIN_MAINTENANCE,                      // Сортировать по размеру средств, зарезервированных на счёте, для обеспечения минимальной суммы по всем открытым позициям
   SORT_BY_ACCOUNT_ASSETS,                                  // Сортировать по текущему размеру активов на счёте
   SORT_BY_ACCOUNT_LIABILITIES,                             // Сортировать по текущему размеру обязательств на счёте
   SORT_BY_ACCOUNT_COMMISSION_BLOCKED,                      // Сортировать по текущей сумме заблокированных комиссий по счёту
//--- Сортировка по строковым свойствам
   SORT_BY_ACCOUNT_NAME = FIRST_ACC_STR_PROP,               // Сортировать по имени клиента
   SORT_BY_ACCOUNT_SERVER,                                  // Сортировать по имени торгового сервера
   SORT_BY_ACCOUNT_CURRENCY,                                // Сортировать по валюте депозита
   SORT_BY_ACCOUNT_COMPANY                                  // Сортировать по имени компании, обслуживающей счет
  };
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для работы с символами                                    |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Список возможных событий символов в окне "Обзор рынка"           |
//+------------------------------------------------------------------+
enum ENUM_MW_EVENT
  {
   MARKET_WATCH_EVENT_NO_EVENT = ACCOUNT_EVENTS_NEXT_CODE,  // Нет события
   MARKET_WATCH_EVENT_SYMBOL_ADD,                           // Добавление символа в окно "Обзор рынка"
   MARKET_WATCH_EVENT_SYMBOL_DEL,                           // Удаление символа из окна "Обзор рынка"
   MARKET_WATCH_EVENT_SYMBOL_SORT,                          // Сортировка символов в окне "Обзор рынка"
  };
#define SYMBOL_EVENTS_NEXT_CODE  (MARKET_WATCH_EVENT_SYMBOL_SORT+1)  // Код следующего события после последнего кода события символа
//+------------------------------------------------------------------+
//| Тип (статус) абстрактного символа                                |
//+------------------------------------------------------------------+
enum ENUM_SYMBOL_STATUS
  {
   SYMBOL_STATUS_FX,                                        // Форекс символ
   SYMBOL_STATUS_FX_MAJOR,                                  // Форекс символ-мажор
   SYMBOL_STATUS_FX_MINOR,                                  // Форекс символ-минор
   SYMBOL_STATUS_FX_EXOTIC,                                 // Форекс символ-экзотик
   SYMBOL_STATUS_FX_RUB,                                    // Форекс символ/рубль
   SYMBOL_STATUS_METAL,                                     // Металл
   SYMBOL_STATUS_INDEX,                                     // Индекс
   SYMBOL_STATUS_INDICATIVE,                                // Индикатив
   SYMBOL_STATUS_CRYPTO,                                    // Криптовалютный символ
   SYMBOL_STATUS_COMMODITY,                                 // Товарный символ
   SYMBOL_STATUS_EXCHANGE,                                  // Биржевой символ
   SYMBOL_STATUS_FUTURES,                                   // Фьючерс
   SYMBOL_STATUS_CFD,                                       // Контракт на разницу
   SYMBOL_STATUS_STOCKS,                                    // Ценная бумага
   SYMBOL_STATUS_BONDS,                                     // Облигация
   SYMBOL_STATUS_OPTION,                                    // Опцион
   SYMBOL_STATUS_COLLATERAL,                                // Неторгуемый актив
   SYMBOL_STATUS_CUSTOM,                                    // Пользовательский символ
   SYMBOL_STATUS_COMMON                                     // Общая категория
  };
//+------------------------------------------------------------------+
//| Целочисленные свойства символа                                   |
//+------------------------------------------------------------------+
enum ENUM_SYMBOL_PROP_INTEGER
  {
   SYMBOL_PROP_STATUS = 0,                                  // Статус символа
   SYMBOL_PROP_INDEX_MW,                                    // Индекс символа в окне "Обзор рынка"
   SYMBOL_PROP_CUSTOM,                                      // Признак того, что символ является пользовательским
   SYMBOL_PROP_CHART_MODE,                                  // Тип цены для построения баров – Bid или Last (из перечисления ENUM_SYMBOL_CHART_MODE)
   SYMBOL_PROP_EXIST,                                       // Признак того, что символ с таким именем существует
   SYMBOL_PROP_SELECT,                                      // Признак того, что символ выбран в Market Watch
   SYMBOL_PROP_VISIBLE,                                     // Признак того, что выбранный символ отображается в Market Watch
   SYMBOL_PROP_SESSION_DEALS,                               // Количество сделок в текущей сессии 
   SYMBOL_PROP_SESSION_BUY_ORDERS,                          // Общее число ордеров на покупку в текущий момент
   SYMBOL_PROP_SESSION_SELL_ORDERS,                         // Общее число ордеров на продажу в текущий момент
   SYMBOL_PROP_VOLUME,                                      // Volume - объем в последней сделке
   SYMBOL_PROP_VOLUMEHIGH,                                  // Максимальный Volume за день
   SYMBOL_PROP_VOLUMELOW,                                   // Минимальный Volume за день
   SYMBOL_PROP_TIME,                                        // Время последней котировки
   SYMBOL_PROP_DIGITS,                                      // Количество знаков после запятой
   SYMBOL_PROP_DIGITS_LOTS,                                 // Количество знаков после запятой для лота
   SYMBOL_PROP_SPREAD,                                      // Размер спреда в пунктах
   SYMBOL_PROP_SPREAD_FLOAT,                                // Признак плавающего спреда
   SYMBOL_PROP_TICKS_BOOKDEPTH,                             // Максимальное количество показываемых заявок в стакане
   SYMBOL_PROP_TRADE_CALC_MODE,                             // Способ вычисления стоимости контракта (из перечисления ENUM_SYMBOL_CALC_MODE)
   SYMBOL_PROP_TRADE_MODE,                                  // Тип исполнения ордеров (из перечисления ENUM_SYMBOL_TRADE_MODE)
   SYMBOL_PROP_START_TIME,                                  // Дата начала торгов по инструменту (обычно используется для фьючерсов)
   SYMBOL_PROP_EXPIRATION_TIME,                             // Дата окончания торгов по инструменту (обычно используется для фьючерсов)
   SYMBOL_PROP_TRADE_STOPS_LEVEL,                           // Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров
   SYMBOL_PROP_TRADE_FREEZE_LEVEL,                          // Дистанция заморозки торговых операций (в пунктах)
   SYMBOL_PROP_TRADE_EXEMODE,                               // Режим заключения сделок (из перечисления ENUM_SYMBOL_TRADE_EXECUTION)
   SYMBOL_PROP_SWAP_MODE,                                   // Модель расчета свопа (из перечисления ENUM_SYMBOL_SWAP_MODE)
   SYMBOL_PROP_SWAP_ROLLOVER3DAYS,                          // День недели для начисления тройного свопа (из перечисления ENUM_DAY_OF_WEEK)
   SYMBOL_PROP_MARGIN_HEDGED_USE_LEG,                       // Режим расчета хеджированной маржи по наибольшей стороне (Buy или Sell)
   SYMBOL_PROP_EXPIRATION_MODE,                             // Флаги разрешенных режимов истечения ордера
   SYMBOL_PROP_FILLING_MODE,                                // Флаги разрешенных режимов заливки ордера
   SYMBOL_PROP_ORDER_MODE,                                  // Флаги разрешенных типов ордера
   SYMBOL_PROP_ORDER_GTC_MODE,                              // Срок действия StopLoss и TakeProfit ордеров, если SYMBOL_EXPIRATION_MODE=SYMBOL_EXPIRATION_GTC (из перечисления ENUM_SYMBOL_ORDER_GTC_MODE)
   SYMBOL_PROP_OPTION_MODE,                                 // Тип опциона (из перечисления ENUM_SYMBOL_OPTION_MODE)
   SYMBOL_PROP_OPTION_RIGHT,                                // Право опциона (Call/Put) (из перечисления ENUM_SYMBOL_OPTION_RIGHT)
   //--- пропускаемое свойство
   SYMBOL_PROP_BACKGROUND_COLOR                             // Цвет фона, которым подсвечивается символ в Market Watch
  }; 
#define SYMBOL_PROP_INTEGER_TOTAL    (36)                   // Общее количество целочисленных свойств
#define SYMBOL_PROP_INTEGER_SKIP     (1)                    // Количество неиспользуемых в сортировке целочисленных свойств символа
//+------------------------------------------------------------------+
//| Вещественные свойства символа                                    |
//+------------------------------------------------------------------+
enum ENUM_SYMBOL_PROP_DOUBLE
  {
   SYMBOL_PROP_BID = SYMBOL_PROP_INTEGER_TOTAL,             // Bid - лучшее предложение на продажу
   SYMBOL_PROP_BIDHIGH,                                     // Максимальный Bid за день
   SYMBOL_PROP_BIDLOW,                                      // Минимальный Bid за день
   SYMBOL_PROP_ASK,                                         // Ask - лучшее предложение на покупку
   SYMBOL_PROP_ASKHIGH,                                     // Максимальный Ask за день
   SYMBOL_PROP_ASKLOW,                                      // Минимальный Ask за день
   SYMBOL_PROP_LAST,                                        // Цена, по которой совершена последняя сделка
   SYMBOL_PROP_LASTHIGH,                                    // Максимальный Last за день
   SYMBOL_PROP_LASTLOW,                                     // Минимальный Last за день
   SYMBOL_PROP_VOLUME_REAL,                                 // Volume за день
   SYMBOL_PROP_VOLUMEHIGH_REAL,                             // Максимальный Volume за день
   SYMBOL_PROP_VOLUMELOW_REAL,                              // Минимальный Volume за день
   SYMBOL_PROP_OPTION_STRIKE,                               // Цена исполнения опциона
   SYMBOL_PROP_POINT,                                       // Значение одного пункта
   SYMBOL_PROP_TRADE_TICK_VALUE,                            // Значение SYMBOL_TRADE_TICK_VALUE_PROFIT
   SYMBOL_PROP_TRADE_TICK_VALUE_PROFIT,                     // Рассчитанная стоимость тика для прибыльной позиции
   SYMBOL_PROP_TRADE_TICK_VALUE_LOSS,                       // Рассчитанная стоимость тика для убыточной позиции
   SYMBOL_PROP_TRADE_TICK_SIZE,                             // Минимальное изменение цены
   SYMBOL_PROP_TRADE_CONTRACT_SIZE,                         // Размер торгового контракта
   SYMBOL_PROP_TRADE_ACCRUED_INTEREST,                      // Накопленный купонный доход
   SYMBOL_PROP_TRADE_FACE_VALUE,                            // Номинальная стоимость – начальная стоимость облигации, установленная эмитентом
   SYMBOL_PROP_TRADE_LIQUIDITY_RATE,                        // Коэффициент ликвидности – доля от стоимости актива, которую можно использовать в качестве залога
   SYMBOL_PROP_VOLUME_MIN,                                  // Минимальный объем для заключения сделки
   SYMBOL_PROP_VOLUME_MAX,                                  // Максимальный объем для заключения сделки
   SYMBOL_PROP_VOLUME_STEP,                                 // Минимальный шаг изменения объема для заключения сделки
   SYMBOL_PROP_VOLUME_LIMIT,                                // Максимально допустимый совокупный объем открытой позиции и отложенных ордеров в одном направлении (покупка или продажа)
   SYMBOL_PROP_SWAP_LONG,                                   // Значение свопа в покупку
   SYMBOL_PROP_SWAP_SHORT,                                  // Значение свопа в продажу
   SYMBOL_PROP_MARGIN_INITIAL,                              // Начальная (инициирующая) маржа
   SYMBOL_PROP_MARGIN_MAINTENANCE,                          // Поддерживающая маржа по инструменту
   SYMBOL_PROP_MARGIN_LONG_INITIAL,                         // Коэффициент взимания начальной маржи по длинным позициям
   SYMBOL_PROP_MARGIN_BUY_STOP_INITIAL,                     // Коэффициент взимания начальной маржи по BuyStop ордерам
   SYMBOL_PROP_MARGIN_BUY_LIMIT_INITIAL,                    // Коэффициент взимания начальной маржи по BuyLimit ордерам
   SYMBOL_PROP_MARGIN_BUY_STOPLIMIT_INITIAL,                // Коэффициент взимания начальной маржи по BuyStopLimit ордерам
   SYMBOL_PROP_MARGIN_LONG_MAINTENANCE,                     // Коэффициент взимания поддерживающей маржи по длинным позициям
   SYMBOL_PROP_MARGIN_BUY_STOP_MAINTENANCE,                 // Коэффициент взимания поддерживающей маржи по BuyStop ордерам
   SYMBOL_PROP_MARGIN_BUY_LIMIT_MAINTENANCE,                // Коэффициент взимания поддерживающей маржи по BuyLimit ордерам
   SYMBOL_PROP_MARGIN_BUY_STOPLIMIT_MAINTENANCE,            // Коэффициент взимания поддерживающей маржи по BuyStopLimit ордерам
   SYMBOL_PROP_MARGIN_SHORT_INITIAL,                        // Коэффициент взимания начальной маржи по коротким позициям
   SYMBOL_PROP_MARGIN_SELL_STOP_INITIAL,                    // Коэффициент взимания начальной маржи по SellStop ордерам
   SYMBOL_PROP_MARGIN_SELL_LIMIT_INITIAL,                   // Коэффициент взимания начальной маржи по SellLimit ордерам
   SYMBOL_PROP_MARGIN_SELL_STOPLIMIT_INITIAL,               // Коэффициент взимания начальной маржи по SellStopLimit ордерам
   SYMBOL_PROP_MARGIN_SHORT_MAINTENANCE,                    // Коэффициент взимания поддерживающей маржи по коротким позициям
   SYMBOL_PROP_MARGIN_SELL_STOP_MAINTENANCE,                // Коэффициент взимания поддерживающей маржи по SellStop ордерам
   SYMBOL_PROP_MARGIN_SELL_LIMIT_MAINTENANCE,               // Коэффициент взимания поддерживающей маржи по SellLimit ордерам
   SYMBOL_PROP_MARGIN_SELL_STOPLIMIT_MAINTENANCE,           // Коэффициент взимания поддерживающей маржи по SellStopLimit ордерам
   SYMBOL_PROP_SESSION_VOLUME,                              // Cуммарный объём сделок в текущую сессию
   SYMBOL_PROP_SESSION_TURNOVER,                            // Cуммарный оборот в текущую сессию
   SYMBOL_PROP_SESSION_INTEREST,                            // Cуммарный объём открытых позиций
   SYMBOL_PROP_SESSION_BUY_ORDERS_VOLUME,                   // Общий объём ордеров на покупку в текущий момент
   SYMBOL_PROP_SESSION_SELL_ORDERS_VOLUME,                  // Общий объём ордеров на продажу в текущий момент
   SYMBOL_PROP_SESSION_OPEN,                                // Цена открытия сессии
   SYMBOL_PROP_SESSION_CLOSE,                               // Цена закрытия сессии
   SYMBOL_PROP_SESSION_AW,                                  // Средневзвешенная цена сессии
   SYMBOL_PROP_SESSION_PRICE_SETTLEMENT,                    // Цена поставки на текущую сессию
   SYMBOL_PROP_SESSION_PRICE_LIMIT_MIN,                     // Минимально допустимое значение цены на сессию 
   SYMBOL_PROP_SESSION_PRICE_LIMIT_MAX,                     // Максимально допустимое значение цены на сессию
   SYMBOL_PROP_MARGIN_HEDGED                                // Размер контракта или маржи для одного лота перекрытых позиций (разнонаправленные позиции по одному символу).
  };
#define SYMBOL_PROP_DOUBLE_TOTAL     (58)                   // Общее количество вещественных свойств
#define SYMBOL_PROP_DOUBLE_SKIP      (0)                    // Количество неиспользуемых в сортировке вещественных свойств символа
//+------------------------------------------------------------------+
//| Строковые свойства символа                                       |
//+------------------------------------------------------------------+
enum ENUM_SYMBOL_PROP_STRING
  {
   SYMBOL_PROP_NAME = (SYMBOL_PROP_INTEGER_TOTAL+SYMBOL_PROP_DOUBLE_TOTAL),   // Имя символа
   SYMBOL_PROP_BASIS,                                       // Имя базового актива для производного инструмента
   SYMBOL_PROP_CURRENCY_BASE,                               // Базовая валюта инструмента
   SYMBOL_PROP_CURRENCY_PROFIT,                             // Валюта прибыли
   SYMBOL_PROP_CURRENCY_MARGIN,                             // Валюта, в которой вычисляются залоговые средства
   SYMBOL_PROP_BANK,                                        // Источник текущей котировки
   SYMBOL_PROP_DESCRIPTION,                                 // Строковое описание символа
   SYMBOL_PROP_FORMULA,                                     // Формула для построения цены пользовательского символа
   SYMBOL_PROP_ISIN,                                        // Имя торгового символа в системе международных идентификационных кодов ценных бумаг — ISIN
   SYMBOL_PROP_PAGE,                                        // Адрес интернет страницы с информацией по символу
   SYMBOL_PROP_PATH,                                        // Путь в дереве символов
   SYMBOL_PROP_CATEGORY,                                    // Категория символа
   SYMBOL_PROP_EXCHANGE                                     // Название биржи или площадки, на которой торгуется символ
  };
#define SYMBOL_PROP_STRING_TOTAL     (13)                   // Общее количество строковых свойств
//+------------------------------------------------------------------+
//| Возможные критерии сортировки символов                           |
//+------------------------------------------------------------------+
#define FIRST_SYM_DBL_PROP          (SYMBOL_PROP_INTEGER_TOTAL-SYMBOL_PROP_INTEGER_SKIP)
#define FIRST_SYM_STR_PROP          (SYMBOL_PROP_INTEGER_TOTAL-SYMBOL_PROP_INTEGER_SKIP+SYMBOL_PROP_DOUBLE_TOTAL-SYMBOL_PROP_DOUBLE_SKIP)
enum ENUM_SORT_SYMBOLS_MODE
  {
//--- Сортировка по целочисленным свойствам
   SORT_BY_SYMBOL_STATUS = 0,                               // Сортировать по статусу символа
   SORT_BY_SYMBOL_INDEX_MW,                                 // Сортировать по индексу в окне "Обзор рынка"
   SORT_BY_SYMBOL_CUSTOM,                                   // Сортировать по признаку пользовательского символа
   SORT_BY_SYMBOL_CHART_MODE,                               // Сортировать по типу цены для построения баров – Bid или Last (из перечисления ENUM_SYMBOL_CHART_MODE)
   SORT_BY_SYMBOL_EXIST,                                    // Сортировать по признаку того, что символ с таким именем существует
   SORT_BY_SYMBOL_SELECT,                                   // Сортировать по признаку того, что символ выбран в Market Watch
   SORT_BY_SYMBOL_VISIBLE,                                  // Сортировать по признаку того, что выбранный символ отображается в Market Watch
   SORT_BY_SYMBOL_SESSION_DEALS,                            // Сортировать по количеству сделок в текущей сессии 
   SORT_BY_SYMBOL_SESSION_BUY_ORDERS,                       // Сортировать по общему числу ордеров на покупку в текущий момент
   SORT_BY_SYMBOL_SESSION_SELL_ORDERS,                      // Сортировать по общему числу ордеров на продажу в текущий момент
   SORT_BY_SYMBOL_VOLUME,                                   // Сортировать по Volume - объему в последней сделке
   SORT_BY_SYMBOL_VOLUMEHIGH,                               // Сортировать по максимальному Volume за день
   SORT_BY_SYMBOL_VOLUMELOW,                                // Сортировать по минимальному Volume за день
   SORT_BY_SYMBOL_TIME,                                     // Сортировать по времени последней котировки
   SORT_BY_SYMBOL_DIGITS,                                   // Сортировать по количеству знаков после запятой
   SORT_BY_SYMBOL_DIGITS_LOT,                               // Сортировать по количеству знаков после запятой в лоте
   SORT_BY_SYMBOL_SPREAD,                                   // Сортировать по размеру спреда в пунктах
   SORT_BY_SYMBOL_SPREAD_FLOAT,                             // Сортировать по признаку плавающего спреда
   SORT_BY_SYMBOL_TICKS_BOOKDEPTH,                          // Сортировать по максимальному количеству показываемых заявок в стакане
   SORT_BY_SYMBOL_TRADE_CALC_MODE,                          // Сортировать по способу вычисления стоимости контракта (из перечисления ENUM_SYMBOL_CALC_MODE)
   SORT_BY_SYMBOL_TRADE_MODE,                               // Сортировать по типу исполнения ордеров (из перечисления ENUM_SYMBOL_TRADE_MODE)
   SORT_BY_SYMBOL_START_TIME,                               // Сортировать по дате начала торгов по инструменту (обычно используется для фьючерсов)
   SORT_BY_SYMBOL_EXPIRATION_TIME,                          // Сортировать по дате окончания торгов по инструменту (обычно используется для фьючерсов)
   SORT_BY_SYMBOL_TRADE_STOPS_LEVEL,                        // Сортировать по минимальному отступу в пунктах от текущей цены закрытия для установки Stop ордеров
   SORT_BY_SYMBOL_TRADE_FREEZE_LEVEL,                       // Сортировать по дистанции заморозки торговых операций (в пунктах)
   SORT_BY_SYMBOL_TRADE_EXEMODE,                            // Сортировать по режиму заключения сделок (из перечисления ENUM_SYMBOL_TRADE_EXECUTION)
   SORT_BY_SYMBOL_SWAP_MODE,                                // Сортировать по модели расчета свопа (из перечисления ENUM_SYMBOL_SWAP_MODE)
   SORT_BY_SYMBOL_SWAP_ROLLOVER3DAYS,                       // Сортировать по дню недели для начисления тройного свопа (из перечисления ENUM_DAY_OF_WEEK)
   SORT_BY_SYMBOL_MARGIN_HEDGED_USE_LEG,                    // Сортировать по режиму расчета хеджированной маржи по наибольшей стороне (Buy или Sell)
   SORT_BY_SYMBOL_EXPIRATION_MODE,                          // Сортировать по флагам разрешенных режимов истечения ордера
   SORT_BY_SYMBOL_FILLING_MODE,                             // Сортировать по флагам разрешенных режимов заливки ордера
   SORT_BY_SYMBOL_ORDER_MODE,                               // Сортировать по флагам разрешенных типов ордера
   SORT_BY_SYMBOL_ORDER_GTC_MODE,                           // Сортировать по сроку действия StopLoss и TakeProfit ордеров
   SORT_BY_SYMBOL_OPTION_MODE,                              // Сортировать по типу опциона (из перечисления ENUM_SYMBOL_OPTION_MODE)
   SORT_BY_SYMBOL_OPTION_RIGHT,                             // Сортировать по праву опциона (Call/Put) (из перечисления ENUM_SYMBOL_OPTION_RIGHT)
//--- Сортировка по вещественным свойствам
   SORT_BY_SYMBOL_BID = FIRST_SYM_DBL_PROP,                 // Сортировать по Bid
   SORT_BY_SYMBOL_BIDHIGH,                                  // Сортировать по максимальному Bid за день
   SORT_BY_SYMBOL_BIDLOW,                                   // Сортировать по минимальному Bid за день
   SORT_BY_SYMBOL_ASK,                                      // Сортировать по Ask
   SORT_BY_SYMBOL_ASKHIGH,                                  // Сортировать по максимальному Ask за день
   SORT_BY_SYMBOL_ASKLOW,                                   // Сортировать по минимальному Ask за день
   SORT_BY_SYMBOL_LAST,                                     // Сортировать по цене, по которой совершена последняя сделка
   SORT_BY_SYMBOL_LASTHIGH,                                 // Сортировать по максимальному Last за день
   SORT_BY_SYMBOL_LASTLOW,                                  // Сортировать по минимальному Last за день
   SORT_BY_SYMBOL_VOLUME_REAL,                              // Сортировать по Volume за день
   SORT_BY_SYMBOL_VOLUMEHIGH_REAL,                          // Сортировать по максимальному Volume за день
   SORT_BY_SYMBOL_VOLUMELOW_REAL,                           // Сортировать по минимальному Volume за день
   SORT_BY_SYMBOL_OPTION_STRIKE,                            // Сортировать по цене исполнения опциона
   SORT_BY_SYMBOL_POINT,                                    // Сортировать по значению одного пункта
   SORT_BY_SYMBOL_TRADE_TICK_VALUE,                         // Сортировать по значению SYMBOL_TRADE_TICK_VALUE_PROFIT
   SORT_BY_SYMBOL_TRADE_TICK_VALUE_PROFIT,                  // Сортировать по рассчитанной стоимости тика для прибыльной позиции
   SORT_BY_SYMBOL_TRADE_TICK_VALUE_LOSS,                    // Сортировать по рассчитанной стоимости тика для убыточной позиции
   SORT_BY_SYMBOL_TRADE_TICK_SIZE,                          // Сортировать по минимальному изменению цены
   SORT_BY_SYMBOL_TRADE_CONTRACT_SIZE,                      // Сортировать по размеру торгового контракта
   SORT_BY_SYMBOL_TRADE_ACCRUED_INTEREST,                   // Сортировать по накопленному купонному доходу
   SORT_BY_SYMBOL_TRADE_FACE_VALUE,                         // Сортировать по номинальной стоимости
   SORT_BY_SYMBOL_TRADE_LIQUIDITY_RATE,                     // Сортировать по коэффициенту ликвидности
   SORT_BY_SYMBOL_VOLUME_MIN,                               // Сортировать по минимальному объему для заключения сделки
   SORT_BY_SYMBOL_VOLUME_MAX,                               // Сортировать по максимальному объему для заключения сделки
   SORT_BY_SYMBOL_VOLUME_STEP,                              // Сортировать по минимальному шагу изменения объема для заключения сделки
   SORT_BY_SYMBOL_VOLUME_LIMIT,                             // Сортировать по максимально допустимому совокупному объему открытой позиции и отложенных ордеров в одном направлении
   SORT_BY_SYMBOL_SWAP_LONG,                                // Сортировать по значению свопа в покупку
   SORT_BY_SYMBOL_SWAP_SHORT,                               // Сортировать по значению свопа в продажу
   SORT_BY_SYMBOL_MARGIN_INITIAL,                           // Сортировать по начальной (инициирующей) марже
   SORT_BY_SYMBOL_MARGIN_MAINTENANCE,                       // Сортировать по поддерживающей марже по инструменту
   SORT_BY_SYMBOL_MARGIN_LONG_INITIAL,                      // Сортировать по коэффициенту взимания начальной маржи по длинным позициям
   SORT_BY_SYMBOL_MARGIN_BUY_STOP_INITIAL,                  // Сортировать по коэффициенту взимания начальной маржи по BuyStop ордерам
   SORT_BY_SYMBOL_MARGIN_BUY_LIMIT_INITIAL,                 // Сортировать по коэффициенту взимания начальной маржи по BuyLimit ордерам
   SORT_BY_SYMBOL_MARGIN_BUY_STOPLIMIT_INITIAL,             // Сортировать по коэффициенту взимания начальной маржи по BuyStopLimit ордерам
   SORT_BY_SYMBOL_MARGIN_LONG_MAINTENANCE,                  // Сортировать по коэффициенту взимания поддерживающей маржи по длинным позициям
   SORT_BY_SYMBOL_MARGIN_BUY_STOP_MAINTENANCE,              // Сортировать по коэффициенту взимания поддерживающей маржи по BuyStop ордерам
   SORT_BY_SYMBOL_MARGIN_BUY_LIMIT_MAINTENANCE,             // Сортировать по коэффициенту взимания поддерживающей маржи по BuyLimit ордерам
   SORT_BY_SYMBOL_MARGIN_BUY_STOPLIMIT_MAINTENANCE,         // Сортировать по коэффициенту взимания поддерживающей маржи по BuyStopLimit ордерам
   SORT_BY_SYMBOL_MARGIN_SHORT_INITIAL,                     // Сортировать по коэффициенту взимания начальной маржи по коротким позициям
   SORT_BY_SYMBOL_MARGIN_SELL_STOP_INITIAL,                 // Сортировать по коэффициенту взимания начальной маржи по SellStop ордерам
   SORT_BY_SYMBOL_MARGIN_SELL_LIMIT_INITIAL,                // Сортировать по коэффициенту взимания начальной маржи по SellLimit ордерам
   SORT_BY_SYMBOL_MARGIN_SELL_STOPLIMIT_INITIAL,            // Сортировать по коэффициенту взимания начальной маржи по SellStopLimit ордерам
   SORT_BY_SYMBOL_MARGIN_SHORT_MAINTENANCE,                 // Сортировать по коэффициенту взимания поддерживающей маржи по коротким позициям
   SORT_BY_SYMBOL_MARGIN_SELL_STOP_MAINTENANCE,             // Сортировать по коэффициенту взимания поддерживающей маржи по SellStop ордерам
   SORT_BY_SYMBOL_MARGIN_SELL_LIMIT_MAINTENANCE,            // Сортировать по коэффициенту взимания поддерживающей маржи по SellLimit ордерам
   SORT_BY_SYMBOL_MARGIN_SELL_STOPLIMIT_MAINTENANCE,        // Сортировать по коэффициенту взимания поддерживающей маржи по SellStopLimit ордерам
   SORT_BY_SYMBOL_SESSION_VOLUME,                           // Сортировать по суммарному объёму сделок в текущую сессию
   SORT_BY_SYMBOL_SESSION_TURNOVER,                         // Сортировать по суммарному обороту в текущую сессию
   SORT_BY_SYMBOL_SESSION_INTEREST,                         // Сортировать по суммарному объёму открытых позиций
   SORT_BY_SYMBOL_SESSION_BUY_ORDERS_VOLUME,                // Сортировать по общему объёму ордеров на покупку в текущий момент
   SORT_BY_SYMBOL_SESSION_SELL_ORDERS_VOLUME,               // Сортировать по общему объёму ордеров на продажу в текущий момент
   SORT_BY_SYMBOL_SESSION_OPEN,                             // Сортировать по цене открытия сессии
   SORT_BY_SYMBOL_SESSION_CLOSE,                            // Сортировать по цене закрытия сессии
   SORT_BY_SYMBOL_SESSION_AW,                               // Сортировать по средневзвешенной цене сессии
   SORT_BY_SYMBOL_SESSION_PRICE_SETTLEMENT,                 // Сортировать по цене поставки на текущую сессию
   SORT_BY_SYMBOL_SESSION_PRICE_LIMIT_MIN,                  // Сортировать по минимально допустимому значению цены на сессию 
   SORT_BY_SYMBOL_SESSION_PRICE_LIMIT_MAX,                  // Сортировать по максимально допустимому значению цены на сессию
   SORT_BY_SYMBOL_MARGIN_HEDGED,                            // Сортировать по размеру контракта или маржи для одного лота перекрытых позиций
//--- Сортировка по строковым свойствам
   SORT_BY_SYMBOL_NAME = FIRST_SYM_STR_PROP,                // Сортировать по имени символа
   SORT_BY_SYMBOL_BASIS,                                    // Сортировать по имени базового актива для производного инструмента
   SORT_BY_SYMBOL_CURRENCY_BASE,                            // Сортировать по базовой валюте инструмента
   SORT_BY_SYMBOL_CURRENCY_PROFIT,                          // Сортировать по валюте прибыли
   SORT_BY_SYMBOL_CURRENCY_MARGIN,                          // Сортировать по валюте, в которой вычисляются залоговые средства
   SORT_BY_SYMBOL_BANK,                                     // Сортировать по источнику текущей котировки
   SORT_BY_SYMBOL_DESCRIPTION,                              // Сортировать по строковому описанию символа
   SORT_BY_SYMBOL_FORMULA,                                  // Сортировать по формуле для построения цены пользовательского символа
   SORT_BY_SYMBOL_ISIN,                                     // Сортировать по имени торгового символа в системе международных идентификационных кодов ценных бумаг — ISIN
   SORT_BY_SYMBOL_PAGE,                                     // Сортировать по адресу интернет страницы с информацией по символу
   SORT_BY_SYMBOL_PATH,                                     // Сортировать по пути в дереве символов
   SORT_BY_SYMBOL_CATEGORY,                                 // Сортировать по категории символа
   SORT_BY_SYMBOL_EXCHANGE                                  // Сортировать по названию биржи или площадки, на которой торгуется символ
  };
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для работы с ресурсными данными программы                 |
//+------------------------------------------------------------------+
enum ENUM_FILE_TYPE
  {
   FILE_TYPE_WAV,                                           // wav-файл
   FILE_TYPE_BMP,                                           // bmp-файл
  };
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Данные для работы с торговыми классами                           |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|  Уровень логирования                                             |
//+------------------------------------------------------------------+
enum ENUM_LOG_LEVEL
  {
   LOG_LEVEL_NO_MSG,                                        // Логирование торговли отключено
   LOG_LEVEL_ERROR_MSG,                                     // Только торговые ошибки
   LOG_LEVEL_ALL_MSG                                        // Полное логирование
  };
//+------------------------------------------------------------------+
//| Поведение эксперта при обработке ошибок                          |
//+------------------------------------------------------------------+
enum ENUM_ERROR_HANDLING_BEHAVIOR
  {
   ERROR_HANDLING_BEHAVIOR_BREAK,                           // Прервать торговую попытку
   ERROR_HANDLING_BEHAVIOR_CORRECT,                         // Скорректировать ошибочные параметры
   ERROR_HANDLING_BEHAVIOR_PENDING_REQUEST,                 // Создать отложенный запрос
  };
//+------------------------------------------------------------------+
//| Флаги, указывающие на методы обработки ошибок торгового запроса  |
//+------------------------------------------------------------------+
enum ENUM_TRADE_REQUEST_ERR_FLAGS
  {
   TRADE_REQUEST_ERR_FLAG_NO_ERROR                 =  0,    // Нет ошибки
   TRADE_REQUEST_ERR_FLAG_FATAL_ERROR              =  1,    // Запретить торговлю для эксперта (фатальная ошибка) - выход
   TRADE_REQUEST_ERR_FLAG_INTERNAL_ERR             =  2,    // Внутренняя ошибка в библиотеке - выход
   TRADE_REQUEST_ERR_FLAG_ERROR_IN_LIST            =  4,    // Ошибка находится в списке - обработать (ENUM_ERROR_CODE_PROCESSING_METHOD)
   TRADE_REQUEST_ERR_FLAG_PRICE_ERROR              =  8,    // Ошибка в цене установки
   TRADE_REQUEST_ERR_FLAG_LIMIT_ERROR              =  16,   // Ошибка в цене установки limit-ордера
  };
//+------------------------------------------------------------------+
//| Методы обработки ошибок и кодов возврата сервера                 |
//+------------------------------------------------------------------+
enum ENUM_ERROR_CODE_PROCESSING_METHOD
  {
   ERROR_CODE_PROCESSING_METHOD_OK,                         // Ошибки нет
   ERROR_CODE_PROCESSING_METHOD_DISABLE,                    // Запретить торговлю экспертом
   ERROR_CODE_PROCESSING_METHOD_EXIT,                       // Выйти из торгового метода
   ERROR_CODE_PROCESSING_METHOD_CORRECT,                    // Скорректировать параметры торгового запроса и повторить
   ERROR_CODE_PROCESSING_METHOD_REFRESH,                    // Обновить данные и повторить
   ERROR_CODE_PROCESSING_METHOD_PENDING,                    // Создать отложенный запрос
   ERROR_CODE_PROCESSING_METHOD_WAIT,                       // Подождать и повторить
  };
//+------------------------------------------------------------------+
//| Типы проводимых операций                                         |
//+------------------------------------------------------------------+
enum ENUM_ACTION_TYPE
  {
   ACTION_TYPE_BUY               =  ORDER_TYPE_BUY,               // Открытие Buy
   ACTION_TYPE_SELL              =  ORDER_TYPE_SELL,              // Открытие Sell
   ACTION_TYPE_BUY_LIMIT         =  ORDER_TYPE_BUY_LIMIT,         // Установка BuyLimit
   ACTION_TYPE_SELL_LIMIT        =  ORDER_TYPE_SELL_LIMIT,        // Установка SellLimit
   ACTION_TYPE_BUY_STOP          =  ORDER_TYPE_BUY_STOP,          // Установка BuyStop
   ACTION_TYPE_SELL_STOP         =  ORDER_TYPE_SELL_STOP,         // Установка SellStop
   ACTION_TYPE_BUY_STOP_LIMIT    =  ORDER_TYPE_BUY_STOP_LIMIT,    // Установка BuyStopLimit
   ACTION_TYPE_SELL_STOP_LIMIT   =  ORDER_TYPE_SELL_STOP_LIMIT,   // Установка SellStopLimit
   ACTION_TYPE_CLOSE_BY          =  ORDER_TYPE_CLOSE_BY,          // Закрытие позиции встречной
   ACTION_TYPE_CLOSE             =  ACTION_TYPE_CLOSE_BY+3,       // Закрытие/удаление
   ACTION_TYPE_MODIFY            =  ACTION_TYPE_CLOSE_BY+4,       // Модификация
  };
//+------------------------------------------------------------------+
//| Режим установки звуков                                           |
//+------------------------------------------------------------------+
enum ENUM_MODE_SET_SOUND
  {
   MODE_SET_SOUND_OPEN,                                     // Режим установки звука открытия/установки
   MODE_SET_SOUND_CLOSE,                                    // Режим установки звука закрытия/удаления
   MODE_SET_SOUND_MODIFY_SL,                                // Режим установки звука модификации StopLoss
   MODE_SET_SOUND_MODIFY_TP,                                // Режим установки звука модификации TakeProfit
   MODE_SET_SOUND_MODIFY_PRICE,                             // Режим установки звука модификации цены установки
   MODE_SET_SOUND_ERROR_OPEN,                               // Режим установки звука ошибки открытия/установки
   MODE_SET_SOUND_ERROR_CLOSE,                              // Режим установки звука ошибки закрытия/удаления
   MODE_SET_SOUND_ERROR_MODIFY_SL,                          // Режим установки звука ошибки модификации StopLoss
   MODE_SET_SOUND_ERROR_MODIFY_TP,                          // Режим установки звука ошибки модификации TakeProfit
   MODE_SET_SOUND_ERROR_MODIFY_PRICE,                       // Режим установки звука ошибки модификации цены установки
  };
//+------------------------------------------------------------------+
