Высокочастотная торговая стратегия, основанная на супертрендовой поддержке и сопротивлении и индикаторе ADX


Дата создания: 2024-02-19 15:01:36 Последнее изменение: 2024-02-19 15:01:36
Копировать: 1 Количество просмотров: 871
1
Подписаться
1617
Подписчики

Высокочастотная торговая стратегия, основанная на супертрендовой поддержке и сопротивлении и индикаторе ADX

Обзор

Эта стратегия использует сочетание линий сопротивления сверхтенденционной поддержки и показателей ADX для осуществления высокочастотных торгов. Линии сопротивления сверхтенденционной поддержки используются для определения ценового тренда и отправления торговых сигналов путем динамического расчета последней точки сопротивления сверхтенденционной поддержки.

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

  1. Расчет линий поддержки и сопротивления. Принимая за основу цены закрытия, вверх и вниз добавляется величина ATR. Когда цены прорывают эти линии, они рассматриваются как обратный тренд.

  2. Индекс ADX определяет силу тренда. Когда ADX выше установленного значения, считается, что тренд достаточно силен.

  3. Сочетание обоих сигнализирует о торговле. Дополнительное удаление происходит только в том случае, если поддержка преодолевает сопротивление и ADX достаточно большой.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Динамические расчеты сверхлиней тренда поддерживают сопротивление, позволяя быстро определить прорыв.

  2. Индекс ADX эффективно фильтрует не трендовые сценарии, уменьшая неэффективную торговлю.

  3. Отзывы и убытки были хорошими.

Анализ рисков

Также существуют следующие риски:

  1. Большие перепады могут привести к отключению линий сверхтренда.

  2. Неправильная настройка ADX также может повлиять на эффективность стратегии.

  3. Высокочастотные сделки обходятся дороже.

Решение проблемы:

  1. Оптимизация сверхпараметров, надлежащее расслабление прорыва.

  2. Тест на лучшие параметры ADX.

  3. Сокращение частоты транзакций.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация параметров ATR-множества, чтобы сделать поддерживающую линию сопротивления более прочной.

  2. Тестируйте различные параметры ADX, чтобы найти оптимальные значения.

  3. Присоединение к механизму сдерживания убытков для контроля одноразовых убытков

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

Эта стратегия объединяет преимущества сверхтрендовых линий и ADX-индикаторов, используя динамические вычисления для определения времени обратного тренда, поддерживаемого сопротивлением, в сочетании с фильтрацией низкокачественных сигналов ADX-индикаторов. После оптимизации параметров и корректировки механизма может стать стабильно прибыльной высокочастотной стратегией.

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

//@version=4
strategy("STPP20 + ADX", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
AtrFactor=input(defval = 5, title = "ATR Factor", minval = 1, step = 0.1)
AtrPd=input(defval = 20, title = "ATR Period", minval=1)

float ph = na
float pl = na
ph := pivothigh(PPprd, PPprd)
pl := pivotlow(PPprd, PPprd)

float center = na
center := center[1]
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * atr(AtrPd))
Dn = center + (AtrFactor * atr(AtrPd))

float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Lines
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 25
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
outMA = sma(srcMA, lenMA)


// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 

if (buy)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long)


if (sell) and (strategy.position_size > 0)
    strategy.order("Sell", false, when = sell)