
Супертрендовая торговая стратегия (англ. Supertrend Trading Strategy) - это стратегия отслеживания трендов, основанная на среднем реальном диапазоне (англ. Average True Range (ATR)) и движущейся средней (англ. Moving Average (MA)). Она объединяет преимущества трендового отслеживания и прорывной торговли, чтобы идентифицировать среднесрочное направление тренда и генерировать торговые сигналы в зависимости от изменения тренда.
Основная идея этой стратегии заключается в том, что, когда цена прорывает канал супертенденции, она показывает, что тенденция изменилась, и в этот момент совершается покупка или продажа. Она одновременно устанавливает уровни стоп-лосса и стоп-стопа для блокирования прибыли и контроля риска.
Процесс вычисления стратегии супертенденций состоит из следующих этапов:
Преимущество этой стратегии заключается в том, что она одновременно сочетает в себе торговые методы, которые следуют тренду и обратному тренду. Она позволяет не только определить направление большого тренда, но и вовремя захватить возможность обратного пути. Кроме того, она также устанавливает механизм остановки убытков для контроля риска.
Стратегия супертенденций имеет следующие преимущества:
1. Следить за среднесрочными тенденциями
Супертенденционный канал основан на расчетах ATR и эффективно отражает среднесрочные колебания цен. Он лучше отслеживает среднесрочные тенденции, чем обычная скользящая средняя.
2. Вовремя зафиксировать обратный тренд
Быстрое подача торговых сигналов при прорыве ценового канала позволяет вовремя уловить обратный тренд. Это обеспечивает надлежащую корректировку позиции и уменьшение задержки.
3. Механизм сдерживания повреждений
Эта стратегия устанавливает одновременно и стоп-пост, и стоп-прекращение. Это значительно уменьшает риск распространения стоп-поста, что помогает уловить тенденцию.
4. Простая реализация
Эта стратегия использует в основном среднюю линию и показатели ATR, что делает ее более простой и легкой в освоении. Это уменьшает сложность работы на дискете.
5. Эффективность использования средств
Стратегия супер-трендов отслеживает среднесрочные тенденции и контролирует отдельные скольжения, а общая эффективность использования средств выше.
Супер-трендные стратегии также имеют некоторые потенциальные риски:
1. Высокая стоимость возможности для шокирующего тренда
Стратегия супертенденций ориентирована на отслеживание средне- и долгосрочных тенденций, в условиях, когда рынок находится в состоянии шока, издержки могут быть более высокими, и некоторые возможности для декодирования могут быть упущены.
2. Оптимизация параметров влияет на эффект
Выбор ATR-цикла и ATR-множителя оказывает большое влияние на эффективность торговой стратегии. Если параметры установлены неправильно, это может привести к снижению эффективности торгового сигнала.
3. Существует определенная отсталость
Существует определенная задержка в вычислении супертенденционных каналов, что может привести к несвоевременному появлению сигнала. Это основная проблема, которую нужно решить в этой стратегии.
4. Необходимость строгого контроля за потерями
Если стоп-позиции установлены слишком большими или неидеальным уклоном от ветра, это может привести к большим потерям в крайних случаях. Поэтому необходимо строго выполнять стратегию стоп-убытков, чтобы получить стабильную прибыль.
Супертенденциальная стратегия также имеет место для дальнейшей оптимизации, в основном включая:
1. Объединение нескольких циклов ATR
Можно объединить несколько циклов ATR, например, 10-дневный, 20-дневный и т. д., чтобы сформировать комбинированный показатель ATR. Таким образом, можно повысить чувствительность показателя и улучшить проблему задержки.
2. Добавление модуля стратегии стоп-лосса
Кроме того, дополнительные модули стратегии, такие как тройная остановка, колебательная остановка и последовательная остановка, могут способствовать дальнейшему усилению контроля за остановкой, что снижает риск потери.
3. Оптимизация параметров
Оптимизация параметров, таких как циклы ATR, умножение ATR, поиск оптимальной комбинации параметров, может дополнительно повысить стратегическую прибыль. Кроме того, параметры могут быть динамически оптимизированы, выбирая подходящие значения в зависимости от разных сортов и стадий рынка.
4. Интегрированная модель машинного обучения
Наконец, можно попробовать интегрировать модели машинного обучения, чтобы автоматизировать определение тенденций и создание сигналов. Это может уменьшить вмешательство субъективных факторов и, возможно, еще больше повысить стабильность системы стратегий.
Супертенденциальная торговая стратегия использует среднесрочные тренды с использованием среднелинейных и ATR-индикаторов для определения среднесрочных трендов и создания торговых сигналов для автоматического остановки и уменьшения убытков в момент перелома тренда. Эта стратегия, одновременно с тем, как она улавливает большие тренды, также может вовремя использовать некоторые возможности для перелома. Ее преимущества проявляются в трех аспектах слежения за среднесрочными трендами, идентификации перелома тренда и контроля остановки убытков.
Однако в этой стратегии также есть некоторые недостатки, главным образом, недостаточный контроль и задержка в отношении шокирующих ситуаций. Это требует оптимизации во многих аспектах, таких как комбинированный цикл ATR, усиление модуля остановки убытков, оптимизация параметров и внедрение машинного обучения. Это, несомненно, может еще больше повысить стабильность и золотую ставку стратегии супертенденций.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:", defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2039, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10))
Atr = atrValue
if(decimals == 5)
Atr := atrValue * 10000
if(decimals == 4)
Atr := atrValue * 1000
if(decimals == 3)
Atr := atrValue * 100
if(decimals == 2)
Atr := atrValue * 10
//VJ2 Supertrend
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown
linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")
plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")
plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)
//Strategy
Trend_buy = Trend == 1
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na
strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)
strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)
bought = strategy.position_size > strategy.position_size
sold = strategy.position_size < strategy.position_size
longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0)
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0)
longProfit = factor_profit * longStop
shortProfit = factor_profit * shortStop
if(decimals == 5)
longStop := longStop *100000
longProfit := longProfit *100000
if(decimals == 4)
longStop := longStop * 10000
longProfit := longProfit * 10000
if(decimals == 3)
longStop := longStop * 1000
longProfit := longProfit * 1000
if(decimals == 2)
longStop := longStop * 100
longProfit := longProfit *100
if(decimals == 5)
shortStop := shortStop * 100000
shortProfit := shortProfit * 100000
if(decimals == 4)
shortStop := shortStop * 10000
shortProfit := shortProfit * 10000
if(decimals == 3)
shortStop := shortStop * 1000
shortProfit := shortProfit * 1000
if(decimals == 2)
shortStop := shortStop * 100
shortProfit := shortProfit * 100
strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit)
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)