
Стратегия использует принцип двухуровневого пересечения, в сочетании с трендовым суждением и фоновыми выделенными пересечениями MACD, дополненными формовой точкой, с целью захвата среднесрочной тенденции рынка. Основная логика заключается в том, чтобы войти в рынок при переходе в направлении равной линии, через MACD фоновый цвет выделенный пересечения, в сочетании с MACD прямоугольной диаграммой, с изменением цветового суждения.
Стратегия использует быструю ЭМА и медленную ЭМА, чтобы построить двойную равномерную линию, которая пересекается с быстрой и медленной линией, чтобы определить направление тренда. В то же время, вычисляют MACD и Signal, разница в которых изображается как прямоугольный график.
Согласно коду, длина быстрой линии составляет 12, длина медленной линии - 26, что означает краткосрочные и долгосрочные тенденции. Длина сигнала составляет 9, для дополнительной гладкой обработки.
Пересекающаяся логика:
Посмотрите на это с другой стороны.
Изменение цвета на прямоугольной карте определяет силу тренда:
Используйте двойную равномерную линию для определения направления среднесрочной тенденции, чтобы избежать помех от краткосрочного рынка
MACD помогает определить краткосрочные тенденции и интенсивность, повышая вероятность получения прибыли
Изменение цвета прямоугольной карты определяет величину силы, чтобы лучше понять время входа в игру
Цветовая обозначение перекрестков на первый взгляд
Настраиваемый среднелинейный цикл для различных рыночных условий
Настраиваемые MACD-параметры для оптимизации эффективности показателей
Различные способы подтверждения входа: равнолинейное направление, перекрестные указатели, формовые прорывы
Бинарная линейка считает, что среднесрочная тенденция не чувствительна к краткосрочным колебаниям и может упустить возможность короткой линии
Неправильно настроенные параметры MACD, неэффективный индикатор, ошибочный сигнал
Существует определенная слепота, которая возникает только при входе в среднюю линию и сигнал MACD.
Риск увеличения убытков из-за отсутствия механизмов устранения убытков
Отсутствие строгого управления капиталом и контроля позиций
Возможные решения:
В сочетании с другими показателями ограничивает краткосрочные колебания, контролирует риск
Оптимизация параметров MACD для тестирования эффективности различных рынков
Добавление формы, Momentum и другие факторы подтверждают сигнал
Установление механизмов по удержанию убытков, чтобы избежать лишних потерь
Добавление модуля управления капиталом, чтобы контролировать отдельные позиции в зависимости от размера капитала
Тест на оптимизацию комбинации среднелинейных параметров для более широкого спектра рынков
Попробуйте различные типы средней линии, такие как VWAP, Brin-band средняя линия и т.д.
Повышение объемов перевозок, предотвращение ложных прорывов
В сочетании с RSI и другими показателями, подтверждающими перекуп и перепродажу
Создание эффективных механизмов погашения убытков, таких как убытки от перемещения, убытки от колебаний и т. д.
Присоединение к механизму управления позициями с контролем отдельных позиций в зависимости от размера средств
Параметрическая оптимизация в сочетании с алгоритмами машинного обучения
Расширение стратегии 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")