Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXX): Отложенные торговые запросы - управление объектами-запросами"

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXX): Отложенные торговые запросы - управление объектами-запросами:

В прошлой статье создали классы объектов отложенных запросов, соответствующие общей концепции объектов библиотеки. Сегодня займёмся классом, позволяющем управлять объектами отложенных запросов.

Изначально я хотел сделать независимый класс для управления отложенными запросами, в котором будут сконцентрированы все методы для работы с ними. Но вышло так, что основной торговый класс CTrading библиотеки и создаваемый новый класс управления отложенными запросами, настолько имеют тесные связи друг с другом, что проще оказалось сделать новый класс управления объектами-отложенными запросами наследником основного торгового класса.

Вся работа по контролю за объектами отложенных запросов производится в таймере класса, поэтому мы сделаем таймер основного торгового класса виртуальным, и, соответственно, виртуальным будет и таймер класса управления отложенными запросами. Тогда всё, что относится к таймеру основного торгового класса, мы будем прописывать в его таймере, а всё, что должно работать в классе управления объектами отложенных запросов, будем прописывать в таймере этого класса.

Помимо класса управления объектами отложенных запросов мы создадим маленький класс для организации паузы — чтобы не использовать в будущем функцию Sleep(), которая останавливает выполнение программы на время задержки, и объект-пауза позволит нам не зависеть от тиков, чтобы в выходные можно было тестировать код, требующий какого-либо ожидания — пауза будет контролироваться в таймере.

Автор: Artyom Trishkin

 

Добрый день,

Спасибо за проделанную работу

Маленькая просьба: я честно шел по статьям (прежде всего для повышения своих знаний), но в связи с большой длительностью цикла статей и необходимостью заниматься другими проектами приходится возвращаться и пересматривать прошлые статьи для понимания изменений. Проект уже вырос и в связи с этим - если возможно, в одной из будущих статей вернитесь на время назад и проиллюстрируйте получившуюся на сегодня структуру библиотеки.

С уважением и заранее спасибо

 
Олег Миронов:

Добрый день,

Спасибо за проделанную работу

Маленькая просьба: я честно шел по статьям (прежде всего для повышения своих знаний), но в связи с большой длительностью цикла статей и необходимостью заниматься другими проектами приходится возвращаться и пересматривать прошлые статьи для понимания изменений. Проект уже вырос и в связи с этим - если возможно, в одной из будущих статей вернитесь на время назад и проиллюстрируйте получившуюся на сегодня структуру библиотеки.

С уважением и заранее спасибо

Я попробую как-то придумать как проиллюстрировать достаточно простую структуру. Она очень проста, и в то же время - имеет много связей между разными классами библиотеки.

Всё, что создаётся - всё аккумулируется в CEngine - из этого объекта на данный момент есть доступ ко всем классам библиотеки (а будет ещё одна точка доступа - через класс пользовательских функций, но уже к завершению). Но пока есть доступ только к тем методам всех созданных классов, которые необходимы на данный момент.
Сами же классы используют указатели друг на друга чтобы иметь возможность использовать данные одного класса в другом. И если начать показывать все эти взаимосвязи - ещё больше можно запутаться. А если показывать ещё и все базовые объекты, наследниками которых являются многие классы и списки в составе классов, да ещё и отображать где они все запускаются в таймере - тут вообще получится каша.
Поэтому гораздо проще просто представить структуру работы одного класса, а все остальные - идентичны такой структуре. А она очень проста, но совершенно недостаточна для отображения структуры всей библиотеки и её взаимосвязей.
И ещё - библиотека постепенно расширяется, но опять-таки в рамках заявленной в самом начале концепции построения объектов библиотеки. Поэтому достаточно один раз понять её устройство, а далее - совсем просто окажется.
Но я конечно же буду обдумывать (да уже обдумываю) как проще и доступнее всё показать.

 

Артём, добрый день. Ваша работа бесценна! Благодарю за возможность развиваться и время, которое вы потратили, чтобы такие, как я, могли его качественно экономить.

Я с предложением: может опубликуем репозиторий с вашей либой на гитхаб? Что это даст:

  1. Ну, конечно, систему контроля версий.
  2. Возможность участвовать в развитии библиотеки DoEasy всем желающим.
  3. Возможность быстрого поиска по коду и доступ к самой актуальной версии в любое время.

Например, в процессе изучения библиотеки я нашел и исправил несколько ошибок, а также оптимизировал часть кода. И в таком случае я мог бы теперь отправить вам специальный запрос в рамках системы контроля версий, по которому вы приняли бы решение: принимать в актуальную версию библиотеки мои доработки или нет.

