
Эта стратегия в сочетании с использованием индикатора Движущегося среднего индекса ((ADX) и индикатора Повышенного Движения ((DI+) обеспечивает основу для определения направления и тенденции рынка, а также использует быстрые и медленные движущиеся средние для определения направления торговли и времени удержания. Эта стратегия относится к торговым стратегиям типа слежения за тенденцией.
Основная логика стратегии заключается в том, что, когда + DI линия прорывает ADX с нижнего направления, создается сигнал покупки, а когда + DI линия падает с верхнего направления, создается сигнал продажи. Таким образом, стратегия зависит от пересечения между показателями DI и ADX для определения тенденции рынка и поворотных точек. В то же время, связь между быстрой и медленной линиями используется для определения тенденции рынка в целом, и только тогда, когда быстрая EMA выше, чем медленная EMA, рассматривается возможность создания торгового сигнала.
В частности, сигнал “купить” появляется при выполнении следующих условий: 1, быстрая ЭМА выше, чем медленная ЭМА 2, + DI линия прорывает ADX линию снизу 3 ADX ниже 30
Сигнал “продажа” выдается, когда выполняются следующие условия: 1, ADX выше 30 2, + DI линия падает сверху вниз по линии ADX
Также в стратегию добавлена логика стоп-ложа, когда цена выходит из всех позиций ниже цены стоп-ложа.
Эта стратегия в сочетании с DI, ADX и среднелинейными показателями позволяет эффективно определять переломные моменты в рыночных тенденциях. Она имеет следующие преимущества:
В этой стратегии также есть некоторые риски, о которых следует помнить:
Эти риски могут быть улучшены путем оптимизации параметров ADX и средней линии, корректировки уровня остановки, в сочетании с другими индикаторами, подтверждающими сигналы и т. Д.
В этой стратегии есть место для дальнейшей оптимизации:
Стратегия пересечения ADX в целом является более стабильной и эффективно улавливает переменные пространства в предварительном периоде колебаний, но необходимо обратить внимание на контроль риска. Лучший риск-корректированный доход может быть получен путем дальнейшей оптимизации параметров, строгих правил входа и остановки, и т. Д. Эта стратегия применима к коротким торговым счетам, которые держат длинные линии.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee
//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00
strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD)
len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)
fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1) //
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:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)
fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)
//long condition
longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal
barcolor(longCondition ? color.yellow: na)
strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1)
barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)
//Add
strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) )
//calculate stop Loss
stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01)
strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss
//exit condition
exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all