Стратегия торговли ADX Crossover


Дата создания: 2023-12-08 15:49:12 Последнее изменение: 2023-12-08 15:49:12
Копировать: 0 Количество просмотров: 961
1
Подписаться
1621
Подписчики

Стратегия торговли ADX Crossover

Обзор

Эта стратегия в сочетании с использованием индикатора Движущегося среднего индекса ((ADX) и индикатора Повышенного Движения ((DI+) обеспечивает основу для определения направления и тенденции рынка, а также использует быстрые и медленные движущиеся средние для определения направления торговли и времени удержания. Эта стратегия относится к торговым стратегиям типа слежения за тенденцией.

Принципы

Основная логика стратегии заключается в том, что, когда + DI линия прорывает ADX с нижнего направления, создается сигнал покупки, а когда + DI линия падает с верхнего направления, создается сигнал продажи. Таким образом, стратегия зависит от пересечения между показателями DI и ADX для определения тенденции рынка и поворотных точек. В то же время, связь между быстрой и медленной линиями используется для определения тенденции рынка в целом, и только тогда, когда быстрая EMA выше, чем медленная EMA, рассматривается возможность создания торгового сигнала.

В частности, сигнал “купить” появляется при выполнении следующих условий: 1, быстрая ЭМА выше, чем медленная ЭМА 2, + DI линия прорывает ADX линию снизу 3 ADX ниже 30

Сигнал “продажа” выдается, когда выполняются следующие условия: 1, ADX выше 30 2, + DI линия падает сверху вниз по линии ADX

Также в стратегию добавлена логика стоп-ложа, когда цена выходит из всех позиций ниже цены стоп-ложа.

Преимущества

Эта стратегия в сочетании с DI, ADX и среднелинейными показателями позволяет эффективно определять переломные моменты в рыночных тенденциях. Она имеет следующие преимущества:

  1. Используйте индикаторы DI и ADX для определения обратных сигналов, точного расположения входных и выходных точек
  2. EMA Filter System помогает быстро оценивать тенденции и избегать ошибок в торговле
  3. Используйте значение ADX для определения сильной или слабой тенденции, торгуйте только при слабой тенденции, избегайте риска ложного прорыва
  4. Присоединение к механизму сдерживания убытков для контроля нисходящего риска
  5. Строгие условия для участия, чтобы избежать риска покупки и продажи agiri
  6. Условия выезда четкие, своевременная остановка и остановка

Риск

В этой стратегии также есть некоторые риски, о которых следует помнить:

  1. Индекс ADX задерживается и может пропустить лучший момент для переворота цены
  2. При больших рыночных колебаниях индикаторы ADX и DI дают больше ошибочных сигналов
  3. Неправильная средняя скорость может привести к пропущенным торговым возможностям или ошибочным сигналам фильтрации
  4. Стоп-стоп устанавливается слишком мягко и не позволяет эффективно контролировать риск

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

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

В этой стратегии есть место для дальнейшей оптимизации:

  1. Можно тестировать ADX с различными длинами циклов, чтобы найти оптимальную комбинацию параметров
  2. Для подтверждения торговых сигналов можно добавить другие индикаторы, такие как RSI, Брин-бэнд и т. д.
  3. Поиск оптимальных комбинаций и торговых правил на основе алгоритмов машинного обучения
  4. Риск на задержку может быть отрегулирован с помощью динамической корректировки уровня остановок
  5. Можно создать многофакторную оценочную модель, чтобы сделать правила входа и выхода более прочными.

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

Стратегия пересечения 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