Обсуждение статьи "Машинное обучение в условиях ограничений (Часть 2): Калибровка размера позиции по оставшемуся бюджету допустимой просадки"

Опубликована статья Машинное обучение в условиях ограничений (Часть 2): Калибровка размера позиции по оставшемуся бюджету допустимой просадки:

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

В первой части этой серии была рассмотрена фундаментальная проблема абстракции. В нём жёстко заданные в коде фиксированные константы правил FundedNext были заменены явно заданным набором правил PropFirmRuleSet, а PropFirmAccountState был переработан для динамического расчёта оставшегося бюджета риска (risk_budget_pct). После этого рефакторинга система сможет корректно интерпретировать дневной и общий лимиты убытка для любой загруженной программы — будь то программа FundedNext с фиксированным дневным лимитом 5 %, программа с динамической просадкой и переменным масштабированием лимитов или программа с индивидуальной структурой ограничений. Однако, как отмечалось в заключении первой части, вычисления бесполезны, если их результаты нигде не используются. Объект состояния счёта точно знает, какой запас допустимых потерь ещё остаётся, но механизм расчёта размера позиции по-прежнему опирался на старые, жёстко заданные в коде правила.

В этой статье данный пробел устраняется за счёт реализации компонента-потребителя этих данных — WParamCalibrator. Данный калибратор преобразует абстрактный параметр risk_budget_pct в конкретный параметр w сигмоиды. Затем этот параметр w передаётся в модуль расчёта размера позиции PropFirmAwareSizer, который плавно изменяет размер каждой новой позиции от полного до нуля по мере истощения дневного бюджета. Эта архитектура намеренно построена по модульному принципу: калибратору неважно, используется ли в торговой программе дневной лимит, общий лимит или скользящая максимальная просадка. Он получает только сводную долю оставшегося бюджета риска. Такое разделение ответственности означает, что при внедрении в будущем нового набора правил проп-трейдинговой компании логика расчёта размера позиции останется неизменной.

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


Автор: Patrick Murimi Njoroge