Стратегия XDeMarker Histogram Vol
Стратегия повторяет оригинального советника MetaTrader Exp_XDeMarker_Histogram_Vol и переносит его на высокоуровневый API StockSharp. Осциллятор DeMarker превращается в объёмно-взвешенную гистограмму, обе серии сглаживаются выбранным типом скользящей средней, а торговые решения принимаются при переходах гистограммы между заданными зонами.
Логика симметричная: длинные позиции открываются при входе гистограммы в бычьи зоны, короткие — при перемещении в медвежьи. При противоположном сигнале активная позиция закрывается и, при разрешении, выполняется разворот.
Концепция
- DeMarker, взвешенный объёмом
- DeMarker рассчитывается с заданным периодом.
- Значение нормируется в диапазон
[-50; +50]и умножается на выбранный объём свечи. - Полученная серия и сам объём сглаживаются одной и той же скользящей средней. Доступны только четыре типа (простая, экспоненциальная, сглаженная, взвешенная), так как именно они реализованы в StockSharp.
- Динамические уровни
- Четыре коэффициента (
HighLevel1,HighLevel2,LowLevel1,LowLevel2) задают пороги для бычьей и медвежьей зон. - Пороговые значения умножаются на сглаженный объём, поэтому при росте активности допустимый диапазон автоматически расширяется.
- Четыре коэффициента (
- Машина состояний
- Каждая закрывшаяся свеча попадает в одно из пяти состояний:
0(крайне бычье),1(бычье),2(нейтральное),3(медвежье),4(крайне медвежье). - Сигнал появляется, когда состояние последней закрытой свечи (сдвиг задаётся параметром
SignalBar) по сравнению с предыдущей указывает на вход в новую область.
- Каждая закрывшаяся свеча попадает в одно из пяти состояний:
Параметры
| Параметр | Описание |
|---|---|
CandleType |
Основной таймфрейм. По умолчанию — 2 часа, как в исходном советнике. |
DeMarkerPeriod |
Период осциллятора DeMarker. |
HighLevel1 / HighLevel2 |
Положительные множители для первой и второй бычьих зон. |
LowLevel1 / LowLevel2 |
Отрицательные множители для первой и второй медвежьих зон. |
Smoothing |
Тип скользящей средней для гистограммы и объёма: Simple, Exponential, Smoothed, Weighted. |
SmoothingLength |
Длина применяемых скользящих средних. |
SignalBar |
Количество закрытых баров, используемых при сравнении. Значение 1 означает использование последней закрытой свечи. |
VolumeType |
Источник объёма. Оба варианта сводятся к объёму свечи, так как StockSharp не всегда предоставляет количество тиков. |
EnableLongEntries / EnableShortEntries |
Разрешают открытие длинных и коротких позиций соответственно. |
EnableLongExits / EnableShortExits |
Разрешают закрытие существующих позиций по обратным сигналам. |
Сигналы и управление позицией
- Вход в лонг: рассматриваемая свеча переходит в состояние
1или0, а предыдущая имела номер больше1. При наличии короткой позиции она сначала закрывается. - Вход в шорт: рассматриваемая свеча переходит в состояние
3или4, а предыдущая имела номер меньше3(или4). При наличии длинной позиции она закрывается. - Выход: выполняется при противоположном сигнале, если разрешено закрытие для данного направления. Используется
ClosePosition()для фиксации позиции перед разворотом. - Размер позиции: используется стандартное свойство
Strategy.Volume. В оригинале две позиции с разными «магическими» номерами — здесь логика упрощена.
Особенности реализации
- Обрабатываются только завершённые свечи. Подписка осуществляется через
SubscribeCandles().WhenNew(ProcessCandle). - Реализация DeMarker поддерживает скользящую сумму DeMax/DeMin и ждёт накопления достаточного количества баров, чтобы воспроизвести расчёт MetaTrader.
- При отсутствии объёма гистограмма становится нулевой, поскольку и взвешенный осциллятор, и уровни равны нулю.
- Расширенные режимы сглаживания из исходного индикатора (JJMA, JurX, ParMA, T3, VIDYA, AMA) не реализованы. Выбирайте доступный вариант, наиболее близкий к желаемому поведению.
- Буфер состояний хранит минимум значений (актуальное, предыдущее и дополнительный слот) и повторяет поведение
CopyBufferиз MQL5.
Рекомендации по использованию
- Перед запуском в Designer или Runner настройте таймфрейм и объём. При необходимости проведите оптимизацию параметров.
- Оптимизируйте
DeMarkerPeriod,SmoothingLengthи пороги совместно: небольшие сдвиги уровней заметно меняют частоту сделок. - Эффективность зависит от качества данных по объёму. Используйте провайдеров, предоставляющих корректные значения по свече.
- При необходимости стоп-лоссов или тейк-профитов подключайте внешние модули управления риском — в исходном советнике их не было, и перенос сохраняет эту особенность.