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

Динамическая адаптивная стратегия торговли (MTDAT) по многотехническим показателям

Автор:Чао Чжан, Дата: 2024-11-29 14:54:57
Тэги:MACDРСИББATRSMAСД

img

Обзор

Эта стратегия представляет собой комплексную торговую систему, основанную на нескольких технических показателях, объединяющую MACD, RSI, полосы Боллинджера и ATR для захвата как тренда, так и возможностей для обратного движения. Стратегия использует динамические механизмы остановки потерь и получения прибыли, адаптируя торговые параметры в соответствии с волатильностью рынка при эффективном контроле рисков. Результаты бэкстестинга показывают доходность 676,27% за трехмесячный тестовый период, демонстрируя хорошую адаптивность рынка.

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

Стратегия использует многоуровневую систему валидации технических показателей, включающую:

  1. MACD ((12,26,9) для захвата сигналов сдвига импульса, генерации сигналов покупки, когда линия MACD пересекает линию сигнала выше и сигналов продажи, когда пересекает ниже
  2. RSI ((14) как вторичный фильтр, с показаниями ниже 35 считается перепроданным и выше 65 перекупленным
  3. Bollinger Bands ((20,2)) для определения диапазонов волатильности цен, учитывая покупки на нижних уровнях диапазона и продажи на верхних уровнях диапазона
  4. ATR для динамического установления целей стоп-лосса и прибыли, при этом стоп-лосс должен быть 3x ATR и целевой прибыль - 5x ATR

Система автоматически корректирует уровни стоп-лосса и прибыли на основе волатильности рынка в режиме реального времени, оптимизируя динамическое управление рисками.

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

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

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

  1. Многочисленные показатели могут привести к отставанию сигналов, упущенным возможностям на быстрых рынках
  2. Максимальное использование 56,33% требует значительной терпимости к риску
  3. Частая торговля может повлечь за собой высокие затраты на транзакции
  4. Стратегия может подвергаться значительным рискам на сильно волатильных рынках

Рекомендации по контролю риска:

  • Строгое выполнение плана управления деньгами
  • Регулярное пересмотр и корректировка параметров
  • Перерыв торговли во время основных пресс-релизов
  • Установление предельных суточных потерь

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

  1. Оптимизация параметров:

    • Рассмотреть возможность использования параметров индикатора адаптивного периода
    • Оптимизировать настройки мультипликатора ATR для улучшения соотношения риск-вознаграждение
  2. Улучшение сигнальной системы:

    • Добавить подтверждение показателя объема
    • Включить показатели настроения рынка
  3. Улучшение управления рисками:

    • Внедрить динамическое размещение позиций
    • Добавить фильтры по времени
  4. Технические улучшения:

    • Добавить фильтры волатильности рынка
    • Оптимизировать время входа и выхода

Резюме

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


/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("XAUUSD STRATEGY 10MIN", overlay=true)

// Spread Adjustment (38-point spread)
spread = 38 * syminfo.mintick       

// MACD Calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdBuy = ta.crossover(macdLine, signalLine)
macdSell = ta.crossunder(macdLine, signalLine)

// RSI Calculation
rsi = ta.rsi(close, 14)
rsiOverbought = rsi > 65
rsiOversold = rsi < 35

// Bollinger Bands Calculation
basis = ta.sma(close, 20)
dev = 2 * ta.stdev(close, 20)
upperBand = basis + dev
lowerBand = basis - dev

// ATR Calculation for Volatility-Based Stop Loss and Take Profit
atr = ta.atr(14)
stopLoss = 3 * atr
takeProfit = 5 * atr

// Variables to track entry price and line
var line entryLine = na
var int tradeNumber = 0
var string tradeType = ""
var string tradeSignalComment = ""

// Buy Condition
buyCondition = (macdBuy or rsiOversold or close < lowerBand)

// Sell Condition
sellCondition = (macdSell or rsiOverbought or close > upperBand)

// Strategy Entry and Alerts
if (buyCondition and strategy.opentrades == 0)  // Open a new buy trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by adding the spread (ask price)
    buyPrice = close + spread

    // Enter a new buy trade at the ask price, and close it with the bid price
    strategy.entry("Buy", strategy.long, stop=buyPrice - stopLoss, limit=buyPrice + takeProfit, comment="Enter buy $" + str.tostring(buyPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Long"
    tradeSignalComment := "Enter buy trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, buyPrice, bar_index + 50, buyPrice, width=1, color=color.green, style=line.style_dotted)
    
    // Send alert for the buy entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(buyPrice), alert.freq_once_per_bar_close)

if (sellCondition and strategy.opentrades == 0)  // Open a new sell trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by subtracting the spread (bid price)
    sellPrice = close - spread

    // Enter a new sell trade at the bid price, and close it with the ask price
    strategy.entry("Sell", strategy.short, stop=sellPrice + stopLoss, limit=sellPrice - takeProfit, comment="Enter sell $" + str.tostring(sellPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Short"
    tradeSignalComment := "Enter sell trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, sellPrice, bar_index + 50, sellPrice, width=1, color=color.red, style=line.style_dotted)
    
    // Send alert for the sell entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(sellPrice), alert.freq_once_per_bar_close)

// Exit conditions and alerts
if (strategy.position_size > 0 and sellCondition)  // Close buy when sell conditions met
    // Adjust the exit price by subtracting the spread (bid price)
    exitPrice = close - spread
    strategy.close("Buy", comment="Exit buy $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the buy exit
    tradeType := "Exit Long"
    tradeSignalComment := "Exit buy trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - "  + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and buyCondition)  // Close sell when buy conditions met
    // Adjust the exit price by adding the spread (ask price)
    exitPrice = close + spread
    strategy.close("Sell", comment="Exit sell $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the sell exit
    tradeType := "Exit Short"
    tradeSignalComment := "Exit sell trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

// Plot Indicators
plot(upperBand, title="Upper Bollinger Band", color=color.blue)
plot(lowerBand, title="Lower Bollinger Band", color=color.blue)


Связанные

Больше