Вы делаете большое дело, и мы вместе (таких желающих, как я немало) могли бы вложить собственное время ради общего блага с целью доработки DoEasy. Готов помочь в реализации предложенного.

 
Сергей Романов:

Артём, добрый день. Ваша работа бесценна! Благодарю за возможность развиваться и время, которое вы потратили, чтобы такие, как я, могли его качественно экономить.

Я с предложением: может опубликуем репозиторий с вашей либой на гитхаб? Что это даст:

  1. Ну, конечно, систему контроля версий.
  2. Возможность участвовать в развитии библиотеки DoEasy всем желающим.
  3. Возможность быстрого поиска по коду и доступ к самой актуальной версии в любое время.

Например, в процессе изучения библиотеки я нашел и исправил несколько ошибок, а также оптимизировал часть кода. И в таком случае я мог бы теперь отправить вам специальный запрос в рамках системы контроля версий, по которому вы приняли бы решение: принимать в актуальную версию библиотеки мои доработки или нет.

Вы делаете большое дело, и мы вместе (таких желающих, как я немало) могли бы вложить собственное время ради общего блага с целью доработки DoEasy. Готов помочь в реализации предложенного.

Здравствуйте. Спасибо за отзыв.

В данный момент рано говорить и думать о репозитории - библиотека находится в активной разработке, и пока я не создам и не опубликую всё задуманное, я не хочу отступать от намеченного плана. А многочисленные её исправления и доработки сторонними пользователями, лишь будут отвлекать автора от следования намеченным планам.

А вот про найденные ошибки и способы их устранения лучше сообщать прямо в обсуждениях тех статей, где были найдены ошибки - это как раз поможет развитию библиотеки и устранению найденных ошибок.

 

При компилировании файла TradingControl.mqh выпадают две ошибки:

'CTrading::OpenPosition<double,d…' - cannot access private member function    TradingControl.mqh    328    21
   see declaration of 'CTrading::OpenPosition<double,double>'    Trading.mqh    146    24
'CTrading::PlaceOrder<double,dou…' - cannot access private member function    TradingControl.mqh    344    18
   see declaration of 'CTrading::PlaceOrder<double,double,double,double>'    Trading.mqh    156    26

Эти методы находятся в приватной секции класса CTrading. Ошибки уходят, если их перенести в публичную секцию этого класса. Но в прикреплённых файлах (а как я понимаю, они рабочие) эти методы тоже в приватной секции класса CTrading, и тоже при компилировании файла TradingControl.mqh выпадают эти две ошибки.

Артём, а как же тогда у вас работает? Либо здесь ошибка, либо я чего-то недопонимаю.

P.S. Я скачал прикреплённые файлы к следующей части - 31, и там тоже эти методы находятся в приватной секции класса CTrading и тоже выпадают эти две ошибки при компилировании.

 
MQL_User #:

При компилировании файла TradingControl.mqh выпадают две ошибки:

'CTrading::OpenPosition<double,d…' - cannot access private member function    TradingControl.mqh    328    21
   see declaration of 'CTrading::OpenPosition<double,double>'    Trading.mqh    146    24
'CTrading::PlaceOrder<double,dou…' - cannot access private member function    TradingControl.mqh    344    18
   see declaration of 'CTrading::PlaceOrder<double,double,double,double>'    Trading.mqh    156    26

Эти методы находятся в приватной секции класса CTrading. Ошибки уходят, если их перенести в публичную секцию этого класса. Но в прикреплённых файлах (а как я понимаю, они рабочие) эти методы тоже в приватной секции класса CTrading, и тоже при компилировании файла TradingControl.mqh выпадают эти две ошибки.

Артём, а как же тогда у вас работает? Либо здесь ошибка, либо я чего-то недопонимаю.

P.S. Я скачал прикреплённые файлы к следующей части - 31, и там тоже эти методы находятся в приватной секции класса CTrading и тоже выпадают эти две ошибки при компилировании.

Это стало так после недавнего обновления. Попробуйте их в защищённой (protected) секции сделать - чтобы не было к ним доступа извне. Публичные - слишком нехорошо

 
Artyom Trishkin #:

Это стало так после недавнего обновления. Попробуйте их в защищённой (protected) секции сделать - чтобы не было к ним доступа извне. Публичные - слишком нехорошо

Хорошо, так и сделаю.

И ещё есть вопрос: есть методы в public-секции ClosePosition, PlaceBuyStop, PlaceBuyLimit, и т.д. Для них не критично, что они находятся в public-секции?

 
MQL_User #:

Хорошо, так и сделаю.

И ещё есть вопрос: есть методы в public-секции ClosePosition, PlaceBuyStop, PlaceBuyLimit, и т.д. Для них не критично, что они находятся в public-секции?

Она там и должны быть - это одни из методов для работы с ордерами и позициями

Причина обращения: