
Эта стратегия объединяет динамические стоп-линии, сформированные сверхтенденционными индикаторами (Super Trend), опорными точками (Pivot Points) и средней реальной волной (Average True Range, ATR), а также средним индикатором направления (Average Directional Movement Index, ADX) для оценки и отслеживания тенденции. Стратегия подходит для торговли на коротких линиях, она может захватить продолжение тренда после средней дисконтировки.
Супертенденциальный индикатор объединяет опорную точку и остановку ATR, чтобы определить направление, в котором цена прорывает динамическую линию остановки, чтобы определить направление построения позиции. В то же время, индикатор ADX определяет силу тенденции и выдает торговый сигнал только тогда, когда тенденция достаточно сильна.
В частности, точка хребта сначала получает последнюю поддержку и сопротивление, а затем образует динамическую среднюю цену по сравнению с средней за два дня. Затем вычисляется ATR и умножается на ATR, а затем уменьшается по сравнению с динамической средней ценой, чтобы получить поток и падение. Когда цена пробивает поток, она становится позитивной, а когда она пробивает поток, она падает.
Стоп-линия динамически корректируется в соответствии с последними ценами и значениями ATR, что позволяет отлично отслеживать тенденции.
Эта стратегия имеет следующие преимущества:
Используйте сверхтрендовые индикаторы для отслеживания направления движения тренда, чтобы избежать прибыли от рыночных колебаний.
Используйте индикатор ADX для определения силы тренда, чтобы избежать ошибочных сделок при сворачивании.
Динамическая корректировка стоп-линии, максимальная блокировка прибыли.
В сочетании с RSI избегайте купли-продажи.
В целом, параметры стратегии были установлены разумно, в выборе dframe учитывалась непрерывность, а параметры Stop Loss были хорошими.
Однако эта стратегия также несет в себе некоторые риски:
Показатели сверхтренда и показатели МА могут сигнализировать о конфликте.
Индекс ADX устанавливается на 14 циклов и недостаточно чувствителен к внезапным событиям.
RSI параметры установлены по умолчанию, поэтому возможно не удастся полностью избежать перепадов.
Не учитывается влияние неожиданных событий, таких как крупная прибыль/прибыльные новости.
Решение проблемы:
Адаптировать циклы МА, чтобы они соответствовали индикатору сверхтенденции.
Попытка сократить циклы ADX и повысить чувствительность к внезапным событиям.
Оптимизируйте RSI, чтобы найти оптимальные значения.
Присоединяйтесь к новостному фильтру и избегайте важных новостей.
Эта стратегия также может быть оптимизирована в следующих аспектах:
В дополнение к этому, мы можем использовать модели машинного обучения, чтобы оценивать тенденции и принимать более разумные торговые решения.
Попробуйте использовать альтернативные ADX-индикаторы, такие как эмоциональные индикаторы, для определения силы тренда.
Добавлена адаптивная модуль для более динамичного и точного торможения.
Подобные методы позволяют оптимизировать общую стратегию с помощью глубокого обучения.
Для разработки стратегий используйте высокотехнологичные языки, такие как 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")