Стратегия RSI Box Grid

Автор:Чао Чжан, Дата: 2023-10-30 11:29:30
Тэги:

img

Обзор

Эта стратегия представляет собой псевдосетевой бот, предназначенный в первую очередь для алгоритмической торговли. Она использует динамическую, взвешенную по объему сетку, которая обновляется только при выполнении определенных условий RSI. Это также стратегия прорыва, тогда как обычные сетевые боты этого не делают (типичные сетевые боты продают, когда достигается более высокая сетка, тогда как эта стратегия продает, когда более низкая сетка нарушается при определенных условиях).

Короче говоря, стратегия обновляет свою сетку до наивысших/низших значений данного источника (src в настройках) каждый раз, когда RSI пересекает уровень перекупления/перепродажи. Из этого диапазона она генерирует равномерно распределенную сетку из пяти линий и использует текущий источник для определения, какая линия сетки ближе всего. Затем, если источник пересекает линию прямо выше, он входит в длинную. Если источник пересекает линию прямо ниже, он входит в короткую.

Вы можете настроить шорты, источник, длину RSI и уровни перекупа / перепродажи в настройках.

Логика стратегии

Основная логика стратегии заключается в следующем:

  1. Использование индикатора RSI для определения точек перелома тренда, используя перекрестки линий RSI с уровнями перекупленности/перепроданности в качестве сигналов подтверждения.

  2. При появлении сигнала RSI записывают самые высокие/низкие цены за период как верхние/нижние пределы сетки.

  3. Разделите диапазон на 5 равномерно расположенных линий сетки. Проверьте в режиме реального времени, к какой линии цена ближе всего.

  4. Когда цена переходит линию выше, вы идете на длинный.

  5. Используя прорыв вместо прикосновения, он может лучше улавливать обратные тенденции.

  6. Закройте все пирамидальные заказы до закрытия, чтобы избежать рисков на ночь.

Стратегия состоит из следующего:

  1. Настройки ввода: источник, параметры RSI, длинный/короткий и т.д.

  2. Расчет RSI: вычислить RSI и проверить наличие перекрестных сигналов.

  3. Динамическая сетка: запись диапазона цен на сигналах RSI и расчет линий сетки.

  4. Проверка сигнала: обнаружение сетевых линий с перерывом цены для длинных/коротких сигналов.

  5. Управление заказами: отправка заказов и сглаживание до закрытия.

  6. Картографирование: графические линии сетки, длинные/короткие зоны и т.д.

Благодаря динамическому обновлению сетки и использованию RSI для контекста тренда плюс сигналов прорыва, эта стратегия может эффективно отслеживать тенденции и обращать их вспять при изменении тренда.

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

Основными преимуществами этой стратегии являются:

  1. Динамическая сетка адаптируется к тренду, в отличие от фиксированной сетки.

  2. Регулирует сетку только при подтверждении RSI, уменьшая шум.

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

  4. Уровняется перед закрытием, чтобы избежать рисков прорыва на ночь.

  5. RSI эффективен для обнаружения перекупа/продажи.

  6. Режим прорыва обеспечивает раннее вхождение в тренд по сравнению с реверсией.

  7. Настройка расстояния и размера сетки позволяет регулировать риск.

  8. Визуальная сетка и длинные/короткие зоны.

  9. Необходимые шорты для разных трейдеров.

  10. Простая логика, подходящая для торговли.

Это делает стратегию способной автоматического отслеживания тренда с контролем риска для торговли в режиме реального времени.

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

Следует также отметить некоторые потенциальные риски:

  1. Рынки могут приводить к стоп-потерям, могут увеличивать стопы или приостанавливать торговлю.

  2. Ночные пробелы могут оставить большие открытые пробелы, могут уменьшить размер позиции.

  3. Плохая настройка параметров может увеличить торговлю или ошибки сигналов. Требует осторожной оптимизации.

  4. Высокие сборы могут снизить прибыль от сетевой торговли.

  5. Сигналы прорыва могут немного отстать от обратных.

  6. В случае постоянного роста показатели могут быть уменьшены.

  7. Необходим достаточный капитал для больших размеров позиций и пирамиды, иначе результаты будут плохими.

Уменьшение последствий:

  1. Оптимизировать параметры для уменьшения частоты торговли и переоценки.

  2. Комбинируйте с индикаторами тренда, избегайте торговых периодов.

  3. Уменьшить размер сделки в % и риск по сделке.

  4. Испытайте различные пороги прорыва для наилучшего баланса срочности и стабильности.

  5. Добавьте больше условий входа, введите только четкие тенденции, чтобы избежать ловушки.

  6. Проверка на более длительные периоды для оценки стабильности параметров.

  7. Исследование оптимизации динамических параметров на основе машинного обучения для адаптации рынка.

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

  9. Корректировать параметры на основе недавних рыночных условий, чтобы сохранить эффективность стратегии.

  10. Построить платформы визуальной оптимизации для быстрого тестирования.

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

