NTK_07 — сеточная стратегия
Общие сведения
NTK_07 — симметричная сетка из отложенных ордеров, первоначально реализованная под MetaTrader 4. Стратегия размещает buy stop и sell stop вокруг текущей цены, наращивает позицию по шагам с множителем Multiplier и управляет ею с помощью настраиваемых стоп-лоссов, тейк-профитов и трейлинг-стопов. Порт на StockSharp повторяет оригинальный алгоритм и предоставляет все параметры через механизм StrategyParam.
Основные особенности:
- При отсутствии ордеров выставляется пара симметричных stop-заявок.
- После срабатывания одной из заявок противоположная немедленно отменяется, чтобы избежать хеджирования.
- В направлении открытой позиции добавляются новые уровни сетки, если расчетный объем не превышает
LotLimit. - Когда добавить следующий уровень нельзя, включается трейлинг-стоп (и при необходимости динамический тейк-профит), защищающий текущую позицию.
- Любые изменения позиции приводят к пересозданию защитных ордеров, поэтому все заявки всегда используют единые уровни выхода.
Алгоритм работы
- Торговая сессия. В субботу и воскресенье, а также вне диапазона часов
[StartHour, EndHour]новые заявки не выставляются. ЗначениеEndHour = 24разрешает торговать в течение всего дня. - Проверка капитала. Если стратегия привязана к портфелю, то его текущая стоимость должна быть не меньше
MinCapital. - Канальный фильтр (по желанию). При
ChannelPeriod > 0отслеживаются максимум и минимум последних завершенных свечей. Поведение задается параметромUseChannelCenter:false— ордера выставляются только при пробое диапазона.true— ордера выставляются, когда цена возвращается к середине диапазона.
- Первичные ордера. При отсутствии активных заявок buy stop ставится на
NetStepPipsвыше лучшей цены ask, а sell stop — наNetStepPipsниже лучшей цены bid. Базовый объем рассчитывается модулем управления капиталом. - Пирамидинг. После исполнения ордера противоположная заявка отменяется. Если позиция остается открытой, следующий уровень сетки ставится через
NetStepPipsс объемомRoundVolume(previousVolume × Multiplier). Добавление прекращается, если объем превысит лимит. - Стоп-лосс и тейк-профит. При каждом изменении объема позиция защищается новыми stop- и limit-заявками с дистанциями
StopLossPipsиTakeProfitPips. - Выход в безубыток. Если
UseBreakEven = trueи цена прошлаBreakEvenOffsetPipsв прибыльную сторону, стоп переводится к средневзвешенной цене входа, округленной черезPriceRoundingFactor. - Трейлинг. Когда дальнейший пирамидинг недоступен, стоп подтягивается на основе экстремума последней свечи с шагом
TrailingStopPips. ПриTrailProfit = trueтейк-профит также переносится, сохраняя исходную дистанцию. ВключениеUseMovingAverageFilterуменьшает шаг трейлинга вдвое, если цена движется против выбранной скользящей средней.
Управление капиталом
| Режим | Описание |
|---|---|
Fixed |
Всегда использовать InitialLot и ограничивать объем значением LotLimit. |
BalanceBased |
Пересчитывать стартовый объем по формуле ceil(balance / 1000 × PercentRisk / 100), затем делить его на Multiplier, пока не будет достигнут минимальный уровень сетки. Округление выполняется через LotRoundingFactor, а исходное LotLimit трактуется как максимальный объем. |
Progressive |
Сохранять InitialLot, но оценивать максимально возможный объем, умножая его на Multiplier для каждого уровня сетки. |
Объемы округляются делителем LotRoundingFactor (по умолчанию 10 ⇒ шаг 0.1), а цены — PriceRoundingFactor (по умолчанию 10000 ⇒ шаг 0.0001).
Параметры
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
NetStepPips |
23 | Расстояние между уровнями сетки. |
StopLossPips |
115 | Дистанция защитного стоп-лосса (0 — отключить). |
TakeProfitPips |
300 | Дистанция тейк-профита (0 — отключить). |
TrailingStopPips |
75 | Шаг трейлинг-стопа, который используется после завершения пирамидинга. |
Multiplier |
1.7 | Множитель объема для следующего уровня. |
TrailProfit |
true |
Смещать тейк-профит вместе с трейлинг-стопом. |
ManagementMode |
Progressive |
Выбранный режим управления капиталом. |
InitialLot |
1 | Базовый объем первой заявки. |
LotLimit |
7 | Максимальный объем одной заявки. |
MaxTrades |
4 | Максимальное число уровней сетки. |
PercentRisk |
10 | Доля капитала, используемая в режиме BalanceBased. |
MinCapital |
5000 | Минимальный капитал портфеля для запуска стратегии. |
UseBreakEven |
false |
Переводить ли стоп в безубыток. |
BreakEvenOffsetPips |
5 | Размер прибыли (в пунктах), необходимый для перевода стопа. |
UseMovingAverageFilter |
false |
Включение фильтра по скользящей средней для трейлинг-стопа. |
MovingAverageLength |
100 | Период скользящей средней. |
MovingAverageShift |
0 | Смещение, задающее, сколько завершенных свечей использовать при оценке MA. |
StartHour |
0 | Начальный час торговли (0–23). |
EndHour |
24 | Конечный час торговли (включительно). |
ChannelPeriod |
0 | Количество свечей для канального фильтра (0 — выключить фильтр). |
UseChannelCenter |
false |
Режим работы фильтра: пробой (false) или возврат к центру (true). |
LotRoundingFactor |
10 | Делитель для округления объемов. |
PriceRoundingFactor |
10000 | Делитель для округления цены безубыточности. |
CandleType |
15 минут | Тип свечей, используемых для расчетов. |
Особенности реализации
- Используется подписка на стакан, чтобы получать лучшие bid/ask; при отсутствии данных используется цена закрытия свечи.
- Защитные заявки создаются заново вместо модификации существующих — так надежнее работать через high-level API StockSharp.
- При недостатке истории для
MovingAverageShiftиспользуется последнее доступное значение MA, что приближает поведение к исходной реализации. - Цены нормализуются через
Security.ShrinkPrice, поэтому уровни всегда совпадают с минимальным шагом инструмента.
Практические советы
- Настройте
Strategy.Volume, если требуется масштабировать торговлю относительно портфеля. - Для инструментов с нестандартным шагом цены скорректируйте
LotRoundingFactorиPriceRoundingFactor. - Базовые параметры подобраны под тесты EURUSD H1 за период 01.01.2008 – 01.11.2008; для других рынков рекомендуется переоптимизация.
- Сетка может накапливать крупную позицию, поэтому контролируйте значения
LotLimitиMaxTrades, чтобы управлять рисками.