Стратегия Color Schaff JJRSX MMRec Duplex
Обзор
Эта стратегия представляет собой порт MetaTrader-советника Exp_ColorSchaffJJRSXTrendCycle_MMRec_Duplex на платформу StockSharp. Исходный робот сочетает два осциллятора Schaff Trend Cycle на основе JJRSX и модуль MMRec (Money Management Recalculation), уменьшающий объём после серии убыточных сделок. В C# версии сохранена дуальная структура (лонг/шорт) и гибкие настройки управления риском, а недоступный индикатор JJRSX заменён надёжной аппроксимацией на базе встроенных инструментов.
Торговая логика
- Рассчитываются два независимых осциллятора на выбранных таймфреймах: первый управляет длинными позициями, второй — короткими. Каждый осциллятор использует «быстрые» и «медленные» RSX-подобные линии, которые сглаживаются и нормализуются по методике Schaff Trend Cycle, формируя значения в диапазоне [-100; 100].
- Лонг открывается, когда «длинный» осциллятор пересекает уровень 0 сверху вниз (
previous > 0,current <= 0). В оригинале такие моменты трактуются как разворот в пользу покупателей. Закрытие длинной позиции происходит, если значение индикатора на один бар назад отрицательное. - Шорт открывается при пересечении нулевой линии снизу вверх (
previous < 0,current >= 0). Закрытие шорта выполняется, когда значение индикатора на один бар назад становится положительным. - Параметр
SignalBarвоспроизводит MQL-поведение, позволяя оценивать сигналы по уже закрывшимся барам. Например,SignalBar = 1анализирует предыдущую свечу и свечу перед ней. Для имитации вызововCopyBufferстратегия ведёт скользящую историю значений индикатора.
Управление капиталом (MMRec)
- Для длинных и коротких сделок поддерживаются отдельные блоки MMRec. Базовый объём равен
Strategy.Volume * MM, гдеMM— нормальный множитель (LongMm/ShortMm). - После закрытия каждой сделки стратегия фиксирует результат (по ценам закрытия свечей, аналогично тому, как EA анализирует историю через
HistorySelect). - Если среди последних
TotalTriggerсделок число убыточных достигаетLossTrigger, следующий ордер для этого направления использует пониженный множитель (SmallMm). Когда условие перестаёт выполняться, возвращается основной множитель. - При развороте позиции (лонг→шорт или шорт→лонг) сперва рассчитывается итог предыдущей сделки и обновляются счётчики убытков, затем определяется объём нового ордера.
Аппроксимация индикатора
Оригинальный советник опирается на кастомный индикатор ColorSchaffJJRSXTrendCycle, построенный на JJRSX и алгоритмах Юрика. В StockSharp этих компонентов нет, поэтому реализован ColorSchaffJjrsxTrendCycleIndicator:
- Лёгкий индикатор
SimpleRsiвычисляет базовую RSX-динамику с экспоненциальным сглаживанием по заданному периоду. - Разность «быстрой» и «медленной» RSI-серий формирует MACD-подобный поток, который нормализуется в скользящем окне и дважды сглаживается с коэффициентом 0.5, имитируя логику Schaff Trend Cycle.
- Индикатор поддерживает все типы цен (close, open, high, low, median, typical, weighted и т.д.), а также параметры цикла и периодов, что позволяет использовать оптимизацию аналогично оригиналу.
Параметры
| Группа | Параметр | Описание |
|---|---|---|
| Long | LongCandleType |
Тип свечей/таймфрейм для «длинного» индикатора. |
| Long | LongTotalTrigger |
Количество последних длинных сделок, участвующих в анализе MMRec. |
| Long | LongLossTrigger |
Число убытков в окне TotalTrigger, активирующее пониженный множитель. |
| Long | LongSmallMm |
Пониженный множитель объёма после серии убытков. |
| Long | LongMm |
Базовый множитель объёма для лонгов. |
| Long | LongEnableOpen |
Разрешение на открытие длинных позиций. |
| Long | LongEnableClose |
Разрешение на закрытие длинных позиций. |
| Long | LongFastLength |
Аппроксимация «быстрого» периода JJRSX. |
| Long | LongSlowLength |
Аппроксимация «медленного» периода JJRSX. |
| Long | LongSmooth |
Длина экспоненциального сглаживания до нормализации. |
| Long | LongCycleLength |
Размер окна для нормализации min/max. |
| Long | LongSignalBar |
Сдвиг по истории при анализе сигналов. |
| Long | LongAppliedPrice |
Тип цены для индикатора. |
| Short | ShortCandleType |
Тип свечей/таймфрейм для «короткого» индикатора. |
| Short | ShortTotalTrigger |
Количество последних коротких сделок в анализе MMRec. |
| Short | ShortLossTrigger |
Число убытков, активирующее пониженный множитель для шортов. |
| Short | ShortSmallMm |
Пониженный множитель объёма после серии убыточных шортов. |
| Short | ShortMm |
Базовый множитель объёма для шортов. |
| Short | ShortEnableOpen |
Разрешение на открытие коротких позиций. |
| Short | ShortEnableClose |
Разрешение на закрытие коротких позиций. |
| Short | ShortFastLength |
Аппроксимация «быстрого» периода JJRSX для шортов. |
| Short | ShortSlowLength |
Аппроксимация «медленного» периода JJRSX для шортов. |
| Short | ShortSmooth |
Сглаживание перед нормализацией для шортов. |
| Short | ShortCycleLength |
Окно min/max для короткой стороны. |
| Short | ShortSignalBar |
Сдвиг по истории при анализе коротких сигналов. |
| Short | ShortAppliedPrice |
Тип цены для «короткого» индикатора. |
Особенности реализации
- Используются высокоуровневые подписки на свечи и индикаторы StockSharp без прямого доступа к буферам, что соответствует правилам конверсии.
- Параметры
StopLoss/TakeProfitиз MQL не перенесены: они заданы в пунктах, поэтому в StockSharp их стоит реализовать черезStartProtectionлибо внешние модули риска. - Результаты сделок оцениваются по ценам закрытия свечей, что делает поведение детерминированным и близким к MQL-реализации, которая анализирует историю сделок.
- Кастомный индикатор публикует флаг
IsFormed, поэтому торговые решения принимаются только после накопления достаточного количества данных.
Предупреждение
Несмотря на точное воспроизведение логики, результаты могут отличаться из-за других поставщиков данных, особенностей исполнения и используемой аппроксимации JJRSX. Перед реальной торговлей протестируйте стратегию на демо-счёте.