Стратегия самостоятельного отслеживания тренда - это количественная торговая стратегия, которая объединяет индикатор Бринбинга и индикатор равновесия, динамически корректируя фактор силы тренда, для достижения трендового отслеживания и остановки. Эта стратегия использует индикатор Бринбинга для расчета колебаний цены, в соответствии с этой динамикой рассчитывает разумную интенсивность тренда, а затем в сочетании с индикатором ATR для создания самостоятельного трендового канала, для достижения оценки и отслеживания тенденции быков и медведей. В то же время, в стратегии встроен механизм остановки потерь, который может эффективно контролировать риск.
Центральным показателем стратегии является брин-пояс. Брин-пояс состоит из средней, верхней и нижней полос. Средняя полоса представляет собой простое движущееся среднее за n дней, верхняя полоса представляет собой n-дневную стандартную разницу средней полосы + k-кратная, а нижняя полоса представляет собой n-дневную стандартную разницу средней полосы - k-кратная.
Затем рассчитывается соотношение полосы пропускания (поверхностно-поверхностно-поверхностно) и среднего полоса пропускания, называемое коэффициентом прочности . Это соотношение отражает текущую рыночную волатильность и интенсивность тренда. Мы устанавливаем максимально-минимальные значения коэффициента прочности, чтобы предотвратить его избыточное или избыточное увеличение.
После получения разумного фактора силы, в сочетании с показателем ATR, вверх и вниз по рельсам перемещаются ATR*Силовой фактор - это расстояние, которое формирует адаптирующийся трендовый канал. Когда цена закрытия взрывается вверх снизу, делайте больше; когда она взрывается вниз вверх, делайте пустоту.
Кроме того, стратегия также устанавливает механизм остановки убытков. Когда формируются многообещающие позиции, если цена падает ниже минимальной точки открытия позиции, то остановка убытков на открытые позиции; так же как и пустые позиции.
Эта стратегия имеет следующие преимущества:
Сильная адаптивность. Способ расчета коэффициента силы позволяет стратегии корректировать ширину каналов в зависимости от динамики рыночных колебаний, расширяя каналы в бычьих рынках и сужая каналы в волатильных рынках, чтобы адаптироваться к различным типам рынков.
Средняя частота операций. По сравнению с простой стратегией движущейся средней, стратегия Брин-пояса регулирует канал с меньшей частотой, что позволяет избежать ненужного частого открытия позиций.
Вход является точным. Вход, который пробивается вверх и вниз, эффективно фильтрует рыночный шум и гарантирует высокую вероятность захвата тренда.
Существует механизм остановки убытков. Встроенный способ остановки убытков позволяет эффективно контролировать одиночные убытки, что является большим преимуществом этой стратегии.
Однако эта стратегия также несет в себе некоторые риски:
Высокая чувствительность параметров. Циклы n и кратность k в Бринской полосе оказывают большое влияние на результаты, требуя повторного тестирования, чтобы найти оптимальную комбинацию параметров.
При рассеивании орбиты брин-пояса невозможно отслеживать тренд. При резких колебаниях цены орбита брин-пояса быстро отрывается, что приводит к невозможности отслеживать тренд. В этом случае необходимо приостановить стратегию и дождаться сближения орбиты.
Иногда возникают ошибочные сигналы. Стратегия Бринбета не идеальна, и могут возникнуть ошибочные сигналы, которые требуют соответствующих потерь.
Стоп-стратегия более проста. Стоп-стратегия, которая учитывает только максимальную и минимальную цены после открытия позиции, без более сложных стоп-стратей, таких как волатильность, может быть слишком радикальной или консервативной и требует оптимизации.
Также необходимо оптимизировать эту стратегию в следующих аспектах:
Эффективность тестирования параметров различных валют и различных периодов. Параметры стратегии могут быть оптимизированы для различных валют и периодов, повышая адаптивность стратегии.
Оптимизация механизмов остановки убытков. Можно ввести мобильные остановки, колебательные остановки, отслеживание остановки и т. д., чтобы сделать остановку более интеллектуальной.
В сочетании с другими показателями фильтрации входа в игру. Можно добавить такие показатели, как MACD, KDJ и т. Д., Чтобы избежать ошибочного сигнала в буринской полосе в поперечном колебании рынка.
Добавление механизмов управления позициями. Внедрение методов управления, таких как отслеживание стоп-стопов, пирамидальные пополнения и фиксированные пропорциональные позиции, может повысить доходность стратегии.
Оптимизация обратной связи. Обзор эффективности стратегии и поиск оптимальных параметров путем расширения диапазона времени обратной связи, корректировки параметров и анализа отчетов о обратной связи.
В целом, это более зрелая количественная стратегия. Она использует динамический захват трендов в биринской полосе, совмещается с показателями ATR, чтобы создать канал адаптации и осуществить суждение о многомерных тенденциях. Вместе с тем, встроенный механизм контроля риска сдерживания убытков. Преимущества этой стратегии заключаются в адаптации частоты работы, точности входа в игру и лучшей управляемости рисками.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)