Стратегия торговли с комбинацией нескольких индикаторов ADX, RSI, SMA


Дата создания: 2023-09-14 16:19:46 Последнее изменение: 2023-09-14 16:19:46
Копировать: 3 Количество просмотров: 649
1
Подписаться
1166
Подписчики

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

Стратегия использует различные технические индикаторы для определения направления тренда и перекупленных и перепроданных зон для получения торговых сигналов.

Основные показатели включают:

  1. Средний индекс направления ((ADX): определение силы тренда

  2. Относительно слабый индикатор RSI: как оценить перекуп и перепродажу

  3. Смешанная средняя (SMA): оценка краткосрочных тенденций

  4. Экстремальный показатель SAR: долгосрочные и краткосрочные тенденции

  5. Прорыв в канале: прорыв в тренде

Конкретная логика сделки:

  1. ADX считает, что тенденция существует и достаточно сильна

  2. SAR оценивает долгосрочные и краткосрочные тенденции

  3. RSI определяет перекуп и перепродажу

  4. Вход при прорыве цены через среднюю линию SMA

  5. Вход при прорыве цены

Многочисленные показатели взаимно проверяются для повышения точности суждения, различные комбинации стратегий образуют системную торговую систему.

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

  • Комбинированные показатели улучшают качество сигнала

  • Разнообразный набор стратегий, систематическое вхождение

  • ADX идентифицирует тренд, RSI оценивает перекуп и перепродажу

  • SAR, SMA и Channel пробиваются в рынок

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

  • Установка множественных параметров требует повторного тестирования и оптимизации

  • Низкая частота возникновения условий комбинации

  • Показатели трудно обрабатывать при появлении конфликтных сигналов

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

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

Исходный код стратегии
/*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")