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


Дата создания: 2023-11-16 17:25:13 Последнее изменение: 2023-11-16 17:25:13
Копировать: 0 Количество просмотров: 651
1
Подписаться
1617
Подписчики

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

Обзор

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

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

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

Согласно коду, длина быстрой линии составляет 12, длина медленной линии - 26, что означает краткосрочные и долгосрочные тенденции. Длина сигнала составляет 9, для дополнительной гладкой обработки.

Пересекающаяся логика:

  • trend_up = macd > signal: пересечение медленной линии на быстрой, обозначающей краткосрочную восходящую тенденцию
  • trend_dn = macd < signal: быстрая линия проходит через медленную линию, представляя краткосрочную нисходящую тенденцию

Посмотрите на это с другой стороны.

  • cross_UP = signal[1] >= macd[1] and signal < macd: быстрая линия сверху, медленная линия снизу
  • cross_DN = signal[1] <= macd[1] and signal > macd: быстрая линия сверху вниз проходит медленную

Изменение цвета на прямоугольной карте определяет силу тренда:

  • histA_IsUp = рост столбца прямоугольника больше 0, что означает усиление усиления
  • histA_IsDown = столбик прямоугольника уменьшается и превышает 0, что означает ослабление силы подъема
  • Ниже

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

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

  2. MACD помогает определить краткосрочные тенденции и интенсивность, повышая вероятность получения прибыли

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

  4. Цветовая обозначение перекрестков на первый взгляд

  5. Настраиваемый среднелинейный цикл для различных рыночных условий

  6. Настраиваемые MACD-параметры для оптимизации эффективности показателей

  7. Различные способы подтверждения входа: равнолинейное направление, перекрестные указатели, формовые прорывы

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

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

  2. Неправильно настроенные параметры MACD, неэффективный индикатор, ошибочный сигнал

  3. Существует определенная слепота, которая возникает только при входе в среднюю линию и сигнал MACD.

  4. Риск увеличения убытков из-за отсутствия механизмов устранения убытков

  5. Отсутствие строгого управления капиталом и контроля позиций

Возможные решения:

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

  2. Оптимизация параметров MACD для тестирования эффективности различных рынков

  3. Добавление формы, Momentum и другие факторы подтверждают сигнал

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

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

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

  1. Тест на оптимизацию комбинации среднелинейных параметров для более широкого спектра рынков

  2. Попробуйте различные типы средней линии, такие как VWAP, Brin-band средняя линия и т.д.

  3. Повышение объемов перевозок, предотвращение ложных прорывов

  4. В сочетании с RSI и другими показателями, подтверждающими перекуп и перепродажу

  5. Создание эффективных механизмов погашения убытков, таких как убытки от перемещения, убытки от колебаний и т. д.

  6. Присоединение к механизму управления позициями с контролем отдельных позиций в зависимости от размера средств

  7. Параметрическая оптимизация в сочетании с алгоритмами машинного обучения

  8. Расширение стратегии Universe, углубление направления инвестиций в портфель

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

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

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

//@version=5
strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1")
//Plot Inputs
res           = input.timeframe("",  "Indicator TimeFrame")
fast_length   = input.int(title="Fast Length", defval=12)
slow_length   = input.int(title="Slow Length", defval=26)
src           = input.source(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal    = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Show Plots T/F
show_macd     = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10")
show_macd_LW  = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11")
show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11")
show_Hist     = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20")
show_hist_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20")
show_trend    = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30")
show_HB       = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40")
show_cross    = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50")
show_dots     = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60")
show_dots_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60")

//show_trend    = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5")
// MACD Lines colors
col_macd      = input.color(#FF6D00, "MACD Line  ",  group="Color Settings", inline="CS1")
col_signal    = input.color(#2962FF, "Signal Line  ",  group="Color Settings", inline="CS1")
col_trnd_Up   = input.color(#4BAF4F, "Trend Up      ",  group="Color Settings", inline="CS2")
col_trnd_Dn   = input.color(#B71D1C, "Trend Down    ",  group="Color Settings", inline="CS2")
// Histogram Colors
col_grow_above = input.color(#26A69A, "Above   Grow",  group="Histogram Colors", inline="Hist10")
col_fall_above = input.color(#FF5252, "Fall",  group="Histogram Colors", inline="Hist10")
col_grow_below = input.color(#FF5252, "Below Grow",  group="Histogram Colors", inline="Hist20")
col_fall_below = input.color(#f8f524, "Fall",  group="Histogram Colors", inline="Hist20")
// Alerts T/F Inputs
alert_Long    = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10")
alert_Short   = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10")
alert_Long_A  = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20")
alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20")
// Calculating
fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length))
slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length))
macd = fast_ma - slow_ma
signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length))
hist = macd - signal
// MACD Trend and Cross Up/Down conditions
trend_up   = macd > signal
trend_dn   = macd < signal
cross_UP   = signal[1] >= macd[1] and signal < macd
cross_DN   = signal[1] <= macd[1] and signal > macd
cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0
cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0
// Condition that changes Color of MACD Line if Show Trend is turned on..
trend_col = show_trend  and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend  and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na 

//Var Statements for Histogram Color Change
var bool histA_IsUp = false
var bool histA_IsDown = false
var bool histB_IsDown = false
var bool histB_IsUp = false
histA_IsUp   := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0
histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0
histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0
histB_IsUp   := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0

hist_col =  histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver 

// Plot Statements
//Background Color
bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false)
bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false)
//Highlight Price Bars
barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false)
barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false)
//Regular Plots
plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW)
plot(show_macd  and signal ? signal : na, title="Signal", color=color.new(col_signal, 0),  style=plot.style_line ,linewidth=show_signal_LW)
plot(show_macd  and macd ? macd : na, title="MACD", color=color.new(trend_col, 0),  style=plot.style_line ,linewidth=show_macd_LW)
hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false)
plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)

//Alerts
if alert_Long and cross_UP
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short and cross_DN
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close)
//Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0
if alert_Long_A and cross_UP_A
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short_B and cross_DN_B
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close)


if (histA_IsUp)
	strategy.entry("buy", strategy.long, comment="buy")
if (histA_IsDown)
	strategy.entry("sell", strategy.short, comment="sell")