Стратегия адаптивной динамической сетки для длинных и коротких позиций
Обзор
Эта стратегия — адаптивная динамическая сеточная торговая стратегия для длинных и коротких позиций, написанная на Pine Script. Основная идея стратегии заключается в автоматическом вычислении верхней и нижней границ сетки на основе последних максимумов и минимумов цены или простой скользящей средней, после чего диапазон равномерно делится на несколько линий сетки. Когда цена касается какой-либо линии сетки, в этой точке открывается или закрывается длинная позиция. Таким образом, стратегия позволяет постоянно открывать и закрывать позиции на колебательном рынке, получая прибыль от спреда. Благодаря динамической настройке границ сетки она также может адаптироваться к различным рыночным трендам.
Принцип работы стратегии
-
Расчет верхней и нижней границ сетки. В зависимости от выбора пользователя, границы могут основываться на максимальных и минимальных значениях последних N свечей с возможностью установки процентного расширения или сужения; либо на основе простой скользящей средней цен закрытия последних N свечей с установкой процентного отклонения вверх и вниз.
-
Генерация массива линий сетки. В соответствии с заданным количеством линий сетки диапазон равномерно делится, формируя массив линий сетки соответствующих цен.
-
Вход / добавление позиции. Перебор линий сетки снизу вверх: если текущая цена закрытия меньше цены линии сетки, и по этой линии ещё нет позиции, открывается длинная позиция. Таким образом, при касании более высоких линий сетки позиция постоянно увеличивается.
-
Выход / уменьшение позиции. Перебор линий сетки сверху вниз: если текущая цена закрытия больше цены линии сетки, и на линии ниже есть позиция, то закрывается длинная позиция на линии ниже. Таким образом, при снижении цены позиция постепенно уменьшается.
-
Динамическая настройка. Если выбрана функция динамической сетки, на каждой свече заново рассчитываются верхняя и нижняя границы сетки и массив линий, что позволяет сетке постоянно адаптироваться к изменениям рынка.
Анализ преимуществ
-
Высокая адаптивность. Сеточная стратегия может работать как на колебательном, так и на трендовом рынке. На колебательном рынке она постоянно открывает и закрывает позиции, получая прибыль от спреда; на трендовом рынке, благодаря смещению сетки за ценой, удаётся поддерживать некоторую позицию и получать прибыль от тренда.
-
Контролируемый риск. Размер каждой открываемой позиции определяется количеством линий сетки, поэтому разовый риск невелик и контролируем. Кроме того, при касании верхних линий сетки позиции закрываются с прибылью, что частично хеджирует потенциальные убытки.
-
Высокая степень автоматизации. Стратегия может работать практически полностью автоматически, не требуя вмешательства человека, что подходит инвесторам, стремящимся к стабильной долгосрочной доходности.
-
Гибкость параметров. Пользователь может гибко настраивать количество линий сетки, параметры динамической сетки и т.д. в зависимости от характеристик рынка для оптимизации результатов стратегии.
Анализ рисков
-
Риск «чёрного лебедя». При экстремальном обвале рынка, когда цена резким гэпом падает ниже самой нижней линии сетки, стратегия окажется полностью в позиции и понесёт значительную просадку. Для снижения этого риска можно установить условие стоп-лосса: при достижении определённого уровня убытка все позиции закрываются.
-
Неправильная настройка параметров сетки. Если плотность сетки слишком высока, спред при каждом открытии/закрытии будет очень мал, и комиссии могут съесть большую часть прибыли. Если ширина сетки слишком велика, доля открываемой позиции за раз будет высокой, что увеличивает риск. Необходимо тщательно оценить характеристики базового актива и выбрать подходящие параметры сетки.
-
Риск базиса. Стратегия устанавливает условия открытия/закрытия на основе текущей цены. На рынках фьючерсов и т.п., если цена контракта сильно отличается от цены базового актива, фактическая цена открытия/закрытия может существенно отклоняться от ожидаемой.
Направления оптимизации
-
Добавление фильтра тренда. Сеточная стратегия показывает плохие результаты на однонаправленных трендовых рынках. Можно добавить трендовый индикатор в качестве фильтра: например, включать сетку только при значении ADX ниже определённого порога, а при явном тренде отключать сетку и держать только однонаправленную позицию.
-
Оптимизация сигналов. На сетку можно наложить другие сигналы, например, сетка + скользящая средняя: открытие/закрытие позиции происходит в основном по правилам сетки, но только при пересечении ценой определённой скользящей средней, иначе позиция не открывается. Это снижает издержки от частого открытия/закрытия.
-
Управление размером позиции. В текущей стратегии объём позиции на каждом уровне фиксирован. Можно настроить уменьшение объёма на уровнях, далёких от средней рыночной цены, и увеличение объёма при приближении к средней, повышая эффективность использования капитала.
-
Адаптивная плотность сетки. Динамическое изменение количества линий сетки в зависимости от волатильности цены: при высокой волатильности можно увеличить количество линий, при низкой — уменьшить. Это оптимизирует ширину сетки и повышает эффективность использования капитала.
Заключение
Данная стратегия благодаря адаптивной динамической сетке позволяет часто открывать и закрывать позиции на колебательном рынке, получая прибыль от спреда, а также сохранять некоторую экспозицию на трендовом рынке для получения прибыли от тренда. Это средне- и долгосрочная количественная стратегия с высокой адаптивностью. При разумной настройке логики триггеров сетки и управления позицией она может обеспечить стабильную доходность. Однако необходимо уделять внимание рискам экстремальных движений и ценовых гэпов, что требует установки соответствующих стоп-лоссов для контроля. Кроме того, есть возможности для дальнейшей оптимизации в области настройки параметров и управления рисками: введение трендовых фильтров, наложение сигналов, управление размером позиции, адаптивная плотность сетки и т.д. позволят повысить устойчивость и доходность стратегии. В целом, стратегия основана на базовой логике сетки с добавлением механизма динамической адаптации, что может дать новые идеи и ориентиры для средне- и долгосрочных количественных инвесторов.
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jcloyd
//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool) // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"]) // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1) // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float) // for manual grid bounds only. The upperbound price of your grid
i_lowerBound = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float) // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty = input(group="Grid Lines", title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer) // how many grid lines are in your grid- 1

