Агрессивная количественная стратегия снижения

Автор:Чао Чжан, Дата: 2024-01-18 16:25:33
Тэги:

img

Обзор

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

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

Если объем превышает 2 стандартных отклонения над средним объемом, основанным на SMA, он считается непогашенным. Между тем, RSI ниже 30 указывает на состояние перепроданности. Когда оба условия выполнены, он рассматривается как краткосрочный дно и длинная позиция принимается немедленно. Позиция будет закрыта после определенного периода времени (например, 10 бар).

Логика этой стратегии проста:

  1. Расчет 20-барной SMA объема в качестве ориентира
  2. Вычислить 2 стандартных отклонения объема 20 бар в качестве порогового значения объема
  3. Расчет 20-барного RSI для оценки состояния перепроданности
  4. Если объем превышает ориентировочный показатель + 2 стандартных отклонений и RSI < 30, оценивать как краткосрочное дно.
  5. Возьмите длинную позицию непосредственно внизу
  6. Положение закрытия после 10 бар автоматически

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

Преимущества этой стратегии включают:

  1. Простая логика, легко понять и оптимизировать
  2. Используйте объем, оставшийся в запасе, для обнаружения краткосрочных поворотных точек
  3. RSI обеспечивает только длинные позиции в зоне перепродажи, избегая погони за вершинами
  4. Автоматическая остановка потери максимизирует уклонение от риска на дне

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

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

К основным рискам этой стратегии относятся:

  1. Объем и RSI могут генерировать ложные сигналы прорыва, вызывая ложные длинные позиции и потери.
  2. Фиксированное время остановки потери может не остановить потерю или остановить потерю слишком рано во время значительного переворота на рынке.
  3. Неоптимальная настройка параметров может привести к слишком малому или слишком большому количеству сигналов.

Для устранения этих рисков оптимизация может осуществляться в следующих аспектах:

  1. Добавьте другие индикаторы для фильтрации ложных сигналов прорыва.
  2. Установка динамического остановки задержки вместо фиксированного количества баров.
  3. Комплексное тестирование параметров и настройка для обеспечения надежности.

Руководство по оптимизации

Эта стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Добавить модель ML для оценки надежности прорывов объема, чтобы избежать ложных сигналов
  2. Добавить адаптивный механизм остановки потерь вместо фиксированных баров
  3. Оптимизация многомерного набора данных для неизвестных параметров объема
  4. Повышение точности сигналов перепродажи с помощью скрининга ML
  5. Включить анализ настроений для улучшения альфы

При внедрении более продвинутых методов можно достичь значительного улучшения стабильности, альфа и отношения Шарпе.

Заключение

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


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 1m
basePeriod: 1m
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/
// © footlz

//@version=4
strategy("Bottom catch strategy", overlay=true)

v_len = input(20, title="Volume SMA Length")
mult = input(2)
rsi_len = input(20, title="RSI Length")
oversold = input(30, title="Oversold")
close_time = input(10, title="Close After")

v = volume
basis = sma(v, v_len)
dev = mult * stdev(v, v_len)
upper_volume = basis + dev

rsi = rsi(close, rsi_len)

long = v > upper_volume and rsi < oversold

strategy.entry("Long", true, when=long)

passed_time = 0.0
if strategy.position_size != 0
    passed_time := 1
else
    passed_time := 0

if strategy.position_size != 0 and strategy.position_size[1] != 0
    passed_time := passed_time[1] + 1

if passed_time >= close_time
    strategy.close_all()

// If want to enable plot, change overlay=false.
v_color = close >= close[1] ? color.new(#3eb370, 0) : color.new(#e9546b, 0)

// plot(v, title="volume", color=v_color, style=plot.style_columns)
// plot(upper_volume, title="Threshold", color=color.aqua)

Больше