Краткосрочная торговая стратегия, основанная на следовании тренду и индикаторе ADX


Дата создания: 2024-01-22 17:10:55 Последнее изменение: 2024-01-22 17:10:55
Копировать: 0 Количество просмотров: 687
1
Подписаться
1617
Подписчики

Краткосрочная торговая стратегия, основанная на следовании тренду и индикаторе ADX

Обзор

Эта стратегия объединяет динамические стоп-линии, сформированные сверхтенденционными индикаторами (Super Trend), опорными точками (Pivot Points) и средней реальной волной (Average True Range, ATR), а также средним индикатором направления (Average Directional Movement Index, ADX) для оценки и отслеживания тенденции. Стратегия подходит для торговли на коротких линиях, она может захватить продолжение тренда после средней дисконтировки.

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

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

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

Стоп-линия динамически корректируется в соответствии с последними ценами и значениями ATR, что позволяет отлично отслеживать тенденции.

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

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

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

  2. Используйте индикатор ADX для определения силы тренда, чтобы избежать ошибочных сделок при сворачивании.

  3. Динамическая корректировка стоп-линии, максимальная блокировка прибыли.

  4. В сочетании с RSI избегайте купли-продажи.

  5. В целом, параметры стратегии были установлены разумно, в выборе dframe учитывалась непрерывность, а параметры Stop Loss были хорошими.

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

Однако эта стратегия также несет в себе некоторые риски:

  1. Показатели сверхтренда и показатели МА могут сигнализировать о конфликте.

  2. Индекс ADX устанавливается на 14 циклов и недостаточно чувствителен к внезапным событиям.

  3. RSI параметры установлены по умолчанию, поэтому возможно не удастся полностью избежать перепадов.

  4. Не учитывается влияние неожиданных событий, таких как крупная прибыль/прибыльные новости.

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

  1. Адаптировать циклы МА, чтобы они соответствовали индикатору сверхтенденции.

  2. Попытка сократить циклы ADX и повысить чувствительность к внезапным событиям.

  3. Оптимизируйте RSI, чтобы найти оптимальные значения.

  4. Присоединяйтесь к новостному фильтру и избегайте важных новостей.

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

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

  1. В дополнение к этому, мы можем использовать модели машинного обучения, чтобы оценивать тенденции и принимать более разумные торговые решения.

  2. Попробуйте использовать альтернативные ADX-индикаторы, такие как эмоциональные индикаторы, для определения силы тренда.

  3. Добавлена адаптивная модуль для более динамичного и точного торможения.

  4. Подобные методы позволяют оптимизировать общую стратегию с помощью глубокого обучения.

  5. Для разработки стратегий используйте высокотехнологичные языки, такие как Python, чтобы увеличить масштабируемость стратегий.

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

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

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

//@version=5
strategy("Bendre ADX STrend", overlay = true)

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

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 21, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2023"), title="Start Date")
EndDate = input(timestamp("12 Jan 2024"), title="End Date")
window()  => true

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

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

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

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.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 = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.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 = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


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

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

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)

//
// DMI - Direction Movement Index
// 
[diplus1, diminus1, adx] = ta.dmi(14, 14)

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


if (buy and vrsi > overBought and adx > 19)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long, when = window())
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

if(sell and vrsi < overSold and adx > 25)
    strategy.entry("Sell", strategy.short, when = window())

if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) )
    strategy.close("Sell", "close Sell")

// if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold)
//     strategy.entry("Sell", strategy.short, when = window())

// if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0  and (buy))
//     strategy.close("Sell", "close Sell")