Эта стратегия сочетает в себе различные технические индикаторы для определения направления тренда и уровня перекупленности/перепроданности торговых сигналов.
Основными используемыми показателями являются:
Средний направленный индекс (ADX): сила тренда
Индекс относительной силы (RSI): перекупленный/перепроданный
Простая скользящая средняя (SMA): краткосрочная тенденция
СуперТренд: Долгосрочный/короткосрочный тренд
Прорыв канала: прорыв тренда
Логика торговли такова:
ADX показывает присутствие и силу тренда
SuperTrend подтверждает выравнивание долгосрочных и краткосрочных тенденций
РСИ определяет регионы с перекупленностью/перепроданностью
Введите на перекрестке SMA
Введите на канал прорыв
Многоиндикаторная комбинация улучшает точность сигнала.
Многочисленные показатели улучшают качество
Стратегии объединяются для систематического вхождения
ADX определяет тренд, RSI перекупленный/перепроданный
SuperTrend фиксирует тренды, SMA и выход на канал
Многопараметрическая настройка требует оптимизации
Реже встречаются комбинированные заболевания
Конфликтные сигналы показателей трудно разрешить
Эта стратегия полностью использует сильные стороны различных индикаторов для создания надежной системы. Но оптимизация параметров является ключом к идеальной частоте торговли. В целом она сочетает в себе сильную идентификацию тренда с эффективными входами.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-13 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1) adxlen = input(7, title="ADX Smoothing") dilen = input(7, title="DI Length") dirmov(len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) // The same on Pine Script™ pine_supertrend(factor, atrPeriod) => src = hl2 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20 direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] [pineSupertrend, pineDirection] = pine_supertrend(3, 10) upTrend = pineDirection < 0 downTrend = pineDirection > 0 // Define the 20-period SMA sma20 = ta.sma(close, 20) a = ta.rsi(close,14) OB = input(70) OS = input(30) os = a > OB ob = a < OS if upTrend and close > pineSupertrend and close > sma20 and os strategy.entry("Buy", strategy.long) if ta.crossunder(close, sma20) or ob strategy.close_all() //define when to breakout of channel //("ChannelBreakOutStrategy", overlay=true) length = input.int(title="Length", minval=1, maxval=1000, defval=5) upBound = ta.highest(high, length) downBound = ta.lowest(low, length) if (not na(close[length])) strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE") strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")