Улучшенная стратегия EMA SuperTrend

Автор:Чао Чжан, Дата: 2023-10-07 10:07:15
Тэги:

Обзор

Эта стратегия оценивает направление ценового тренда путем сравнения ATR и цены, в сочетании с помощью движущейся средней оценки.

Принцип стратегии

Основными этапами этой стратегии для определения ценовой тенденции являются:

  1. Вычислить ATR за последние N дней с использованием метода расчета ATR Уайлдера, который лучше отражает текущую волатильность рынка.

  2. Вычислить верхнюю и нижнюю полосы на основе ATR и коэффициента ATK. Верхняя полоса = цена - (atk x ATR); Нижняя полоса = цена + (atk x ATR). atk обычно устанавливается между 2-3.

  3. Сравните цену с верхней и нижней полосами, чтобы определить направление тренда.

  4. Движущаяся средняя используется здесь для определения качества сигнала.

  5. Добавьте стратегию стоп-лосса для контроля рисков.

  6. Используйте цветовую маркировку для статуса стратегии для облегчения суждения.

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

Преимущества

Преимущества этой стратегии включают:

  1. Быстрая реакция на изменения цен. ATR может быстро реагировать на последние изменения рынка и помогает своевременно улавливать изменения тренда.

  2. Небольшие снижения: буферная зона между верхней и нижней полосами может уменьшить вероятность прорыва стоп-лосса и снижения снижения.

  3. Ясные торговые сигналы, прорыв диапазона - высококачественные сигналы для длинных и коротких направлений.

  4. Высокая настраиваемость. Период ATR и мультипликатор регулируются для адаптации к различным рыночным условиям.

  5. Сильная визуализация. Графические инструменты интуитивно отображают состояние стратегии.

  6. Модули, такие как перемещение стоп-потери, фильтр могут быть добавлены для дальнейшей оптимизации.

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

Риски

Существуют также некоторые риски:

  1. Риск ошибки определения тренда. Во время консолидации цен могут возникнуть неправильные сигналы.

  2. Риск выбора точки выхода: точка остановки должна быть установлена разумно, чтобы избежать преждевременного выхода.

  3. Риск оптимизации параметров. Период ATR и мультипликатор требуют повторного тестирования и оптимизации, неправильные настройки повлияют на производительность.

  4. Риск высокой частоты торговли, частота торговли может быть слишком высокой во время крайней волатильности рынка.

  5. Средний риск для производительности: производительность может быть неудовлетворительной на некоторых рынках без явных тенденций.

  6. Корректировка на риск торговли в режиме реального времени.

  7. Систематический риск. Следует рассмотреть контроль системного риска в целом, а не полагаться только на эту стратегию.

Риски можно контролировать:

  1. Оптимизация параметров ATR для повышения точности.

  2. Использование многочасового анализа для определения тенденций.

  3. Принятие перемещающего стоп-лосса для закрепления прибыли и снижения выводов.

  4. Добавление фильтров для контроля частоты торговли.

  5. Корректировка параметров для различных рынков.

  6. Испытание различных продуктов для поиска наилучшего сценария применения.

  7. Всестороннее рассмотрение всех рисков торговли в режиме реального времени.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Добавление фильтров, таких как скользящие средние, для уменьшения неправильных сигналов.

  2. Оптимизация параметров ATR путем тестирования различных периодов для поиска оптимальных значений.

  3. Оптимизация параметра множителя для определения чувствительности генерации сигнала.

  4. Добавление динамических стратегий стоп-лосса на основе ATR или волатильности.

  5. Использование более высоких временных показателей для анализа для фильтрации спорадических ложных сигналов.

  6. Принятие моделей машинного обучения, таких как RNN, для улучшения суждения о сигнале.

  7. Корректировка параметров на основе характеристик продукта, например, использование более короткого периода ATR для волатильных запасов.

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

  9. Сочетание показателей громкости для оценки силы сигнала.

  10. Добавление стратегий получения прибыли на основе индикаторов тренда.

Заключение

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


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

Больше