Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXX): Отложенные торговые запросы - управление объектами-запросами"
Добрый день,
Спасибо за проделанную работу
Маленькая просьба: я честно шел по статьям (прежде всего для повышения своих знаний), но в связи с большой длительностью цикла статей и необходимостью заниматься другими проектами приходится возвращаться и пересматривать прошлые статьи для понимания изменений. Проект уже вырос и в связи с этим - если возможно, в одной из будущих статей вернитесь на время назад и проиллюстрируйте получившуюся на сегодня структуру библиотеки.
С уважением и заранее спасибо
Добрый день,
Спасибо за проделанную работу
Маленькая просьба: я честно шел по статьям (прежде всего для повышения своих знаний), но в связи с большой длительностью цикла статей и необходимостью заниматься другими проектами приходится возвращаться и пересматривать прошлые статьи для понимания изменений. Проект уже вырос и в связи с этим - если возможно, в одной из будущих статей вернитесь на время назад и проиллюстрируйте получившуюся на сегодня структуру библиотеки.
С уважением и заранее спасибо
Я попробую как-то придумать как проиллюстрировать достаточно простую структуру. Она очень проста, и в то же время - имеет много связей между разными классами библиотеки.
Всё, что создаётся - всё аккумулируется в CEngine - из этого объекта на данный момент есть доступ ко всем классам библиотеки (а будет ещё одна
точка доступа - через класс пользовательских функций, но уже к завершению). Но пока есть доступ только к тем методам всех созданных
классов, которые необходимы на данный момент.
Сами же классы используют указатели друг на друга чтобы иметь возможность использовать данные одного класса в другом. И если начать
показывать все эти взаимосвязи - ещё больше можно запутаться. А если показывать ещё и все базовые объекты, наследниками которых являются
многие классы и списки в составе классов, да ещё и отображать где они все запускаются в таймере - тут вообще получится каша.
Поэтому гораздо проще просто представить структуру работы одного класса, а все остальные - идентичны такой структуре. А она очень проста, но
совершенно недостаточна для отображения структуры всей библиотеки и её взаимосвязей.
И ещё - библиотека постепенно расширяется, но опять-таки в рамках заявленной в самом начале концепции построения
объектов библиотеки. Поэтому достаточно один раз понять её устройство, а далее - совсем просто окажется.
Но
я конечно же буду обдумывать (да уже обдумываю) как проще и доступнее всё показать.
Артём, добрый день. Ваша работа бесценна! Благодарю за возможность развиваться и время, которое вы потратили, чтобы такие, как я, могли его качественно экономить.
Я с предложением: может опубликуем репозиторий с вашей либой на гитхаб? Что это даст:
- Ну, конечно, систему контроля версий.
- Возможность участвовать в развитии библиотеки DoEasy всем желающим.
- Возможность быстрого поиска по коду и доступ к самой актуальной версии в любое время.
Например, в процессе изучения библиотеки я нашел и исправил несколько ошибок, а также оптимизировал часть кода. И в таком случае я мог бы теперь отправить вам специальный запрос в рамках системы контроля версий, по которому вы приняли бы решение: принимать в актуальную версию библиотеки мои доработки или нет.
Вы делаете большое дело, и мы вместе (таких желающих, как я немало) могли бы вложить собственное время ради общего блага с целью доработки DoEasy. Готов помочь в реализации предложенного.
Артём, добрый день. Ваша работа бесценна! Благодарю за возможность развиваться и время, которое вы потратили, чтобы такие, как я, могли его качественно экономить.
Я с предложением: может опубликуем репозиторий с вашей либой на гитхаб? Что это даст:
- Ну, конечно, систему контроля версий.
- Возможность участвовать в развитии библиотеки DoEasy всем желающим.
- Возможность быстрого поиска по коду и доступ к самой актуальной версии в любое время.
Например, в процессе изучения библиотеки я нашел и исправил несколько ошибок, а также оптимизировал часть кода. И в таком случае я мог бы теперь отправить вам специальный запрос в рамках системы контроля версий, по которому вы приняли бы решение: принимать в актуальную версию библиотеки мои доработки или нет.
Вы делаете большое дело, и мы вместе (таких желающих, как я немало) могли бы вложить собственное время ради общего блага с целью доработки 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 и тоже выпадают эти две ошибки при компилировании.
При компилировании файла 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) секции сделать - чтобы не было к ним доступа извне. Публичные - слишком нехорошо
Это стало так после недавнего обновления. Попробуйте их в защищённой (protected) секции сделать - чтобы не было к ним доступа извне. Публичные - слишком нехорошо
Хорошо, так и сделаю.
И ещё есть вопрос: есть методы в public-секции ClosePosition, PlaceBuyStop, PlaceBuyLimit, и т.д. Для них не критично, что они находятся в public-секции?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXX): Отложенные торговые запросы - управление объектами-запросами:
В прошлой статье создали классы объектов отложенных запросов, соответствующие общей концепции объектов библиотеки. Сегодня займёмся классом, позволяющем управлять объектами отложенных запросов.
Изначально я хотел сделать независимый класс для управления отложенными запросами, в котором будут сконцентрированы все методы для работы с ними. Но вышло так, что основной торговый класс CTrading библиотеки и создаваемый новый класс управления отложенными запросами, настолько имеют тесные связи друг с другом, что проще оказалось сделать новый класс управления объектами-отложенными запросами наследником основного торгового класса.
Вся работа по контролю за объектами отложенных запросов производится в таймере класса, поэтому мы сделаем таймер основного торгового класса виртуальным, и, соответственно, виртуальным будет и таймер класса управления отложенными запросами. Тогда всё, что относится к таймеру основного торгового класса, мы будем прописывать в его таймере, а всё, что должно работать в классе управления объектами отложенных запросов, будем прописывать в таймере этого класса.
Помимо класса управления объектами отложенных запросов мы создадим маленький класс для организации паузы — чтобы не использовать в будущем функцию Sleep(), которая останавливает выполнение программы на время задержки, и объект-пауза позволит нам не зависеть от тиков, чтобы в выходные можно было тестировать код, требующий какого-либо ожидания — пауза будет контролироваться в таймере.
Автор: Artyom Trishkin