Количественная торговая стратегия с пересечением нескольких скользящих средних и динамическим стоп-лоссом RSI

MA RSI SMA SL TS
Дата создания: 2024-11-29 16:10:35 Последнее изменение: 2024-11-29 16:10:35
Копировать: 1 Количество просмотров: 461
1
Подписаться
1617
Подписчики

Количественная торговая стратегия с пересечением нескольких скользящих средних и динамическим стоп-лоссом RSI

Обзор

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

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

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

  1. Идентификация трендов: изменение рыночных тенденций идентифицируется с помощью перекрестных движущихся средних (быстрых ((9 циклов) и медленных ((21 циклов)). При прохождении медленной линии на быстрой линии и RSI больше 55, создается сигнал многодетной; при прохождении медленной линии под быстрой линией и RSI меньше 45, создается сигнал промежуточной.
  2. Подтверждение сигнала: использование RSI в качестве фильтра сигнала для повышения надежности торгового сигнала путем установки RSI-терминала.
  3. Контроль риска: используется 1% отслеживание стоп-лосса, динамически корректируется стоп-лосса, чтобы защитить прибыль. При этом устанавливается на основе RSI условий, чтобы получить прибыль, закрытие позиции, когда RSI превышает 80 или ниже 22 и пустые позиции.
  4. Механизм остановки убытков: в сочетании с фиксированными остановками и отслеживаемыми остановками, автоматическое ликвидация позиций, когда цена прорывает заданный процент от точки входа или касается отслеживаемой остановки.

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

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

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

  1. Риск рыночных потрясений: возможны частые ложные сигналы прорыва на рынках с горизонтальными потрясениями.
  2. Риск скольжения: возможна потеря скольжения в процессе отслеживания стоп-ложа.
  3. Чувствительность параметров: настройки среднелинейного цикла и RSI-приграничных значений оказывают большое влияние на эффективность стратегии.
  4. Системный риск: в крайних случаях, возможно, не будет вовремя выполнено остановка убытков

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

  1. Оптимизация сигнала: может быть введена в качестве дополнительного условия для подтверждения сигнала.
  2. Оптимизация остановок: учитывается динамический механизм корректировки остановочных коэффициентов на основе волатильности.
  3. Управление позициями: добавление динамической системы управления позициями, основанной на оценке рисков.
  4. Рыночная адаптивность: добавление механизмов идентификации рыночной среды, использование различных параметров в различных рыночных состояниях.
  5. Фильтрация сигналов: можно добавить временные фильтры, чтобы избежать торговли во время колебаний перед открытием и закрытием рынка.

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

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

Исходный код стратегии
/*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"}]
*/

//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)

// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)

// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45

// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0

// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na

// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na

// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22

// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01

// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryLow := low  // Store the low of the candle where long entry happened
    longTrailingStop := close * (1 - trailingStopPercent / 100)  // Initialize trailing stop at entry

// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryHigh := high  // Store the high of the candle where short entry happened
    shortTrailingStop := close * (1 + trailingStopPercent / 100)  // Initialize trailing stop at entry

// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100))  // Update trailing stop as price moves up

// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100))  // Update trailing stop as price moves down

// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
    strategy.close("Long")
    longEntryLow := na  // Reset the entry low after the long position is closed
    longTrailingStop := na  // Reset the trailing stop

// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
    strategy.close("Short")
    shortEntryHigh := na  // Reset the entry high after the short position is closed
    shortTrailingStop := na  // Reset the trailing stop

// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")

// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)

// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)