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

Стратегия импульса двойного скользящего среднего с системой оптимизации риска и вознаграждения

Автор:Чао Чжан, Дата: 2024-11-12 16:00:58
Тэги:SMAРСИATRRR

img

Обзор

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

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

Стратегия использует 9-дневные и 21-дневные скользящие средние в качестве основы для определения тренда, с индикатором RSI зоны перекупленности / перепродажи (35/65) для подтверждения сигнала. Долгие условия входа требуют краткосрочного MA выше долгосрочного MA и RSI на перепроданной территории (ниже 35); короткий вход требует краткосрочного MA ниже долгосрочного MA и RSI на перепроданной территории (выше 65). Стратегия использует значение ATR в 1,5 раза больше для стоп-лосса и автоматически рассчитывает цели прибыли на основе соотношения риск-вознаграждение 2: 1. Чтобы предотвратить перепродажу, реализуется минимальный 3-часовой период удержания.

Преимущества стратегии

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

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

  1. Система двойного MA может генерировать ложные сигналы на различных рынках
  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


Связанные

Больше