Стратегия торговли Supertrend - это стратегия, основанная на тренде, основанная на среднем истинном диапазоне (ATR) и скользящей средней (MA). Она включает в себя преимущества отслеживания тренда и торговли с прорывом для определения промежуточного направления тренда и генерации торговых сигналов на основе изменений тренда.
Основная идея этой стратегии заключается в том, чтобы пойти длинным или коротким, когда цена проходит через канал Supertrend, что указывает на изменение тренда.
Расчет Supertrend включает в себя несколько шагов:
Преимущество этой стратегии заключается в том, что она сочетает в себе как методы следования тренду, так и методы обратного тренда. Она идентифицирует основные тенденции, а также может своевременно использовать возможности обратного тренда. Кроме того, механизм стоп-лосса/прибыли помогает контролировать риски.
Стратегия 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)