Эластичная количественная стратегия перепроданности RSI с динамическим стоп-лоссом ATR

RSI SMA ATR TP SL
Дата создания: 2024-11-29 16:18:55 Последнее изменение: 2024-11-29 16:18:55
Копировать: 0 Количество просмотров: 453
1
Подписаться
1617
Подписчики

Эластичная количественная стратегия перепроданности RSI с динамическим стоп-лоссом ATR

Обзор

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

Стратегический принцип

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

  1. Входный сигнал: система посылает сигнал о перепродаже, когда RSI ((5)) находится ниже 30 и цена находится выше 200-дневной средней линии.
  2. Стоп-механизм: двойной механизм, сочетающий динамический стоп в 1,5 раза ATR ((20) и фиксированный стоп в 25%.
  3. Цель получения прибыли: установлены три целевых позиции в размере 5%, 10% и 15%, соответственно, по достижению целей снижение позиций на 33%, 66% и 100%.
  4. Управление позицией: рекомендуется использовать позиции, полученные с использованием критерия Келли, на уровне 59.13% или использовать позиции на уровне 75% для торгов.

Стратегические преимущества

  1. Подтверждение двойного тренда: повышение выигрышной вероятности с помощью двойной проверки RSI-оперезоров и средней линии тренда.
  2. Гибкий контроль риска: динамический ATR-стоп может адаптироваться к рыночным колебаниям, а фиксированный стоп является последней защитой.
  3. Интеллектуальный менеджмент прибыли: трехместная целевая ставка с поэтапным снижением позиций, позволяющая закрепить часть прибыли и не пропустить крупный рынок.
  4. Наука управления капиталом: оптимизация позиций с использованием критериев Келли, достижение баланса между риском и доходом.

Стратегический риск

  1. Трендозависимость: стратегия может часто вызывать потери на рынке во время колебаний. Рекомендации: можно добавить фильтрующие сигналы в индикатор колебаний.

  2. Большая стоп-падеж: фиксированный стоп-падеж в 25% может привести к слишком большим одноразовым убыткам. Рекомендуется: скорректировать размер убытков в зависимости от индивидуальной способности к риску.

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

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

  1. Оптимизация сигнала:
  • Добавить подтверждение транзакции
  • В сочетании с трендовыми индикаторами, такими как MACD
  • Представляем фильтры волатильности
  1. Оптимизация убытков:
  • Достижение динамического стоп-процента
  • Увеличение времени остановки
  • Фильтр прибыли/убытка
  1. Оптимизация прибыли:
  • Динамическая настройка ATR на место назначения
  • Осуществление блокировки слежения
  • Оптимизация соотношения убытков

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef