Это стратегия прорыва, основанная на ценовом канале, в сочетании с индикаторами скользящей средней и последующей остановкой / получением прибыли для входа и выхода.
Стратегия рассчитывает скользящие средние высоких/низких цен, чтобы сформировать ценовой канал. В частности, она вычисляет длину 10 SMA высоких/низких цен, чтобы составить график верхней и нижней полосы канала. Когда цена выходит выше нижней полосы в верхнюю полосу, она входит в длинный. Когда цена выходит из верхней полосы в нижнюю полосу, она входит в короткий.
После входа стратегия использует либо фиксированный стоп-лосс, либо отслеживающий стоп для выхода. Отслеживающий стоп состоит из двух параметров: фиксированный уровень прибыли и активирующий офсет. Когда цена достигает активационного офсета, уровень прибыли начинает отслеживать цену. Это позволяет блокировать прибыль, сохраняя некоторое открытое пространство.
Стратегия также сочетает в себе фильтр временного диапазона, выполняющий только обратные тесты в течение определенного исторического периода времени, для проверки производительности на разных этапах рынка.
Стратегия использует ценовой канал и тренд с последующей остановкой, что позволяет отслеживать направления тренда в среднесрочной и долгосрочной перспективе.
В целом, стратегия имеет четкую логику, минимальные показатели и параметры, легко проверяется, подходит для средне- и долгосрочной торговли трендами и может получать прибыль от сильных тенденций.
Стратегия имеет тенденцию легко останавливаться во время колебаний, неуравновешенных рынков, не способных поддерживать прибыль.
Настройка параметров довольно субъективна, требуя корректировки на разных этапах рынка.
Другие индикаторы, такие как объем, полосы Боллинджера, могут быть включены для фильтрации сигналов входа, избегая ловушек.
Правила выхода могут быть обновлены до последующей остановки или Chandelier Exit. Частичные цели прибыли могут быть рассмотрены, когда цена вновь входит в канал. Оптимизация фильтров входа и правил выхода может значительно улучшить стабильность стратегии.
В общем, это количественная стратегия, основанная на ценовом канале, следующем тренду, управлении стоп-лосом / получением прибыли. Она имеет четкий логический поток, простую структуру параметров, легко понятную и обратную проверку. Она подходит для изучения алгоритмических торговых концепций. Стратегия может быть улучшена в различных аспектах для улучшения стабильности и прибыльности. Основная идея заключается в том, чтобы улавливать направление тренда и управлять рисками с помощью стоп-лосса и получения прибыли.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-21 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true ) // Generalized SSL: // This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. // It is based on moving averages of the highs and lows. // Similar channel indicators can be found, whereas // this one implements the persistency inside the channel, which is rather tricky. // The green line is the base line which decides entries and exits, possibly with trailing stops. // With respect to the original version, here one can play with different moving averages. // The default settings are (10,SMA) // // Vitelot/Yanez/Vts March 2019 lb = input(10, title="Lb", minval=1) maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"]) fixedSL = input(title="SL Activation", defval=300) trailSL = input(title="SL Trigger", defval=1) fixedTP = input(title="TP Activation", defval=150) trailTP = input(title="TP Trigger", defval=1) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2017) ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 19, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window startTimeOk() => true // create function "within window of time" if statement true // QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain // QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap hma(sig, n) => // Hull moving average definition wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n))) mcg(sig,length) => // Mc Ginley MA definition mg = 0.0 mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4)) tenkan(sig,len) => 0.5*(highest(sig,len)+lowest(sig,len)) ma(t,sig,len) => sss=na if t =="SMA" sss := sma(sig,len) if t == "EMA" sss := ema(sig,len) if t == "HMA" sss := hma(sig,len) if t == "McG" // Mc Ginley sss := mcg(sig,len) if t == "Tenkan" sss := tenkan(sig,len) if t == "WMA" sss := wma(sig,len) sss base(mah, mal) => bbb = na inChannel = close<mah and close>mal belowChannel = close<mah and close<mal bbb := inChannel? bbb[1]: belowChannel? -1: 1 uuu = bbb==1? mal: mah ddd = bbb==1? mah: mal [uuu, ddd] maH = ma(maType, high, lb) maL = ma(maType, low, lb) [up, dn] = base(maH,maL) plot(up, title="High MA", color=lime, linewidth=3) plot(dn, title="Low MA", color=orange, linewidth=3) long = crossover(dn,up) short = crossover(up,dn) // === STRATEGY - LONG POSITION EXECUTION === strategy.entry("Long", strategy.long, when= long and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= short) // === STRATEGY - SHORT POSITION EXECUTION === strategy.entry("Short", strategy.short, when= short and startTimeOk()) strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) strategy.exit("Exit", when= long)