В процессе загрузки ресурсов... загрузка...

Динамическая стратегия перепродажи ATR Stop-Loss RSI

Автор:Чао Чжан, Дата: 2024-11-29 16:18:55
Тэги:РСИSMAATRТПSL

img

Обзор

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

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

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

  1. Сигнал входа: Система генерирует длинные сигналы, когда RSI ((5) падает ниже уровня перепроданности 30 и цена выше 200-дневной скользящей средней.
  2. Механизм стоп-лосса: сочетает в себе динамический стоп-лосс 1,5x 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

Связанные

Больше