Стратегия торговли на основе комбинации ATR и MA

Автор:Чао Чжан, Дата: 2023-12-01 16:40:27
Тэги:

img

Обзор

Стратегия торговли Supertrend - это стратегия, основанная на тренде, основанная на среднем истинном диапазоне (ATR) и скользящей средней (MA). Она включает в себя преимущества отслеживания тренда и торговли с прорывом для определения промежуточного направления тренда и генерации торговых сигналов на основе изменений тренда.

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

Как работает эта стратегия

Расчет Supertrend включает в себя несколько шагов:

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

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

Сильные стороны

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

1. Следить за промежуточным трендом

Канал Supertrend рассчитывается на основе ATR, который эффективно отражает промежуточный диапазон колебаний цен. Он отслеживает промежуточный тренд лучше, чем простые скользящие средние.

2. Вовремя обнаружить обратные действия

Прорывы цены из канала быстро генерируют торговые сигналы, так что основные изменения тренда могут быть зафиксированы вовремя.

3. Установите убытки и получите прибыль

Стратегия устанавливает заранее определенные уровни стоп-лосса и уровни прибыли для автоматического выхода с контролем риска. Это значительно снижает риск чрезмерного стоп-лосса и позволяет лучше следовать тренду.

4. Простая в применении

Стратегия в основном использует базовые индикаторы, такие как MA и ATR. Это делает ее довольно простой в понимании и реализации для торговли в режиме реального времени.

**5. Высокая эффективность капитала **

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

Анализ рисков

Стратегия Supertrend также имеет некоторые потенциальные недостатки:

1. Недостаточная производительность на рынке

Стратегия фокусируется на среднесрочной и долгосрочной трендовой торговле.

2. Чувствительный к оптимизации параметров

Выбранные значения для периода ATR и мультипликатора имеют относительно большое влияние на эффективность стратегии. Ненадлежащая настройка параметров может поставить под угрозу эффективность торговых сигналов.

3. Возможны проблемы с отставанием

В процессе вычисления канала Supertrend могут возникнуть проблемы с задержкой, что может привести к несвоевременной генерации сигнала.

4. Требуется строгое управление стоп-лосом

В экстремальных рыночных условиях ненадлежащее увеличение стоп-лосса или неадекватное управление рисками могут привести к большим потерям.

Области улучшения

Существует дополнительное пространство для оптимизации этой стратегии Supertrend:

1. объединять несколько периодов ATR

Объединение показаний ATR за разные периоды, такие как 10-дневный и 20-дневный, формирует составный показатель, который помогает улучшить чувствительность и проблемы с отставанием.

2. Добавить модули стоп-лосса

Добавление более сложных механизмов стоп-лосса, таких как тройной стоп-лосс, стоп-лосс волатильности и последовательный стоп-лосс, может усилить контроль рисков и снижение снижения.

Оптимизация параметров

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

4. Интегрировать модели машинного обучения

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

Заключение

Стратегия торговли Supertrend идентифицирует промежуточное направление тренда с использованием индикаторов MA и ATR и генерирует сигналы входа и выхода из торговли вокруг изменения тренда с автоматизированной реализацией стоп-лосса/приобретения прибыли.

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


/*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) 


Больше