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

 

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

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

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

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


Автор: Yuriy Bykov

 
Классную вы работу проводите! Спасибо за статью.
 
Спасибо за отзыв! Будем стараться и дальше держать планку. 
 

Спасибо за интересную статью! Классная работа.

Если позволите, хотел уточнить пару моментов логического и технического характера:

Правильно я понимаю, что при контроле рисков в методе DailyLoss() не учитывается риск просадки по еквити?

Почему при работе с массивами используете именно макросы? 

Спасибо.

 

Спасибо за отзыв!

Правильно я понимаю, что при контроле рисков в методе DailyLoss() не учитывается риск просадки по еквити?

Наверное, неправильно. Метод DailyLoss() не производит оценку насколько большая случилась просадка. Он только переводит заданный максимальный уровень просадки в валюту счета из процентов при необходимости. Само сравнение происходит в методе CheckDailyLimit():

if(m_dailyProfit < -DailyLoss() && CMoney::DepoPart() > 0) { ... }

Значение m_dailyProfit обновляется на каждом тике и вычисляется как разность текущих средств (эквити) и дневного уровня (максимума из значения баланса и средств на начало дневного периода):

m_dailyProfit = m_equity - m_baseDailyLevel;

Поэтому вроде бы просадка по средствам как раз и учитывается. Или я неправильно понял вопрос?


Почему при работе с массивами используете именно макросы?

Для компактности кода. Еще макросы позволяют передать себе в качестве параметра блок кода, а при реализации подобных операций через функции передавать функциям блок кода как параметр нельзя.

 
Yuriy Bykov #:

Спасибо за отзыв!

Наверное, неправильно. Метод DailyLoss() не производит оценку насколько большая случилась просадка. Он только переводит заданный максимальный уровень просадки в валюту счета из процентов при необходимости. Само сравнение происходит в методе CheckDailyLimit():

Значение m_dailyProfit обновляется на каждом тике и вычисляется как разность текущих средств (эквити) и дневного уровня (максимума из значения баланса и средств на начало дневного периода):

Поэтому вроде бы просадка по средствам как раз и учитывается. Или я неправильно понял вопрос?


Для компактности кода. Еще макросы позволяют передать себе в качестве параметра блок кода, а при реализации подобных операций через функции передавать функциям блок кода как параметр нельзя.

Спасибо большое за расширенный ответ )) Будем ждать новых статей! )

 

Уважаемый Юрий,

Я пытаюсь скомпилировать код, но получаю следующую ошибку в VirtualRiskManager.mqh:

"Changed - undeclared identifier" в строке CVirtualReceiver::Instance().Changed(); // Уведомление получателя об изменениях

Я проверил код несколько раз, но ничего не вышло. Не могли бы вы объяснить мне, что я упускаю?

С нетерпением жду следующей статьи из этой серии.

Спасибо

 

Здравствуйте!

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

Файлы:
MQL5.zip  80 kb
 
Yuriy Bykov проекта. Я прикреплю его к этой статье.
Большое спасибо