Динамическая адаптивная многоиндикаторная кроссоверная стратегия в сочетании с интеллектуальной системой контроля рисков SRSI и MACD

RSI SRSI MACD ATR
Дата создания: 2025-02-20 13:07:37 Последнее изменение: 2025-02-27 17:44:09
Копировать: 1 Количество просмотров: 329
2
Подписаться
319
Подписчики

Динамическая адаптивная многоиндикаторная кроссоверная стратегия в сочетании с интеллектуальной системой контроля рисков SRSI и MACD Динамическая адаптивная многоиндикаторная кроссоверная стратегия в сочетании с интеллектуальной системой контроля рисков SRSI и MACD

Обзор

Стратегия представляет собой динамическую торговую систему, которая сочетает в себе случайные, относительно слабые индикаторы (SRSI) и индикаторы движущегося среднего тренда/распространения (MACD). Она обеспечивает динамическое регулирование стоп- и стоп-пойнтов с помощью индикатора ATR, обеспечивая интеллектуальное управление риском.

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

Стратегия основана на нескольких ключевых механизмах:

  1. Оценить движение рынка путем расчета разницы между K-линией и D-линией в SRSI и разницы между K-линией и унифицированной MACD
  2. Одновременно необходимо выполнить условия покупки: положительная разница K-D, положительная разница K-MACD, и MACD не находится в тенденции к снижению
  3. Условия продажи должны выполняться одновременно: разница K-D отрицательная, разница K-MACD отрицательная, и MACD не находится в восходящем тренде
  4. Используйте ATR, умноженный на коэффициент риска, для динамического расчета стоп-лора и стоп-дистанции, адаптируясь к волатильности рынка

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

  1. Механизм подтверждения нескольких сигналов значительно повышает надежность торговли, избегая ложных сигналов, которые могут быть вызваны одним показателем.
  2. Динамическая стоп-стоп-настройка позволяет автоматически корректироваться в зависимости от рыночных колебаний, обеспечивая лучший риск-прибыль соотношение
  3. Стратегия обладает хорошей адаптивностью и может стабильно работать в различных рыночных условиях
  4. Параметры являются регулируемыми, что позволяет трейдерам оптимизировать их в соответствии с личными предпочтениями в отношении риска

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-09-01 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(title="SRSI + MACD Strategy with Dynamic Stop-Loss and Take-Profit", shorttitle="SRSI + MACD Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// User Inputs
smoothK = input.int(3, "K", minval=1) 
smoothD = input.int(3, "D", minval=1) 
lengthRSI = input.int(16, "RSI Length", minval=1) 
lengthStoch = input.int(16, "Stochastic Length", minval=1) 
src = input(close, title="RSI Source") 
enableStopLoss = input.bool(true, "Enable Stop-Loss")  
enableTakeProfit = input.bool(true, "Enable Take-Profit")  
riskFactor = input.float(2.5, "Risk Factor", minval=0.1, step=1)  

// Calculate K and D lines
rsi1 = ta.rsi(src, lengthRSI) 
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) 
d = ta.sma(k, smoothD) 
differenceKD = k - d 

// Calculate MACD and normalization
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) 
lowestK = ta.lowest(k, lengthRSI) 
highestK = ta.highest(k, lengthRSI) 
normalizedMacd = (macdLine - ta.lowest(macdLine, lengthRSI)) / (ta.highest(macdLine, lengthRSI) - ta.lowest(macdLine, lengthRSI)) * (highestK - lowestK) + lowestK 
differenceKMacd = k - normalizedMacd 

// Sum both differences for a unique display
differenceTotal = (differenceKD + differenceKMacd) / 2

// Check if MACD is falling or rising
isMacdFalling = ta.falling(macdLine, 1)  
isMacdRising = ta.rising(macdLine, 1)  

// Check if K is falling or rising
isKFalling = ta.falling(k, 1)  
isKdRising = ta.rising(k, 1)  

// Calculate ATR and dynamic levels
atrValue = ta.atr(14)  
stopLossDistance = atrValue * riskFactor  
takeProfitDistance = atrValue * riskFactor  

// Variables for stop-loss and take-profit levels
var float longStopPrice = na
var float longTakeProfitPrice = na

// Buy and sell conditions with differenceKD added
buyCondition = ((differenceTotal > 0 or differenceKD > 0) and (isKdRising or isMacdRising) and k < 20 )  
sellCondition = ((differenceTotal <= 0 or differenceKD <= 0) and (isKFalling or isMacdFalling) and k > 80)  

// Execute strategy orders with conditional stop-loss and take-profit
if buyCondition and strategy.position_size == 0
    strategy.entry("Buy", strategy.long)

if strategy.position_size > 0
    longStopPrice := strategy.position_avg_price - stopLossDistance  
    longTakeProfitPrice := strategy.position_avg_price + takeProfitDistance  

    if enableStopLoss or enableTakeProfit
        strategy.exit("Sell/Exit", "Buy", stop=(enableStopLoss ? longStopPrice : na), limit=(enableTakeProfit ? longTakeProfitPrice : na))

if sellCondition
    strategy.close("Buy")  

// Hide lines when position is closed
stopLossToPlot = strategy.position_size > 0 ? longStopPrice : na
takeProfitToPlot = strategy.position_size > 0 ? longTakeProfitPrice : na

// Plot stop-loss and take-profit lines only when long positions are active
plot(enableStopLoss ? stopLossToPlot : na, title="Stop-Loss", color=color.yellow, linewidth=1, style=plot.style_linebr, offset=0, force_overlay=true) 
plot(enableTakeProfit ? takeProfitToPlot : na, title="Take-Profit", color=color.yellow, linewidth=1, style=plot.style_linebr, offset=0, force_overlay=true)

// Plot the MACD and candles

plot(normalizedMacd, "Normalized MACD", color=color.new(color.purple, 0), linewidth=1, display=display.all)

h0 = hline(80, "Upper Band", color=#787B86) 
hline(50, "Middle Band", color=color.new(#787B86, 50)) 
h1 = hline(20, "Lower Band", color=#787B86) 
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")

// New candle based on the sum of differences
plotcandle(open=0, high=differenceTotal, low=0, close=differenceTotal, color=(differenceTotal > 0 ? color.new(color.green, 60) : color.new(color.red, 60)), title="K-D + MACD Candles")