Стратегия двойной скользящей средней и супертренда


Дата создания: 2023-09-28 15:12:50 Последнее изменение: 2023-09-28 15:12:50
Копировать: 0 Количество просмотров: 923
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия основана на пересечении 21-й и 55-й движущихся средних линий для получения сигналов покупки и продажи, а также в сочетании с супер трендовым индикатором для отслеживания ложных сигналов.

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

Код сначала определяет движущуюся среднюю линию 21-й линии ((EMA1) и 55-й линии ((EMA2) ‒ при прохождении EMA2 на EMA1 образуется сигнал покупки; при прохождении EMA2 под EMA1 образуется сигнал продажи ‒

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

Таким образом, только тогда, когда тренд является восходящим, попадание на EMA1 в EMA2 создает сигнал к покупке; только тогда, когда тренд является понижающимся, попадание на EMA1 в EMA2 создает сигнал к продаже. С помощью фильтрации сверхтенденционных индикаторов можно избежать ложного сигнала, который возникает при переходе в тренд.

Кроме того, в код добавлены 200-дневная и 233-дневная линии для определения долгосрочных тенденций, которые дают торговые сигналы только тогда, когда долгосрочные тенденции совпадают.

Стратегические преимущества

  1. Двойная подвижная средняя линия в сочетании с супер трендовым индикатором позволяет эффективно идентифицировать направление тренда и фильтровать ложные сигналы.

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

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

  4. Правила четкие и понятные, параметры легко подстраиваются, подходят для количественной торговли.

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

Стратегический риск

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

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

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

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

  5. Долгосрочная средняя линия может задерживать сигнал, и нужно разумно уловить время перехода тренда.

Оптимизация стратегии

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

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

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

  4. Вместе с другими факторами, такими как эмоциональные показатели, новостная лента и т.д., можно определить потенциальные переломные моменты.

  5. Динамическая оптимизация параметров с использованием методов машинного обучения.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"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/
// © bhavikmota

//@version=4
strategy("EMA & Supertrend", overlay = true)

//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)

//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)


//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)

//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)

//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)

//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)


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=true)
highlighting = input(title="Highlighter 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)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


//Trading logic

Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend

Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend

//Execution Logic - Placing Order

start = timestamp(2008,1,1,0,0)

if time>= start
    strategy.entry("long", strategy.long, when=Enterlong)
    strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)