Торговая стратегия Supertrend, основанная на комбинации ATR и MA


Дата создания: 2023-12-01 16:40:27 Последнее изменение: 2023-12-01 16:40:27
Копировать: 0 Количество просмотров: 1074
1
Подписаться
1619
Подписчики

Торговая стратегия Supertrend, основанная на комбинации ATR и MA

Обзор

Супертрендовая торговая стратегия (англ. Supertrend Trading Strategy) - это стратегия отслеживания трендов, основанная на среднем реальном диапазоне (англ. Average True Range (ATR)) и движущейся средней (англ. Moving Average (MA)). Она объединяет преимущества трендового отслеживания и прорывной торговли, чтобы идентифицировать среднесрочное направление тренда и генерировать торговые сигналы в зависимости от изменения тренда.

Основная идея этой стратегии заключается в том, что, когда цена прорывает канал супертенденции, она показывает, что тенденция изменилась, и в этот момент совершается покупка или продажа. Она одновременно устанавливает уровни стоп-лосса и стоп-стопа для блокирования прибыли и контроля риска.

Стратегический принцип

Процесс вычисления стратегии супертенденций состоит из следующих этапов:

  1. Вычислить ATR. ATR отражает среднюю частоту колебаний за определенный период времени.
  2. Средняя линия канала, рассчитанная на основе максимальной и минимальной цены. Средняя линия канала рассчитывается по формуле: ((максимальная цена + минимальная цена) / 2
  3. Верхний и нижний пределы канала рассчитываются на основе ATR и пользовательского ATR-множества. Верхний предел канала рассчитывается по формуле: средняя линия + (((ATR × ATR-множества); нижний предел канала рассчитывается по формуле: средняя линия - (((ATR × ATR-множества)) [2].
  4. Сравнение отношений между ценой закрытия и верхней и нижней границами канала, чтобы определить направление тренда. Цена закрытия выше верхней границы канала является тенденцией вверх, а цена закрытия ниже нижней границы канала является тенденцией вниз.
  5. Когда цена пробивает трендовый канал, проводится обратная торговля. Например, цена снизу вверх пробивает верхний предел канала, создавая сигнал покупки; цена снизу вверх пробивает нижний предел канала, создавая сигнал продажи.

Преимущество этой стратегии заключается в том, что она одновременно сочетает в себе торговые методы, которые следуют тренду и обратному тренду. Она позволяет не только определить направление большого тренда, но и вовремя захватить возможность обратного пути. Кроме того, она также устанавливает механизм остановки убытков для контроля риска.

Анализ преимуществ

Стратегия супертенденций имеет следующие преимущества:

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)