Стратегия пересечения скользящих средних RSI Momentum и система оптимизации риска и доходности

SMA RSI ATR RR
Дата создания: 2024-11-12 16:00:58 Последнее изменение: 2024-11-12 16:00:58
Копировать: 3 Количество просмотров: 454
1
Подписаться
1617
Подписчики

Стратегия пересечения скользящих средних RSI Momentum и система оптимизации риска и доходности

Обзор

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

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

В качестве основы для определения тренда стратегия использует два движущихся средних с 9 и 21 числа и подтверждает сигнал через зону перекупа и перепродажи RSI ((3565)). В условиях многообеда требуется, чтобы краткосрочная средняя линия была выше долгосрочной средней линии и RSI находилась в зоне перепродажи ((<35)); в случае пустого входа требуется, чтобы краткосрочная средняя линия была ниже долгосрочной средней линии и RSI находилась в зоне перекупа ((<65)).

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

  1. Многосигнальный механизм подтверждения значительно повышает надежность транзакций
  2. Динамическая стоп-стратегия может быть адаптирована к волатильности рынка
  3. Фиксированный риск-прибыль соотношение способствует долгосрочной стабильной прибыли
  4. Ограничение минимального срока хранения позволило избежать чрезмерной торговли.
  5. Система визуальной маркировки для стратегического мониторинга и обратной связи
  6. Изменение цвета фона интуитивно отображает текущее состояние позиции

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

  1. Двухлинейная система может создавать ложные сигналы в ураганных городах
  2. RSI может упустить некоторые торговые возможности в сильных тенденциях
  3. Фиксированный риск-прибыль может быть недостаточно гибким в некоторых рыночных условиях
  4. ATR-остановка может оказаться недостаточно своевременной при волатильных изменениях
  5. Минимальное время хранения позиций может привести к упущенным возможностям своевременного прекращения убытков

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("JakeJohn", overlay=true)

// Input parameters
smaShortLength = input(9, title="Short SMA Length")
smaLongLength = input(21, title="Long SMA Length")
lengthRSI = input(14, title="RSI Length")
rsiOverbought = input(65, title="RSI Overbought Level")
rsiOversold = input(35, title="RSI Oversold Level")
riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1
atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss

// Calculate indicators
smaShort = ta.sma(close, smaShortLength)
smaLong = ta.sma(close, smaLongLength)
rsi = ta.rsi(close, lengthRSI)
atr = ta.atr(14)

// Entry conditions
longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold
shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought

// Variables for trade management
var float entryPrice = na
var float takeProfit = na
var int entryBarIndex = na

// Entry logic for long trades
if (longCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Buy", strategy.long)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

// Entry logic for short trades
if (shortCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Sell", strategy.short)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)

// Manage trade duration and exit after a minimum of 3 hours
if (strategy.position_size != 0)
    // Check if the trade has been open for at least 3 hours (180 minutes)
    if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars
        if (strategy.position_size > 0)
            strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit)
        else
            strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit)

// Background colors for active trades
var color tradeColor = na
if (strategy.position_size > 0)
    tradeColor := color.new(color.green, 90) // Light green for long trades
else if (strategy.position_size < 0)
    tradeColor := color.new(color.red, 90) // Light red for short trades
else
    tradeColor := na // No color when no trade is active

bgcolor(tradeColor, title="Trade Background")

// Plotting position tools
if (strategy.position_size > 0)
    // Plot long position tool
    strategy.exit("TP Long", limit=takeProfit)
    
if (strategy.position_size < 0)
    // Plot short position tool
    strategy.exit("TP Short", limit=takeProfit)

// Plotting indicators
plot(smaShort, color=color.green, title="Short SMA", linewidth=2)
plot(smaLong, color=color.red, title="Long SMA", linewidth=2)

// Visual enhancements for RSI
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi, color=color.blue, title="RSI", linewidth=2)

// Ensure there's at least one plot function
plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance