
Обзор
Стратегия количественного трейдинга с помощью адаптивной равнолинейной сетки - это количественная стратегия, основанная на идее равнолинейной и сетчатой торговли. Стратегия используется для вычисления простой скользящей средней цены (SMA) как центральной линии рыночных тенденций, а затем для установления пропорциональной сетчатой линии под центральной линией.
Стратегический принцип
Ключевые принципы стратегии количественной торговли с адаптивной равнолинейной сеткой основаны на средневзвешенной регрессионной характеристике рыночной цены. Стратегия реализуется следующими шагами:
- Простой скользящий средний (SMA) для расчета цены, используемый в качестве среднего отсчета рынка. В коде используется 300-часовая скользящая средняя, которая достаточно длинна, чтобы отфильтровывать краткосрочные колебания.
- На основе скользящей средней, устанавливается верхний и нижний отклонения (в данном случае 3%) и определяется верхняя и нижняя границы сетчатых сделок.
- В зависимости от количества сетчатки, установленного пользователем (максимум 15), сетчатки распределены равномерно между верхней и нижней границами.
- Используйте бульерную матрицу для записи состояния позиций в каждой сетке, чтобы обеспечить точное выполнение сделки.
- Логика сделки:
- Когда цена ниже определенной линии сетки, и эта позиция не держится, покупайте в этой позиции сетки.
- Когда цена выше линии сетки, а следующая нижняя позиция сетки уже занята, уравняйте позиции, занятые в этой ниже позиции.
Суть этой стратегии заключается в том, чтобы улавливать высокие частоты колебаний цен в определенном диапазоне, реализуя “низкие покупки и высокие продажи”. Стратегия позволяет одновременно держать несколько позиций (до 15), каждая из которых соответствует различным сетчатым линиям. Такая конструкция позволяет стратегии более полно использовать колебания цен.
Стратегические преимущества
Стратегия количественного трейдинга с адаптивной равнолинейной сеткой имеет следующие значительные преимущества:
- Умение адаптироватьсяСтратегия автоматически корректирует положение сетки на основе скользящих средних, чтобы адаптироваться к различным рыночным условиям и изменениям уровня цен.
- Распределение рискаСделки с несколькими сетчатыми позициями позволяют распределить средства и снизить риски в отношении одной сделки.
- Частые шансы на прибыльНапример, в случае, когда рынок находится в состоянии колебаний, стратегия может зачастую использовать небольшие колебания для получения прибыли.
- Ясный сигнал входа и выходаТорговые сигналы, основанные на четкой цене, касаются условий линии решетки, уменьшают субъективные суждения и повышают согласованность в реализации стратегии.
- Параметры просты и легко настраиваются: Стратегия требует корректировки только трех основных параметров для оптимизации и отсчета: длины скользящей средней, отклонения решетки и количества решетки.
- Логика ясна: использование массивной структуры для хранения цены сетки и состояния заказов, четкая логика кода, легко понять и поддерживать.
- Визуальная поддержкаСтратегия предоставляет визуализацию линии решетки, позволяя трейдерам визуально наблюдать за торговыми зонами и потенциальными торговыми точками.
Стратегический риск
Несмотря на разумную конструкцию, существуют следующие потенциальные риски:
- Риски на рынкеВ случае сильного трендового рынка цена может постоянно двигаться в одном направлении, что приводит к тому, что стратегия продолжает открывать позиции с одной стороны и не имеет возможности для продажи, что приводит к увеличению заимствования и может привести к большим потерям. Решение заключается в добавлении условий фильтрации тенденции или установлении максимальных ограничений на хранение позиций.
- Параметр ЧувствительностьНастройки длины скользящей средней и отклонения сетки оказывают большое влияние на эффективность стратегии. Неправильные параметры могут привести к тому, что сетка станет слишком широкой (низкая частота сделок) или слишком узкой (большое количество ложных сигналов). Рекомендуется определить оптимальную комбинацию параметров с помощью полной обратной проверки.
- Риски управления капиталом: Стратегия допускает до 15 одноразовых позиций, если неразумно контролировать соотношение средств на одну сделку, это может привести к чрезмерной концентрации средств. Должна быть установлена фиксированная соотношение средств на одну сделку или динамически корректируемый размер позиции.
- Влияние скольжения и комиссионных: Стратегии высокой частоты торговли более чувствительны к скользящим точкам и комиссионным, особенно когда сетка узкая. Рекомендуется учитывать эти факторы затрат в обратном измерении и соответственно корректировать ширину сетки.
- Риск ликвидностиВ условиях низкой ликвидности рынка или во время сильной волатильности может быть затруднено совершение сделки по желаемой цене, что может повлиять на эффективность стратегии. Следует выбирать торговые сорта с достаточной ликвидностью и учитывать возможность установки защиты от скольжения.
Направление оптимизации стратегии
На основе анализа кода эта стратегия может быть оптимизирована в следующих направлениях:
- Добавить фильтр тренда: в сочетании с другими техническими показателями (например, MACD, RSI или направленный индикатор DMI) для оценки рыночных тенденций, приостановка или корректировка стратегии торговли сеткой в явно трендовых рынках, чтобы избежать убытков, вызванных регрессивной торговлей.
- Ширина динамической сетки: Динамически корректировать отклонение решетки в зависимости от волатильности рынка (например, ATR), увеличивать разрыв решетки при увеличении волатильности, уменьшать разрыв решетки при уменьшении волатильности, лучше адаптироваться к различным рыночным условиям.
- Внедрение механизма стоп-лосса: Установка условий для остановки для каждой позиции сетки, чтобы защитить свои средства в случае необычных колебаний на рынке. Можно рассмотреть динамические остановки или фиксированные пропорциональные остановки на основе ATR.
- Оптимизация управления капиталомРеализация динамического управления позициями, динамическая корректировка доли средств в каждой сделке в зависимости от средств на счетах, рыночной волатильности и состояния уже имеющихся позиций, повышение эффективности использования средств и способности к контролю риска.
- Добавление фильтра времениАнализ рыночных характеристик в разные периоды времени, активизация стратегии в подходящие периоды времени для торговли в сети, снижение частоты торговли или приостановка торговли в неподходящие периоды времени.
- Подтверждение многократного циклаВ частности, в частности, в связи с увеличением объема операций, в частности, в связи с увеличением объема операций, в частности, в связи с увеличением объема операций, в частности, в связи с увеличением объема операций, в частности, в связи с увеличением объема операций.
- Оптимизация эффективности кода: Часть визуализации сетки в текущем коде использует повторяющиеся граффити, которые можно оптимизировать с помощью циклической структуры, чтобы улучшить краткость и поддерживаемость кода.
Подвести итог
Самостоятельно адаптируемая сетчатая количественная торговая стратегия - это сетчатая торговая система, основанная на принципе равнозначной регрессии, которая захватывает торговые возможности, вызванные колебаниями цен, путем настройки сетки вокруг движущихся средних. Конструкция стратегии проста, с меньшим количеством параметров и легкой настройкой, особенно подходит для использования на волатильных рынках. Основные преимущества стратегии заключаются в ее самостоятельно адаптируемости и распределении риска, которая может автоматически адаптироваться к различным уровням цен и распределять риск через несколько сетевых позиций.
Тем не менее, эта стратегия может быть подвержена риску на рынках с сильными тенденциями и требует оптимизации с помощью дополнительных фильтров на тенденции и механизмов остановки убытков. Кроме того, стоит изучить такие направления оптимизации, как динамическая корректировка ширины решетки, совершенствование управления капиталом и увеличение подтверждения многократных временных циклов. Благодаря этим оптимизациям стратегия может быть более устойчивой и превосходной в различных рыночных условиях.
Для опытных количественных трейдеров такая стратегия предоставляет хорошую базовую структуру, которую можно дополнительно настраивать и оптимизировать в соответствии с личными торговыми стилями и предпочтениями в отношении риска, используя преимущества сетевого трейдинга в захвате рыночных колебаний.
Исходный код стратегии
/*backtest
start: 2025-04-01 00:00:00
end: 2025-06-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('Grid Trading Strategy', overlay=true, pyramiding=15)
// 输入参数设置
ma_length = input.int(300, '移动平均线长度', group='移动平均线条件', step=10)
std = input.float(0.03, title='网格上下偏差率', group='网格条件', step=0.01)
grid = input.int(15, maxval=15, title='网格线数量', group='网格条件')
// 计算移动平均线及网格边界
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
// 创建网格价格数组
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
array.push(grid_array, lower_bound + grid_width * i)
// 创建订单状态布尔数组(只初始化一次)
var order_array = array.new_bool(grid, false)
// 执行交易逻辑
for i = 0 to grid - 1 by 1
// 买入逻辑:价格低于网格线且该位置未持仓
if close < array.get(grid_array, i) and not array.get(order_array, i)
buy_id = i
array.set(order_array, buy_id, true)
strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
// 卖出逻辑:价格高于网格线且下一个网格位置持仓
if close > array.get(grid_array, i) and i != 0
if array.get(order_array, i - 1)
sell_id = i - 1
array.set(order_array, sell_id, false)
strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))
// 可视化网格线
plot(grid > 0 ? array.get(grid_array, 0) : na, color=color.yellow, transp=10)
plot(grid > 1 ? array.get(grid_array, 1) : na, color=color.yellow, transp=10)
plot(grid > 2 ? array.get(grid_array, 2) : na, color=color.yellow, transp=10)
plot(grid > 3 ? array.get(grid_array, 3) : na, color=color.yellow, transp=10)
plot(grid > 4 ? array.get(grid_array, 4) : na, color=color.yellow, transp=10)
plot(grid > 5 ? array.get(grid_array, 5) : na, color=color.yellow, transp=10)
plot(grid > 6 ? array.get(grid_array, 6) : na, color=color.yellow, transp=10)
plot(grid > 7 ? array.get(grid_array, 7) : na, color=color.yellow, transp=10)
plot(grid > 8 ? array.get(grid_array, 8) : na, color=color.yellow, transp=10)
plot(grid > 9 ? array.get(grid_array, 9) : na, color=color.yellow, transp=10)
plot(grid > 10 ? array.get(grid_array, 10) : na, color=color.yellow, transp=10)
plot(grid > 11 ? array.get(grid_array, 11) : na, color=color.yellow, transp=10)
plot(grid > 12 ? array.get(grid_array, 12) : na, color=color.yellow, transp=10)
plot(grid > 13 ? array.get(grid_array, 13) : na, color=color.yellow, transp=10)
plot(grid > 14 ? array.get(grid_array, 14) : na, color=color.yellow, transp=10)