Возможности для расширения

Стратегия может быть дополнительно усилена путем:

  1. Оптимизирую параметры RSI, проверяю периоды RSI для лучших комбинаций.

  2. Испытание различных расстояний сетки для оптимального риска-вознаграждения.

  3. Добавление других индикаторов к фильтрующим сигналам, например MACD, KD и т.д., для повышения точности.

  4. Разработка адаптивных остановок на основе волатильности рынка.

  5. Увеличение условий входа, вводят только очевидные тенденции, чтобы избежать ловушек.

  6. Проведение обратных испытаний в течение более длительных периодов для оценки стабильности параметров.

  7. Исследование динамической оптимизации на основе машинного обучения для адаптации.

  8. Включение стратегий опционов для хеджирования рисков.

  9. Корректировка параметров на основе недавних рыночных условий для поддержания эффективности.

  10. Создание платформ визуальной оптимизации для быстрых тестов.

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

Резюме

Подводя итог, стратегия RSI Box Grid использует RSI для выявления подтверждения обратного тренда, устанавливает динамические сетки ценового диапазона, вырывы сделок и сглаживает внутридневный тренд - формируя гибкий тренд после стратегии торговли алгоритмом. По сравнению с фиксированными сетками, она лучше адаптируется к изменениям рынка.

Стратегия имеет преимущества, включая RSI для контекста тренда, динамические сетки, трейдинг прорыва и полное сглаживание внутридневного. Это позволяет эффективно отслеживать тенденции с контролем рисков. Однако существуют риски, такие как стоп-потери, ночные разрывы, требующие оптимизации, сочетания сигналов и управления рисками.

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


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
// strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, 
//  default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10)

src = input.source(close,"Source")
rsiLength = input.int(14,"RSI Length")
oblvl = input.int(70,"Overbought Level")
oslvl = input.int(30,"Oversold Level")
useShorts = input.bool(false,"Use Shorts",inline="B")
showGrid = input.bool(false,"Show Grid",inline="B")

rsi = ta.rsi(src,rsiLength)

rsi_crossdn = ta.crossunder(rsi,oblvl)
rsi_crossup = ta.crossover(rsi,oslvl)

highest = ta.vwma(ta.highest(src,rsiLength),rsiLength)
lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength)

gridTop = ta.valuewhen(rsi_crossdn,highest,0)
gridBottom = ta.valuewhen(rsi_crossup,lowest,0)
gridMiddle = math.avg(gridTop,gridBottom)
gridMidTop = math.avg(gridMiddle,gridTop)
gridMidBottom = math.avg(gridMiddle,gridBottom)

diff1 = math.abs(src - gridTop)
diff2 = math.abs(src - gridBottom)
diff3 = math.abs(src - gridMiddle)
diff4 = math.abs(src - gridMidTop)
diff5 = math.abs(src - gridMidBottom)

minDiff = math.min(diff1, diff2, diff3, diff4, diff5)

// Determine which line is the closest
float closestLine = na
if minDiff == diff1
    closestLine := gridTop
else if minDiff == diff2
    closestLine := gridBottom
else if minDiff == diff3
    closestLine := gridMiddle
else if minDiff == diff4
    closestLine := gridMidTop
else if minDiff == diff5
    closestLine := gridMidBottom

buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom)
sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom)

condition_bull = buyCrosses
condition_bear = sellCrosses

var float bull_status_line = na
var float bear_status_line = na
var float bull_buy_line = na
var float bear_sell_line = na

if condition_bull
    bull_status_line := closestLine
if condition_bear
    bear_status_line := closestLine

if bull_status_line == gridBottom
    bull_buy_line := gridMidBottom
if bull_status_line == gridMidBottom
    bull_buy_line := gridMiddle
if bull_status_line == gridMiddle
    bull_buy_line := gridMidTop
if bull_status_line == gridMidTop
    bull_buy_line := gridTop

if bear_status_line == gridTop
    bear_sell_line := gridMidTop
if bear_status_line == gridMidTop
    bear_sell_line := gridMiddle
if bear_status_line == gridMiddle
    bear_sell_line := gridMidBottom
if bear_status_line == gridMidBottom
    bear_sell_line := gridBottom

l = ta.crossover(src,bull_buy_line)
s = ta.crossunder(src,bear_sell_line)

if l
    strategy.entry("Long",strategy.long)
if s
    strategy.close("Long")
    if useShorts
        strategy.entry("Short",strategy.short)

// Plotting
in_buy = ta.barssince(l) < ta.barssince(s)
u=plot(bull_buy_line,color=na,title="Buy Plot")
d=plot(bear_sell_line,color=na,title="Sell Plot")

plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2")
plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1")
plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0")
plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1")
plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2")


fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))

Больше