Тенденция MACD с несколькими временными рамками

Автор:Чао Чжан, Дата: 2024-01-23 12:08:40
Тэги:

img

Обзор

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

Наименование стратегии

Тенденция MACD с несколькими временными рамками

Логика стратегии

Основой этой стратегии является индикатор MACD для определения направления тренда. MACD формируется из быстрой линии (12 дней EMA) минус медленную линию (26-дневную EMA).

Стратегия устанавливает 5 условий торговли:

  1. Простой золотой крест и смертельный крест сигналы
  2. Комбинируйте зону перекупленности/перепроданности MACD, чтобы отфильтровать некоторые ложные сигналы
  3. Требовать закрытия цены выше скользящей средней при золотом кресте к входу
  4. Требовать закрытия цены выше скользящей средней зоны при золотом кресте к входу
  5. Требование показателя RSI выше определенного уровня при золотом кресте для входа

В то же время стратегия также предоставляет 5 типов скользящих средних (EMA, SMA, VWMA, RMA, WMA) и настраиваемые параметры.

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

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

Риски

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

Такие методы, как правильное регулирование параметров, установка стоп-лосса, сочетание других индикаторов могут помочь уменьшить риски.

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

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

  1. Оптимизация параметров скользящих средних для адаптации различных торговых продуктов
  2. Оптимизировать параметры MACD для получения более точных торговых сигналов
  3. Добавить механизмы остановки потери для предотвращения воздействия внезапных событий на рынке
  4. Комбинировать с другими показателями, такими как KDJ, индекс волатильности для улучшения эффективности стратегии
  5. Добавить алгоритмы машинного обучения для автоматической оптимизации параметров
  6. Проводить обратное тестирование в течение более длительного периода времени

Заключение

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


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © HamidBox


//@version=4
strategy("MACD [5-in-1]")

matype_zone(src, len, type) =>
    type == "EMA" ? ema(src, len) :
     type == "SMA" ? sma(src, len) :
     type == "RMA" ? rma(src, len) : 
     type == "WMA" ? wma(src, len) : 
     type == "VWMA" ? vwma(src, len) :
     na

matype_signal(src, len, type) =>
    type == "EMA" ? ema(src, len) :
     type == "SMA" ? sma(src, len) :
     type == "RMA" ? rma(src, len) : 
     type == "WMA" ? wma(src, len) : 
     type == "VWMA" ? vwma(src, len) :
     na

// MACD INPUTS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
macd_FastLength     = input(title="MACD Fast", defval=12, minval=1, type=input.integer, inline="fastslow")                      ///
macd_SlowLength     = input(title="MACD Slow ", defval=26, minval=1, type=input.integer, inline="fastslow")                     ///
macd_signalLen      = input(title="Signal Line", defval=9, minval=1, type=input.integer, inline="signalsrc")                    ///
macd_Source         = input(title="Source      ", defval=close, type=input.source, inline="signalsrc")                          ///
MACD_Line           = input(title="Oscilattor ", defval="EMA", type=input.string, options=["EMA" , "SMA"], inline="matype")     ///
SignalLine          = input(title="Signal       ", defval="EMA", type=input.string, options=["EMA" , "SMA"], inline="matype")   ///
                                                                                                                                ///
// MACD SETUP /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
macd_Fast           = MACD_Line == "SMA" ? sma(macd_Source , macd_FastLength) : ema(macd_Source , macd_FastLength)      ///
macd_Slow           = MACD_Line == "SMA" ? sma(macd_Source , macd_SlowLength) : ema(macd_Source , macd_SlowLength)      ///
MACD                = macd_Fast - macd_Slow                                                                             ///
Signal              = SignalLine == "SMA" ? sma(MACD, macd_signalLen) : ema(MACD, macd_signalLen)                       ///
histogram           = MACD - Signal                                                                                     ///
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MACD CONDITIONS SECTION /////////////////////////////////////////////////////
macd_grtr_signal    = MACD > Signal                                           //
macd_less_signal    = MACD < Signal                                           //
macd_crsovr_signal  = crossover(MACD , Signal) ? MACD : na      // FOR MACD CROSS DOT PLOTING //
macd_crsndr_signal  = crossunder(MACD , Signal) ? MACD : na     // FOR MACD CROSS DOT PLOTING //                 
macd_crsovr         = crossover(MACD , Signal)                                //
macd_crsndr         = crossunder(MACD , Signal)                               //
////////////////////////////////////////////////////////////////////////////////


