
Эта стратегия использует равнолинейную систему для определения направления тренда и в сочетании с показателями волатильности, чтобы избежать низких колебаний в шокирующем рынке, используя шокирующие стопы для управления торговлей.
Стратегия определяет направление тренда, сравнивая позиционные отношения между быстрой средней и медленной средней. Когда быстрая средняя линия проходит медленную среднюю, смотрите больше, а когда проходит низкую, смотрите ниже. Чтобы избежать рыночных потрясений, стратегия также вводит индикатор Брин-банда.
В частности, логика сделки в стратегии выглядит следующим образом:
Вычислить среднескоростную (по умолчанию 20 дней) и среднескоростную (по умолчанию 50 дней)
Вычислить скорость изменения ширины ленты Брин ((по умолчанию 40 дней, в два раза больше стандартного отклонения)).
Когда быстрая средняя линия проходит медленную среднюю линию, и скорость изменения полосы пропускания Brin превышает установленный порог ((по умолчанию 9%), образуется многоголовый сигнал.
Когда скорость пересекает медленную среднюю линию, и скорость изменения полосы пропускания Brin превышает установленный порог ((% по умолчанию)), создается пустой сигнал.
Числитель пустого коридора Чандели как стоп-лост.
Стоп-стоп на множественном уровне - ATR*Умножение, стоп-стоп на пустой конец - минимальная цена + ATR*Умножение.
Используя равнолинейную систему, можно определить направление тенденции и эффективно отслеживать тенденции.
Введение изменения в частоте пропускания пропускной способности позволит избежать рыночных потрясений и сократить количество ненужных сделок.
Используя шок-стоп, можно вовремя остановить повреждение и избежать застрять в шоке.
Многочисленные параметры могут быть настроены и оптимизированы для различных рынков.
Логика стратегии ясна и понятна, и ее легко выучить.
У однолинейной системы есть задержка, возможно, она упустит возможность быстрого обращения.
Неправильная настройка параметров Брин-полосы может отфильтровать эффективные торговые сигналы.
Слишком чувствительный шок может привести к чрезмерной частоте торгов.
Недостаточная оптимизация параметров может привести к рискам для хранения позиций.
“Они не могут адаптироваться к резким изменениям на рынке, вызванным внезапными крупными событиями.
Можно тестировать среднелинейные комбинации различных параметров, чтобы найти оптимальные.
Можно тестировать параметры ленты Брин на разных периодах, чтобы найти оптимальный эффект фильтрации колебаний.
Вместе с другими показателями может быть проведена регистрация для улучшения качества сигнала.
Можно ввести динамическую стратегию остановки убытков, чтобы они лучше отслеживали рынок.
Возможность автоматической оптимизации параметров в сочетании с технологией машинного обучения, адаптирующейся к изменениям рынка.
Эта стратегия объединяет равнолинейную систему, индикатор Бринбелла и технологию шок-стоп, образуя относительно стабильную систему отслеживания трендов. Хороший эффект от стратегии может быть получен с помощью оптимизации параметров. Однако следует быть бдительным к риску обратного тренда и рыночных потрясений, кроме того, технологии, такие как машинное обучение, могут дополнительно повысить устойчивость стратегии.
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 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/
// © juanchez
//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")
n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)
//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")
//moving average function
mo(p, t) =>
if t == "sma"
sma(close[barstate.islast ? 1: 0], p)
else if t== "ema"
ema(close[barstate.islast ? 1: 0], p)
m= mo(period, type)
m2= mo(period2, type)
trend= m2 > m
plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)
//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
float deviation= stdev(src[barstate.islast? 1: 0], lenght)
float lowerband = moving_avg - deviation*multi
float upperband = moving_avg + deviation*multi
[moving_avg, lowerband, upperband]
[bb1, lowerband1, upperband1]= _bb(bb1_source, bb1_period, bb1_multi)
//FIRST BAND
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)
//BB's Width threshold
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)
widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)
// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong
//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort
plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)
out= crossunder(close, long)
outt= crossover(close, short)
strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)
strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)