Type/to search

Стратегия адаптивной динамической сетки для длинных и коротких позиций

Common strategy
Created: 2024-03-19 14:19:12
Last modified: 2 years ago
1
Follow
1802
Followers

img

Обзор

Эта стратегия — адаптивная динамическая сеточная торговая стратегия для длинных и коротких позиций, написанная на Pine Script. Основная идея стратегии заключается в автоматическом вычислении верхней и нижней границ сетки на основе последних максимумов и минимумов цены или простой скользящей средней, после чего диапазон равномерно делится на несколько линий сетки. Когда цена касается какой-либо линии сетки, в этой точке открывается или закрывается длинная позиция. Таким образом, стратегия позволяет постоянно открывать и закрывать позиции на колебательном рынке, получая прибыль от спреда. Благодаря динамической настройке границ сетки она также может адаптироваться к различным рыночным трендам.

Принцип работы стратегии

  1. Расчет верхней и нижней границ сетки. В зависимости от выбора пользователя, границы могут основываться на максимальных и минимальных значениях последних N свечей с возможностью установки процентного расширения или сужения; либо на основе простой скользящей средней цен закрытия последних N свечей с установкой процентного отклонения вверх и вниз.

  2. Генерация массива линий сетки. В соответствии с заданным количеством линий сетки диапазон равномерно делится, формируя массив линий сетки соответствующих цен.

  3. Вход / добавление позиции. Перебор линий сетки снизу вверх: если текущая цена закрытия меньше цены линии сетки, и по этой линии ещё нет позиции, открывается длинная позиция. Таким образом, при касании более высоких линий сетки позиция постоянно увеличивается.

  4. Выход / уменьшение позиции. Перебор линий сетки сверху вниз: если текущая цена закрытия больше цены линии сетки, и на линии ниже есть позиция, то закрывается длинная позиция на линии ниже. Таким образом, при снижении цены позиция постепенно уменьшается.

  5. Динамическая настройка. Если выбрана функция динамической сетки, на каждой свече заново рассчитываются верхняя и нижняя границы сетки и массив линий, что позволяет сетке постоянно адаптироваться к изменениям рынка.

Анализ преимуществ

  1. Высокая адаптивность. Сеточная стратегия может работать как на колебательном, так и на трендовом рынке. На колебательном рынке она постоянно открывает и закрывает позиции, получая прибыль от спреда; на трендовом рынке, благодаря смещению сетки за ценой, удаётся поддерживать некоторую позицию и получать прибыль от тренда.

  2. Контролируемый риск. Размер каждой открываемой позиции определяется количеством линий сетки, поэтому разовый риск невелик и контролируем. Кроме того, при касании верхних линий сетки позиции закрываются с прибылью, что частично хеджирует потенциальные убытки.

  3. Высокая степень автоматизации. Стратегия может работать практически полностью автоматически, не требуя вмешательства человека, что подходит инвесторам, стремящимся к стабильной долгосрочной доходности.

  4. Гибкость параметров. Пользователь может гибко настраивать количество линий сетки, параметры динамической сетки и т.д. в зависимости от характеристик рынка для оптимизации результатов стратегии.

Анализ рисков

  1. Риск «чёрного лебедя». При экстремальном обвале рынка, когда цена резким гэпом падает ниже самой нижней линии сетки, стратегия окажется полностью в позиции и понесёт значительную просадку. Для снижения этого риска можно установить условие стоп-лосса: при достижении определённого уровня убытка все позиции закрываются.

  2. Неправильная настройка параметров сетки. Если плотность сетки слишком высока, спред при каждом открытии/закрытии будет очень мал, и комиссии могут съесть большую часть прибыли. Если ширина сетки слишком велика, доля открываемой позиции за раз будет высокой, что увеличивает риск. Необходимо тщательно оценить характеристики базового актива и выбрать подходящие параметры сетки.

  3. Риск базиса. Стратегия устанавливает условия открытия/закрытия на основе текущей цены. На рынках фьючерсов и т.п., если цена контракта сильно отличается от цены базового актива, фактическая цена открытия/закрытия может существенно отклоняться от ожидаемой.

Направления оптимизации

  1. Добавление фильтра тренда. Сеточная стратегия показывает плохие результаты на однонаправленных трендовых рынках. Можно добавить трендовый индикатор в качестве фильтра: например, включать сетку только при значении ADX ниже определённого порога, а при явном тренде отключать сетку и держать только однонаправленную позицию.

  2. Оптимизация сигналов. На сетку можно наложить другие сигналы, например, сетка + скользящая средняя: открытие/закрытие позиции происходит в основном по правилам сетки, но только при пересечении ценой определённой скользящей средней, иначе позиция не открывается. Это снижает издержки от частого открытия/закрытия.

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

  4. Адаптивная плотность сетки. Динамическое изменение количества линий сетки в зависимости от волатильности цены: при высокой волатильности можно увеличить количество линий, при низкой — уменьшить. Это оптимизирует ширину сетки и повышает эффективность использования капитала.

Заключение

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

Source
Pine
// 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
Strategy parameters
Strategy parameters
Grid Bounds
Use Auto Bounds?
(Auto) Bound Source
(Auto) Bound Lookback
(Auto) Bound Deviation
(Manual) Upper Boundry
(Manual) Lower Boundry
Grid Lines
Grid Line Quantity
Comment
All comments (0)
No data
No data
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)