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


Дата создания: 2023-11-02 16:09:08 Последнее изменение: 2023-11-02 16:09:08
Копировать: 2 Количество просмотров: 821
1
Подписаться
1621
Подписчики

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

Обзор

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

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

  1. Расчет скоростной линии EMA ((12-я линия), медленной линии EMA ((26-я линия) и сигнальной линии EMA ((9-я линия).

  2. Вычислить MACD столбик ((быстрый - медленный) и MACD сигнальный ((9-й день MACD))

  3. Вычислите 50-дневную и 200-дневную линии как средние линии для определения больших тенденций.

  4. На столбце MACD проходит 0-я ось в качестве положительного сигнала, а вниз проходит 0-я ось в качестве отрицательного сигнала.

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

  6. Быстрая линия пересекает медленную линию, а краткосрочная средняя линия пересекает долгосрочную среднюю линию в качестве нисходящего сигнала.

  7. После каждого изменения направления средней линии допускается несколько входных сделок, контролируемых с помощью параметров Max trades after EMA cross.

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

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

  1. В этом случае вы должны быть готовы к тому, что ваши деньги будут потрачены впустую, а не впустую.

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

  3. В сочетании с двойной равномерной линией и MACD-индикатором, можно было бы зафиксировать лучшие входные моменты в тренде.

  4. Установка максимального количества сделок, чтобы избежать задержки.

  5. Контроль риска с помощью механизма сдерживания повреждений.

  6. Лучшая комбинация параметров может быть получена с помощью оптимизации параметров.

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

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

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

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

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

Направление оптимизации стратегии

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

  2. Попробуйте комбинировать MACD-фильтрационный сигнал с другими показателями, такими как лента Брин, ATR-остановка.

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

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

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

  6. Автоматическая оптимизация параметров и комбинаций для нескольких сортов.

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

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

Исходный код стратегии
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="ComiCo - Joel on Crypto - MACD Scalping", shorttitle="ComiCo - Joel on Crypto - MACD Scalping")
// Getting inputs
slow_length1 = input(title="EMA Trend 1", defval=50)
slow_length2 = input(title="EMA Trend 2 ", defval=200)
fast_length = input(title="MACD Fast Length", defval=12)
slow_length = input(title="MACD Slow Length", defval=26)
signal_length = input.int(title="MACD Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
src = input(title="MACD Source", defval=close)

i_switch = input.string(title="Tick Highlight", defval="Moving average" ,options=["Moving average","Fixed value" ])
i_switch2 = input.string(title="Tick Source", defval="Highest bar" ,options=["Highest bar","Average","Last bar"])

signal_lengthup = input.int(title="Upticks Avg. Length",  minval = 1, maxval = 5000, defval = 72)
signal_lengthdown = input.int(title="Downticks Avg. Length",  minval = 1, maxval = 5000, defval = 72)

signal_lengthMA = input.float(title="Ticks Avg. Multiplier",  minval = 0, maxval = 5000, defval = 2, step = 0.1)

sma_source = "EMA"
sma_signal = "EMA"
// Plot colors

col_grow_above = #26A69A
col_fall_above =#B2DFDB
col_grow_below = #FFCDD2
col_fall_below = #FF5252
// Calculating

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)

time_macd=timeframe.period=="1"?"1": timeframe.period=="3"?"1": timeframe.period=="5"?"1": timeframe.period=="15"?"3":timeframe.period=="30"?"5":timeframe.period=="60"?"15":timeframe.period=="120"?"30":timeframe.period=="240"?"60":timeframe.period=="D"?"240":timeframe.period=="W"?"D":timeframe.period=="M"?"W":timeframe.period=="12M"?"M":timeframe.period



macd = fast_ma - slow_ma
macd1=request.security(syminfo.tickerid, time_macd, macd)
signal = sma_signal == "SMA" ? ta.sma(macd1, signal_length) : ta.ema(macd1, signal_length)

ema50=ta.ema(close,slow_length1)
ema200=ta.ema(close ,slow_length2)

var TradeCounter = 0
MaxCount = input.int(title = "Max trades after EMA cross", minval = 0, maxval = 1000, defval = 3)
bull = ema50>ema200
if bull != bull[1]
    TradeCounter := 0


hist = request.security(syminfo.tickerid, time_macd, macd1 - signal)


f() => [hist[4],hist[3],hist[2],hist[1], hist]
ss=request.security(syminfo.tickerid, time_macd, hist, barmerge.gaps_on,barmerge.lookahead_off)



[ss5,ss4,ss3,ss2,ss1]=request.security(syminfo.tickerid, time_macd, f(), barmerge.gaps_on,barmerge.lookahead_off)



a = array.from(ss5,ss4,ss3,ss2,ss1)

s3=i_switch2=="Highest bar"?(ss>0? array.max(a, 0) : array.min(a, 0)):i_switch2=="Average"?array.avg(a):i_switch2=="Last bar"?ss1:0

saa=timeframe.period == '1'? ss:s3

saa2=timeframe.period == '1'? ss:s3*signal_lengthMA


colorss=(s3>=0 ? (s3[1] < s3 ? col_grow_above : col_fall_above) : (s3[1] < s3 ? col_grow_below : col_fall_below))


saadown = saa2
saaup = saa2

saadown:=saa>=0? saa2:saadown[1]

saaup:=saa<0? saa2:saaup[1]



verr=ta.ema(saadown,signal_lengthup)
dowww=ta.ema(saaup,signal_lengthdown)

ss22=plot(verr, title="Avg. Cloud Upper 1", color=color.new(color.white, 100))
ss33=plot(dowww, title="Avg. Cloud Lower 1", color=color.new(color.white, 100))

fill(ss22, ss33, color.new(color.white, 93), title="Avg. Cloud Background")

fixeduptick = input(title="Fixed Uptick Value", defval=30)
fixeddowntick = input(title="Fixed Downtick Value", defval=-30)
minl = i_switch=="Fixed value"? fixeduptick  :  verr
maxl = i_switch=="Fixed value"? fixeddowntick : dowww 

plot(minl, title="Avg. Cloud Upper 2", color=color.new(color.white, 81))
plot(maxl, title="Avg. Cloud Lower 2", color=color.new(color.white, 81))


colors2= s3<=minl and s3>=maxl ? #2a2e39 : colorss

coro2=s3>0? ema50>ema200 ? #2a2e39 :  colors2 : ema50<ema200 ? #2a2e39: colors2
plot(saa, title="Histogram", style=plot.style_columns, color=coro2)

LimitDiff = input.float(title="Limit Price Difference",  minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
TP = input.float(title="Take Profit",  minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
SL = input.float(title="Stop Loss",  minval = 0, maxval = 0.1, defval = 0.004, step = 0.0005)

minEMAdiff = input.float(title = "Min EMA difference", defval = 100, step = 10)

if #2a2e39 != coro2
    a22 = 0
    if ema50<ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
        LimitPrice = close * (1 + LimitDiff)
        strategy.entry("enter short", strategy.short, limit = LimitPrice)
        strategy.exit("exit short", "enter short", limit = LimitPrice * (1 - TP), stop = LimitPrice * (1 + SL))
        TradeCounter := TradeCounter + 1
    if ema50>ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
        LimitPrice = close * (1 - LimitDiff)
        strategy.entry("enter long", strategy.long, limit = LimitPrice)
        strategy.exit("exit long", "enter long", limit = LimitPrice * (1 + TP), stop = LimitPrice * (1 - SL))
        TradeCounter := TradeCounter + 1

//alertcondition(#2a2e39 != coro2 , title='MACD Tick Alert', message='Joel on Crypto - MACD Tick Alert')