Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 28): Добавляем менеджер закрытия позиций"

 

Опубликована статья Разрабатываем мультивалютный советник (Часть 28): Добавляем менеджер закрытия позиций:

При параллельной работе многих стратегий может возникнуть желание время от времени закрывать все открытые позиции и начинать работу стратегий заново. Уже написанный код позволяет реализовать такое поведение только вместе с ручными манипуляциями. Попробуем автоматизировать эту часть.

В Части 12 мы добавили в мультивалютного советника модуль риск-менеджера для ограничения дневной и общей просадки. Он не увеличивает прибыль, но критически важен для защиты капитала в неблагоприятных условиях. Основан на правилах проп-трейдингов, с возможностью гибкой настройки: просадка в валюте, в процентах от баланса или от начала дня.

Модуль реализован как класс CVirtualRiskManager с методами отслеживания баланса, прибыли и проверки ограничений. Также предусмотрена функция фиксации прибыли — по достижении цели все позиции закрываются и торговля останавливается.

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

Для перезапуска торговых стратегий при достижении заданной прибыли рассматривались два варианта:

  1. расширить текущий риск-менеджер,

  2. создать отдельный модуль.

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

Также риск-менеджер создаёт дополнительную нагрузку при тестировании, поэтому новый функционал лучше вынести в отдельный модуль — его можно будет использовать даже без запущенного риск-менеджера.

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

Автор: Yuriy Bykov