Эта стратегия позволяет своевременно отслеживать тенденции, отслеживая динамические изменения в показателях ADX, улавливая первоначальные изменения рыночных тенденций. Когда ADX быстро поднимается с низких уровней, это означает, что тенденция формируется, и это отличный момент для входа.
Эта стратегия основана на динамических изменениях в показателях ADX, чтобы судить о развитии тренда. Когда показатель ADX находится в низком положении, он представляет собой незначительное изменение тренда; когда ADX быстро поднимается с низкого уровня, это означает, что тренд формируется.
В частности, для принятия в стратегию необходимо соблюдать следующие критерии:
При одновременном выполнении вышеуказанных условий, представляет тенденцию, которая формируется, и делает больше; в настоящее время, когда пересекается движущаяся средняя, равновесие. Использование двух движущихся средних позволяет более точно судить о развитии тенденции.
Похожие условия для остановки убытков, когда ADX стремительно падает вниз, делается пустой; когда цена пробивается ниже подвижной средней, делается равновесная позиция.
Наибольшее преимущество этой стратегии заключается в том, что она своевременно улавливает развитие тенденции. Традиционный метод, основанный на оценке ADX, часто требует, чтобы ADX поднялся до 20 или 25 для подтверждения тенденции, что упускает лучший момент входа.
Кроме того, в стратегии также введены подвижные средние, которые могут эффективно отфильтровывать ошибочные диагнозы и повышать стабильность стратегии.
Наибольший риск этой стратегии заключается в задержке самого индикатора ADX. Несмотря на то, что задержка может быть сокращена путем отслеживания быстрого роста, она все еще существует. Это может привести к тому, что некоторые быстро меняющиеся рынки не будут захвачены.
Кроме того, индикатор ADX не является стопроцентно точным в определении тенденций, и неизбежно возникает некоторая ошибочная диагностика. Хотя введение подвижных средних фильтрует часть шума, все же требуется дальнейшая оптимизация.
В этой стратегии есть много возможностей для оптимизации. Ключевым является дальнейшее повышение точности захвата показателей ADX. Можно рассмотреть такие методы, как внедрение машинного обучения, обучение моделей распределению вероятности после изменения ADX. Кроме того, можно попробовать различные комбинации параметров, другие вспомогательные показатели и другие методы для тестирования оптимизации.
Эта динамическая стратегия отслеживания тенденций ADX, позволяющая своевременно отслеживать тенденции, захватывая рыночные изменения, при которых ADX быстро повышается. Наибольшим преимуществом является то, что она очень быстро и эффективно улавливает тенденции на ранних этапах.
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dhilipthegreat
//@version=4
//Rising ADX strategy
strategy(title="Rising ADX strategy", overlay=false)
adxlen = input(14, title="ADX Length", minval=1)
threshold = input(10, title="threshold", minval=5)
hline(threshold, color=color.black, linestyle=hline.style_dashed)
atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen=input(20, title="Moving average 1 ",minval=1, maxval=50)
avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na
atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen2=input(20, title="Moving average 2",minval=1, maxval=200)
avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na
//ADX&DI
dilen = 14
dirmov(len,_high,_low,_tr) =>
up = change(_high)
down = -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 = rma(_tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen,_high,_low,_tr) =>
[plus, minus] = dirmov(dilen,_high,_low,_tr)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
[plus, minus] = dirmov(dilen,high,low,tr)
sig = adx(dilen, adxlen,high,low,tr)
prev_sig = adx(dilen, adxlen,high[1],low[1],tr)
plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2)
//////
longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2
barcolor(longCondition ? color.yellow: na)
Long_side = input(true, "Long side")
if Long_side
strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1)
exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2
strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all
shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2
barcolor(shortCondition ? color.gray: na)
Short_side = input(true, "Short side")
if Short_side
strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1)
sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2
strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all
barcolor(strategy.position_size>1 ? color.lime: na)
bgcolor(strategy.position_size>1 ? color.lime: na)
barcolor(strategy.position_size<0 ? color.orange: na)
bgcolor(strategy.position_size<0 ? color.orange: na)