Эта стратегия называется “стратегия обратного тренда на основе индикатора ADX”. Она использует индикатор ADX для определения силы тренда, чтобы поймать возможность обратного тренда во время перепродажи.
ADX представляет собой средний трендовый индекс, отражающий силу тренда. Чем выше ADX, тем сильнее тренд. Когда ADX больше 25, считается, что существует более заметная тенденция.
DMI состоит из двух линий DI+ и DI- DI+ показывает тенденцию к росту, а DI- - тенденцию к снижению.
Логика сделки в этой стратегии:
Когда ADX выше 45, считается, что тенденция очень сильная.
Если в данный момент DI+ ниже DI-, то это будет расценено как перепродажа, и появится возможность поменять тренд и сделать больше.
Напротив, если DI- ниже, чем DI+, то это будет расценено как перекуп, и есть возможность обратиться вспять, сделать пустоту.
Возвращаясь назад, она остановилась.
Преимущество этой стратегии заключается в том, что использование ADX для определения обратных точек сильных тенденций, высокие значения ADX могут эффективно отфильтровывать ложные сигналы о шокирующем рынке. Однако параметры ADX требуют оптимизации, и стратегия остановки убытков также важна.
В целом, индикатор ADX лучше всего определяет время, когда сильная тенденция может измениться. Однако трейдеры должны обратить внимание на другие факторы, и ADX является лишь одним из вспомогательных показателей.
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(shorttitle='DMI swings',title='DMI swings', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)
//Backtest dates
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970)
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
//Entry
strategy.entry(id="long", long = true, when = avg_dm > 45 and pos_dm < neg_dm and window())
//Exit
strategy.close("long", when = avg_dm > 45 and pos_dm > neg_dm and window())