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

MACD RSI BB ATR SMA SD
Дата создания: 2024-11-29 14:54:57 Последнее изменение: 2024-11-29 14:54:57
Копировать: 0 Количество просмотров: 506
1
Подписаться
1617
Подписчики

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

Обзор

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

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

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

  1. MACD ((12,26,9) используется для захвата сигнала конвертации динамики, когда MACD-линия генерирует сигнал покупки при прохождении линии сигнала и генерирует сигнал продажи при прохождении
  2. RSI ((14) в качестве вторичного фильтра, ниже 35 считается зоной перепродажи, выше 65 считается зоной перекупа
  3. Брин-полоса ((20, 2) используется для идентификации диапазона колебаний цены, когда цена касается нижнего трека, чтобы рассмотреть покупку, когда она касается верхнего трека, чтобы рассмотреть продажу
  4. ATR используется для динамического настройки уровней стоп-лосса и прибыли, стоп-лосса устанавливается в 3 раза ATR, а прибыль - в 5 раз 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)