// Choose your Desire Signal ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
MACD_crs_signal     = input(true, "Stgy №1:👉 MACD CrossOver", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\nBUY: MACD CrossOver Signal Line\nSELL: MACD CrossUnder Signal Line\nDefault Signal")

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

MACD_OB             = input(false, "Stgy №2:👉 MACD + OverBought ", inline="obs", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="MACD also work as OverBought & OverSold system, same like RSI or other indicators who have OB/OS system, so i added OB-Level in MACD,\nso simple rule is: if MACD Lines is Above OB-Level, we will not take any trade, we only follow MACD signals when MACD-Lines will Below OB-Level")
MACD_OB_LVL         = input(title="", defval=0.0, type=input.float, inline="obs", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="MACD also work as OverBought & OverSold system, same like RSI or other indicators who have OB/OS system, so i added OB-Level in MACD,\nso simple rule is: if MACD Lines is Above OB-Level, we will not take any trade, we only follow MACD signals when MACD-Lines will Below OB-Level") 
hline(MACD_OB_LVL, color=color.red, title="MACD OB", linestyle=hline.style_dashed)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

MACD_close          = input(false, "Stgy №3:👉 MACD + Close         ", inline="MAsignal", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\n\nBUY RULES\n1st: MACD CrossOver Signal Line\n2nd: Close (Greater) Than Moving Average\n\nSELL RULES\n1st: MACD CrossUnder Signal Line\n2nd: Close (Less) Than Moving Average\n\nExplanation: When (MACD Cross Signal Line) and also Market current Candle Close or previous 1st-4th any Candle will have close greater than Moving Average (You Choose: EMA or SMA etc...)\n🚦NOTE: in this Condition only Singal Moving Average work => (Slow MA),")
MA_signal_len       = input(title="", defval=21, type=input.integer, inline="MAsignal", group="CHOOSE YOUR DESIRE SIGNAL")    //      // 
MA_signal_type      = input(title="", defval="EMA", options=["SMA" , "EMA" , "RMA", "WMA" , "VWMA" , "DEMA", "TEMA"], inline="MAsignal", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\n\nBUY RULES\n1st: MACD CrossOver Signal Line\n2nd: Close (Greater) Than Moving Average\n\nSELL RULES\n1st: MACD CrossUnder Signal Line\n2nd: Close (Less) Than Moving Average\n\nExplanation: When (MACD Cross Signal Line) and also Market current Candle Close will have close greater than Moving Average (You Choose: EMA or SMA etc...)")     //      //

dema = if MA_signal_type == "DEMA"
    ema = ema(close , MA_signal_len)
    2 * ema - ema(ema , MA_signal_len)
tema = if MA_signal_type == "TEMA"
    ema = ema(close , MA_signal_len)
    3 * (ema - ema(ema, MA_signal_len)) + ema(ema(ema, MA_signal_len), MA_signal_len)

MA_signal           = matype_zone(close, MA_signal_len, MA_signal_type)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
MACD_ZONE           = input(false, "Stgy №4:👉 MACD + MA-ZONE    ", inline="MAZONE", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\n\nBUY RULES:\n1st: MACD CrossOver Signal Line\n2nd: Close (Greater) than (MA-ZONE)\n\nSELL RULES:\n1st: MACD CrossUnder Signal Line\n2nd: Close (Less) than (MA-ZONE)")
MA_zone_len         = input(title="", defval=21, type=input.integer, inline="MAZONE", group="CHOOSE YOUR DESIRE SIGNAL")
MA_zone_type        = input(title="", defval="EMA", options=["SMA" , "EMA" , "RMA", "WMA" , "VWMA" , "DEMA", "TEMA"], inline="MAZONE", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\n\nBUY RULES:\n1st: MACD CrossOver Signal Line\n2nd: Close (Greater) than (MA-ZONE)\n\nSELL RULES:\n1st: MACD CrossUnder Signal Line\n2nd: Close (Less) than (MA-ZONE)")

dema2 = if MA_zone_type == "DEMA"
    ema = ema(close , MA_zone_len)
    2 * ema - ema(ema , MA_zone_len)
tema2 = if MA_zone_type == "TEMA"
    ema = ema(close , MA_zone_len)
    3 * (ema - ema(ema, MA_zone_len)) + ema(ema(ema, MA_zone_len), MA_zone_len)

MA_zone_srcHi       = matype_signal(high, MA_zone_len, MA_zone_type)                                                                                        //      //
MA_zone_srcLO       = matype_signal(low, MA_zone_len, MA_zone_type)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

MACD_wid_rsiOB      = input(false, "Stgy №5:👉 MACD + RSI-OB", group="CHOOSE YOUR DESIRE SIGNAL")
rsilen              = input(title="Length", defval=14, type=input.integer, inline="rsi", group="CHOOSE YOUR DESIRE SIGNAL")
rsi_ent_value       = input(title="Entry", defval=50, type=input.integer, minval=1, inline="rsi", group="CHOOSE YOUR DESIRE SIGNAL", tooltip="🚦🚦🚦 Condition 🚦🚦🚦\n\nBUY Rule\nMACD Crossover Signal\nRSI Greater then Entry Level (You Choose)\n\n🚦🚦🚦 Explanation 🚦🚦🚦\nWe have RSI with 2 Levels,\n1st: Entry Level\n2nd: No-Entry Level\n\nEntry level:\nfor never want to BUY trade when RSI is Below our specific Level, like you want open Trade when RSI above 50 level or 30 level etc... \n\nNo-Entry Level:\nthis is same as (Entry Level) Condition, as we know RSI-70 level use for OverBought, and its mean market will go down after RSI-OB level, and thats why we can set overbought level for NO-ENTRY when Market is on OverBought area.")
rsi_ob_value        = input(title="No-Entry", defval=70, minval=1, type=input.integer, inline="rsi", group="CHOOSE YOUR DESIRE SIGNAL")   
RSI                 = rsi(close , rsilen)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
startTime           =       input(title="Start Time                           ", type = input.time, defval = timestamp("01 Jan 2021 00:00 +0000"), inline="Backtesting Time Period")
endTime             =       input(title="End Time                          ", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

inDateRange         =       true


// Stgy №1:👉 MACD Cross Signal CONDITION //////////////////////////////////////
// ENTRY EXIT SECTION //////////////////////////////////////////////////////////
// (( MACD + CLOSE ))                                                       ////
if macd_crsovr and MACD_crs_signal and inDateRange                   ////
    strategy.entry("BUY", strategy.long, comment="S#1")                     ////
if macd_crsndr and MACD_crs_signal and inDateRange                  ////
    strategy.close("BUY", comment="x")                                      ////
////////////////////////////////////////////////////////////////////////////////
// // Stgy №1 Ploting 
// plotshape(MACD_crs_signal ? macd_crsovr : na, title="Stgy Sign", color=color.blue, style=shape.labelup, text="MACD", textcolor=color.white, location=location.bottom)
// plotshape(MACD_crs_signal ? macd_crsndr : na, title="Stgy Sign", color=color.maroon, style=shape.labeldown, text="MACD-x", textcolor=color.white, location=location.top)
// ////////////////////////////////////////////////////////////////////////////////


// Stgy №2:👉 MACD + OverBought CONDITION //////////////////////////////////////
only_Trade_when     = MACD < MACD_OB_LVL and Signal < MACD_OB_LVL           ////
macd_ob_buy         = macd_crsovr and only_Trade_when                       ////
macd_ob_sell        = macd_crsndr                                           ////
////////////////////////////////////////////////////////////////////////////////
// ENTRY EXIT SECTION //////////////////////////////////////////////////////////
// (( MACD + ZONE ))                                                        ////
if macd_ob_buy and MACD_OB and inDateRange                                  ////
    strategy.entry("BUY", strategy.long, comment="S#2")                     ////
if macd_ob_sell and MACD_OB and inDateRange                                 ////
    strategy.close("BUY", comment="x")                                      ////
////////////////////////////////////////////////////////////////////////////////
// plotshape(MACD_OB ? macd_ob_buy : na, title="Stgy Sign", color=color.blue, style=shape.labelup, text="M+OB", textcolor=color.white, location=location.bottom)
// plotshape(MACD_OB ? macd_ob_sell : na, title="Stgy Sign", color=color.maroon, style=shape.labeldown, text="M+OB-x", textcolor=color.white, location=location.top)
// ////////////////////////////////////////////////////////////////////////////////



// Stgy №3:👉 MACD + CLOSE CONDITION ///////////////////////////////////////////
macd_close_buy       = macd_crsovr and ( ( close > MA_signal or (close[1] > MA_signal[1]) or (close[2] > MA_signal[2]) or (close[3] > MA_signal[3]) )    or    ( close > dema  or (close[1] > dema[1]) or (close[2] > dema[2]) or (close[3] > dema[3]) )    or    ( close > tema  or (close[1] > tema[1]) or (close[2] > tema[2]) or (close[3] > tema[3]) ) ) 
macd_close_sell      = macd_crsndr and ( ( close > MA_signal or (close[1] < MA_signal[1]) or (close[2] < MA_signal[2]) or (close[3] < MA_signal[3]) )    or    ( close < dema  or (close[1] < dema[1]) or (close[2] < dema[2]) or (close[3] < dema[3]) )    or    ( close < tema  or (close[1] < tema[1]) or (close[2] < tema[2]) or (close[3] < tema[3]) ) )                  ////
////////////////////////////////////////////////////////////////////////////////
// ENTRY EXIT SECTION //////////////////////////////////////////////////////////
// (( MACD + CLOSE ))                                                       ////
if macd_close_buy and MACD_close and inDateRange                            ////
    strategy.entry("BUY", strategy.long, comment="S#3")                     ////
if macd_close_sell and MACD_close and inDateRange                           ////
    strategy.close("BUY", comment="x")                                      ////
////////////////////////////////////////////////////////////////////////////////
// // Stgy №3 Ploting 
// plotshape(MACD_close ? macd_close_buy : na, title="Stgy Sign", color=color.blue, style=shape.labelup, text="MACD", textcolor=color.white, location=location.bottom)
// plotshape(MACD_close ? macd_close_sell : na, title="Stgy Sign", color=color.maroon, style=shape.labeldown, text="MACD-x", textcolor=color.white, location=location.top)
// ////////////////////////////////////////////////////////////////////////////////




// Stgy №3:👉 MACD + MA-ZONE MACD + ZONE CONDITION /////////////////////////////
macd_zone_buy       = macd_crsovr and ( ( close > MA_zone_srcHi or (close[1] > MA_zone_srcHi[1]) or (close[2] > MA_zone_srcHi[2]) or (close[3] > MA_zone_srcHi[3]) )    or      ( close > dema2 or (close[1] > dema2[1]) or (close[2] > dema2[2]) or (close[3] > dema2[3]) )    or      ( close > tema2 or (close[1] > tema2[1]) or (close[2] > tema2[2]) or (close[3] > tema2[3]) )   )            ////
macd_zone_sell      = macd_crsndr and ( ( close < MA_zone_srcHi or (close[1] < MA_zone_srcHi[1]) or (close[2] < MA_zone_srcHi[2]) or (close[3] < MA_zone_srcHi[3]) )    or      ( close < dema2 or (close[1] < dema2[1]) or (close[2] < dema2[2]) or (close[3] < dema2[3]) )    or      ( close < tema2 or (close[1] < tema2[1]) or (close[2] < tema2[2]) or (close[3] < tema2[3]) )   )           ////
////////////////////////////////////////////////////////////////////////////////
// ENTRY EXIT SECTION //////////////////////////////////////////////////////////
// (( MACD + ZONE ))                                                        ////
if macd_zone_buy and MACD_ZONE and inDateRange                              ////
    strategy.entry("BUY", strategy.long, comment="S#4")                     ////
if macd_zone_sell and MACD_ZONE and inDateRange                             ////
    strategy.close_all()                                      ////
////////////////////////////////////////////////////////////////////////////////



// Stgy №5:👉 MACD + RSI-OB CONDITION //////////////////////////////////////////
MACD_rsi_EnBuy         = RSI > rsi_ent_value and RSI < rsi_ob_value         ////
MACD_rsi_EnSell         = RSI < rsi_ent_value           ////
MACD_rsi_Ex       = crossunder(RSI , rsi_ob_value) or crossunder(RSI[1] , rsi_ob_value[1]) or crossunder(RSI[2] , rsi_ob_value[2]) or crossunder(RSI[3] , rsi_ob_value[3]) or crossunder(RSI[4] , rsi_ob_value[4]) or crossunder(RSI[5] , rsi_ob_value[5]) or crossunder(RSI[6] , rsi_ob_value[6])         ////
                                                                            ////
////////////////////////////////////////////////////////////////////////////////
// ENTRY EXIT SECTION //////////////////////////////////////////////////////////
// ((MACD + RSI-OB ))                                                       ////
if macd_crsovr and MACD_rsi_EnBuy and MACD_wid_rsiOB and inDateRange        ////
    strategy.entry("BUY", strategy.long, comment="S#5")                     ////
if macd_crsndr and MACD_wid_rsiOB and inDateRange                           ////
    strategy.close("BUY", comment="x")                                      ////
////////////////////////////////////////////////////////////////////////////////
if (not inDateRange)           ///
    strategy.close_all()       ///
//////////////////////////////////









// MACD COLORS SECTION /////////////////////////////////////////////////////////
// ( Colors of [MACD and Signal-Line] )
MACD_width          = input(title="MACD Line               ", defval=2, minval=1, type=input.integer, group="🚦🚦macd Width & Colors setting🚦🚦", inline="macdColor")
MACD_color_High     = input(#11ff00, title="", type=input.color, group="🚦🚦macd Width & Colors setting🚦🚦", inline="macdColor")
MACD_color_Low      = input(#e91e63, title="", type=input.color, group="🚦🚦macd Width & Colors setting🚦🚦", inline="macdColor")
signal_width        = input(title="Signal Line               ", defval=2, minval=1, type=input.integer, group="🚦🚦macd Width & Colors setting🚦🚦", inline="signal")
signalLine_col_hi   = input(#ffeb3b, title="", type=input.color, inline="signal", group="🚦🚦macd Width & Colors setting🚦🚦")
signalLine_col_lo   = input(#ffeb3b, title="", type=input.color, inline="signal", group="🚦🚦macd Width & Colors setting🚦🚦")


// ((Histogram Color)) /////////////////////////////////////////////////////////
macd_hist_on        = input(true, "Histogram        ", inline="hist", group="🚦🚦macd Width & Colors setting🚦🚦")
BuyStrongHist       = input(#26A69A, title="", type=input.color, inline="hist", group="🚦🚦macd Width & Colors setting🚦🚦")
BuyWeakHist         = input(#B2DFDB, title="", type=input.color, inline="hist", group="🚦🚦macd Width & Colors setting🚦🚦")
SellWeakHist        = input(#FFCDD2, title="✨", type=input.color, inline="hist", group="🚦🚦macd Width & Colors setting🚦🚦")
SellStrongHist      = input(#FF5252, title="", type=input.color, inline="hist", group="🚦🚦macd Width & Colors setting🚦🚦")
// ((FOR HISTOGRAM COLOR CONDITION))
hist_col            = (histogram >= 0 ? (histogram[1] < histogram ? BuyStrongHist : BuyWeakHist) : histogram[1] < histogram ? SellWeakHist : SellStrongHist)


// (( CROSSOVER DOT) ///////////////////////////////////////////////////////////
macd_crsovr_dot_on  = input(true, "Cross               ", inline="dot", group="🚦🚦macd Width & Colors setting🚦🚦")
macd_cross_width    = input(defval=5, title="", inline="dot", group="🚦🚦macd Width & Colors setting🚦🚦")
dot_crsovr_col      = input(#ffffff, title="", type=input.color, inline="dot", group="🚦🚦macd Width & Colors setting🚦🚦")
dot_crsndr_col      = input(color.new(#e91e63, 0), title="", type=input.color, inline="dot", group="🚦🚦macd Width & Colors setting🚦🚦")


// (( MACD ZONE COLOR ))
zone_on             = input(true, "Zone Color        ", inline="zone", group="🚦🚦macd Width & Colors setting🚦🚦")
zone_crsovr_col     = input(color.new(color.lime, 70), title="", type=input.color, inline="zone", group="🚦🚦macd Width & Colors setting🚦🚦")
zone_crsndr_col     = input(color.new(#e91e63, 70), title="", type=input.color, inline="zone", group="🚦🚦macd Width & Colors setting🚦🚦")

///////////////////////////////////////// ((FOR MACD LINE COLOR CONDITION))
MACD_line_col = if macd_grtr_signal    //
    MACD_color_High                    //
else                                   //
    if macd_less_signal                //
        MACD_color_Low                 //
///////////////////////////////////////// ((FOR SIGNAL LINE COLOR CONDITION))
signal_line_col = if macd_grtr_signal  //
    signalLine_col_hi                  //
else                                   //
    if macd_less_signal                //
        signalLine_col_lo              //
///////////////////////////////////////// ((FOR MACD CROSS DOTs COLOR CONDITION))
MACD_Dot_col = if macd_crsovr_signal   //
    dot_crsovr_col                     //
else                                   //
    if macd_crsndr_signal              //
        dot_crsndr_col                 //
/////////////////////////////////////////////////////////////////////////////////////////////////
zone_crsovr_plot = if macd_grtr_signal  and zone_on // ((For Zone Color Comdition + On/Off)) ///
    zone_crsovr_col                                 ///////////////////////////////////////////
else                                                //
    if macd_less_signal and zone_on                 //
        zone_crsndr_col                             //
//////////////////////////////////////////////////////


// MACD PLOTING //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
histplot    = plot(macd_hist_on ? histogram : na, title="Histogram", color=hist_col, style=plot.style_columns)
macdplot    = plot(MACD, title="MACD", color=MACD_line_col, linewidth=MACD_width)
signalplot  = plot(Signal, title="Signal", color=signal_line_col, linewidth=signal_width)
fill(macdplot , signalplot, color=zone_crsovr_plot)

plot(macd_crsovr_dot_on ? macd_crsovr_signal : na,  title="c-over", style=plot.style_circles, color=MACD_Dot_col, linewidth=macd_cross_width)
plot(macd_crsovr_dot_on ? macd_crsndr_signal : na,  title="c-under", style=plot.style_circles, color=MACD_Dot_col, linewidth=macd_cross_width)




Больше