//@version=6
indicator(title="Indicator: Long Entry Conditions", overlay=false, max_lines_count=500, max_labels_count=500)

import TradingView/ta/10
import NiceOrbit/LibraryUtility/8 as utils
import NiceOrbit/LibraryRSIDivergence/1 as rsiDiv
import NiceOrbit/LibraryGaussianChannel/1 as gcl
import NiceOrbit/LibraryMACD/9 as macdLib
import NiceOrbit/LibraryMoneySupply/7 as libMoneySupply
import NiceOrbit/LibraryStochasticDivergence/3 as libStochDiv
import NiceOrbit/LibraryVWAPDivergence/3 as libVwapDiv
import NiceOrbit/LibraryRealizedPrice/4 as libRealizedPrice
import NiceOrbit/LibraryLongEntry/24 as libLongEntry

// =====================================================================================================================
// PLOTTING CONTROLS
// =====================================================================================================================
group_plotting_controls = "Plotting Controls"
i_plot_baseline = input.float(0, "Baseline", group = group_plotting_controls, display=display.all-display.status_line)
i_plot_increment = input.float(1, "Increment", group = group_plotting_controls, display=display.all-display.status_line)
i_plot_line_width = input.int(3, "Line Width", group = group_plotting_controls, display=display.all-display.status_line)

// =====================================================================================================================
// DUPLICATED INPUTS & LOGIC (MUST BE KEPT IN SYNC WITH MainStrategy.pine)
// =====================================================================================================================

//{ Date, Condition switches & Settings  ======================
group_date_range                        = "Back Testing Date Range"
startDate                               = input.time(timestamp("1 January 2018"), "Start", group=group_date_range, inline="date", display=display.none)
endDate                                 = input.time(timestamp("1 July 2024 23:59 +0000"), "End ", group=group_date_range, inline="date", display=display.none)
timeCondition                           = time >= startDate and time <= endDate

group_general_settings                = "General Setings"
i_log_variables_to_list_of_trades       = input.bool(false, title="Log Variables on each trade in List of Trades", group=group_general_settings,display=display.none)
i_enable_timeframe_adjustment           = input.bool(true, title="Enable Time Frame Adjustment", group=group_general_settings,display=display.none, tooltip = "For timeframes shorter than 1 Day, adjusted to use more bars to keep same range of data as 1 day would")
group_LongEntry_Enabled                 = "Long Entry Types Enabled"

timeframe_divisor = utils.f_resInDays()

// Entry Condition Switches
longEntryAggressiveness                                         = input.string(defval="priceAboveHband",title="Aggressiveness", options=["priceAboveHband", "priceAboveMband", "priceAboveLband","ignore bands"], group=group_LongEntry_Enabled, inline="original", display=display.none)
i_enablelongCondition_original                                  = input.bool(false, title="  F2-43-original", group=group_LongEntry_Enabled,display=display.none)
i_enablelongCondition_new                                       = input.bool(false, title="  F3-new", group=group_LongEntry_Enabled,display=display.none)
i_enablelongCondition_base                                      = input.bool(false, title="  -base", group=group_LongEntry_Enabled,display=display.none)
i_enablelongCondition_rocLongEntry                              = input.bool(true,  title="  DH-rocLongEntry", group=group_LongEntry_Enabled,display=display.none)
i_enableLongGaussianGreenAndHMA                                 = input.bool(false, title="  F5-gaussianGreen and HMA", group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_macd_crossOver                           = input.bool(false, title="  F8-macd_crossOver", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_rsiSlowingBullishDivergence              = input.bool(false, title="  F8-rsiSlowingBullishDivergence", group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_rsiDelayedDipDivergence                  = input.bool(true,  title="  D43-rsiDelayedDipDivergence", group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_rsiRegularBullishDivergence              = input.bool(true,  title="  D3-rsiRegularBullishDivergence",group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_rsiHiddenBullishDivergence               = input.bool(false, title="  F3-rsiHiddenBullishDivergence",group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_rsiConfirmedBullishDivergence            = input.bool(false, title="  -rsiConfirmedBullishDivergence",group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_rsiRealTimeBullishDivergence             = input.bool(false, title="  3-rsiRealTimeBullishDivergence",group=group_LongEntry_Enabled,display=display.none)
i_enable_longCondition_realTime_slowing_confirmed               = input.bool(false, title="  ?-realTime_slowing_confirmed", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_stochastic_divergence                    = input.bool(false, title="  -stochastic_divergence", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish = input.bool(true, title="  DH-stochbullish_rocM3bullish_not_macd_flipped_bearish", group=group_LongEntry_Enabled, inline="notmacdflipped", display=display.none)
i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish_n_bars_out = input.int(3, title="  n bars out >", group=group_LongEntry_Enabled, inline="notmacdflipped", display=display.none)
i_stochbullish_rocM3bullish_not_macd_flipped_bearish_macd_value= input.float(-250.0, "MACD below",group=group_LongEntry_Enabled, inline="notmacdflipped", display=display.none)
i_enable_longCondition_stochbullish_macd_flipped_bullish_rocM3_flipped_bullish = input.bool(true, title="  DH-stochbullish_macd_flipped_bullish_rocM3_flipped_bullish", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_base_not_macd_is_decreasing              = input.bool(false, title="  F3-base_not_macd_is_decreasing", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_isMacdHistRising                    = input.bool(false, title="  F4-base_isMacdHistRising", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_isM2SmoothedShortOffsetRising       = input.bool(false, title="  F1-base_isM2SmoothedShortOffsetRising", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_macd_slope_above_threshold          = input.bool(false, title="  F3-base_macd_slope_above_threshold", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_not_isM2SmoothedLongOffsetFalling= input.bool(true,  title="  D-base_not_isM2SmoothedLongOffsetFalling", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_not_rsi_high_range_cond             = input.bool(true,  title="  D-base_not_rsi_high_range_cond", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_rsid_osc_above_50                   = input.bool(false, title="  -base_rsid_osc_above_50", group=group_LongEntry_Enabled, display=display.none, inline="rsid_osc_above")
i_longCondition_base_rsid_rsid_osc_threshold                    = input.int(50,     title=">", group=group_LongEntry_Enabled, display=display.none, inline="rsid_osc_above" )
i_longCondition_base_rsid_m2_threshold                          = input.int(80,     title="M2 threshold(1D-80, 12H-95)", group=group_LongEntry_Enabled, display=display.none, inline="rsid_osc_above" )
i_enable_longCondition_base_stoch_high_range_cond               = input.bool(false, title="  -base_stoch_high_range_cond", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_base_stoch_low_range_cond                = input.bool(false, title="  H-base_stoch_low_range_cond", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_isM2MacdLongCrossBullish                 = input.bool(false, title="  -isM2MacdLongCrossBullish", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_isM2MacdShortCrossBullish                = input.bool(true,  title="  DH-isM2MacdShortCrossBullish", group=group_LongEntry_Enabled, display=display.none )
i_enable_longCondition_low_rsid                                 = input.bool(true,  title="  DH-low_rsid", group=group_LongEntry_Enabled, display=display.none, inline="lowRSID")
i_longCondition_low_rsid_threshold                              = input.int(17,     title="threshold(17,20)", tooltip="filter to include values only below this number", group=group_LongEntry_Enabled, display=display.none, inline="lowRSID" )
i_longCondition_low_rsid_delta                                  = input.int(12,     title="delta(12,9)", tooltip="filter to require this amount of increase from previous to current rsid_osc", group=group_LongEntry_Enabled, display=display.none, inline="lowRSID" )
i_enable_longCondition_macd_crossUnderPrediction                = input.bool(true,  title="  DH-macd_crossUnderPrediction", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_vwap_bullish_diff_short                  = input.bool(true,  title="  DH-vwap_bullish_diff_short", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_realized_price_bull_div                  = input.bool(true,  title="  DH-realized_price_bull_div", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_realized_price_bull_cond                 = input.bool(false, title="  realized_price_bull_cond", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_filtered_realized_price_bull_cond        = input.bool(false, title="  filtered_realized_price_bull_cond", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_realized_price_crossOverUpper            = input.bool(false,  title="  realized_price_crossOverUpper", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_vwap_bullish_all_rising                  = input.bool(false, title="  test_vwap_bullish_all_rising", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_rsiHiddenBearishCondition                = input.bool(false, title="  test_rsiHiddenBearishCondition", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_realized_price_bull_div_not_isRisingTinyShort= input.bool(false, title="  realized_price_bull_div_not_isRisingTinyShort", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_isRising_smoothedM3_no_offset            = input.bool(false, title="  isRising_smoothedM3_no_offset", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_test                                     = input.bool(false, title="  -test", group=group_LongEntry_Enabled, display=display.none)
i_enable_longCondition_base_not_isM3GlobalSmoothedFalling       = input.bool(false,  title="  -base_not_isM3GlobalSmoothedFalling", group=group_LongEntry_Enabled, display=display.none)

//}

//{ M3 Indicator Code }
groupM3          = "M3 Settings"
m3_growth_rate_period        = input.int(92, "92D-Daily percent gain period", group=groupM3,display=display.none)
m3_globalSmoothingMethod          = input.string(title="Money Supply Smoothing Method", options=["None", "Simple Moving Average", "Exponential Moving Average", "Hull Moving Average"],  defval="None", group=groupM3, display=display.none)
m3_globalSmoothingPeriod          = input.int(title="Money Supply Smoothing Period",  defval=14, minval=1, group=groupM3, display=display.none)
smoothM3SmoothingMethod           = input.string(title="Smooth M3 Moving Average", options=["None", "Simple Moving Average", "Exponential Moving Average", "Hull Moving Average"], defval="Exponential Moving Average", group=groupM3, display=display.none)
smoothM3SmoothingPeriod           = input.int(title="Smooth M3 Smoothing Period", defval=5, minval=1, group=groupM3, display=display.none)

moneySupplyInputs = libMoneySupply.MoneySupplySettings.new()
moneySupplyInputs.m3_growth_rate_period := m3_growth_rate_period
moneySupplyInputs.m3_globalSmoothingMethod := m3_globalSmoothingMethod
moneySupplyInputs.m3_globalSmoothingPeriod := m3_globalSmoothingPeriod
moneySupplyInputs.smoothM3SmoothingMethod := smoothM3SmoothingMethod
moneySupplyInputs.smoothM3SmoothingPeriod := smoothM3SmoothingPeriod
moneySupplyInputs.i_enable_timeframe_adjustment := i_enable_timeframe_adjustment
moneySupplyInputs.timeframe_divisor := timeframe_divisor

moneySupplyData = libMoneySupply.calculate_money_supply(moneySupplyInputs)
m2_US_EU_CN = moneySupplyData.m2_US_EU_CN
m3_global = moneySupplyData.m3_global
m3_global_smoothed = moneySupplyData.m3_global_smoothed
m3_growth_rate = moneySupplyData.m3_growth_rate
m3_growth_rate_smoothed = moneySupplyData.m3_growth_rate_smoothed    
//}

//{ Hullman Moving Average Indicators, fast moving average on m3_growth_rate }
hma_length                  = input(30, "HMA Length",group=groupM3, display=display.none)
hmaTrend_slope_period       = input.int(2, "hmaTrend_slope_period",group=groupM3, display=display.none)
hma_period_LongEntry        = input(74, "HMA Period LongEntry(72 or 74?)",group=groupM3, display=display.none)
rocHMALongEntryThreshold    = input.float(-4.5,"rocHMALongEntryThreshold", step=0.1,group=groupM3, display=display.none)

if i_enable_timeframe_adjustment
    hma_length                  := int(hma_length / timeframe_divisor) > 5000 ? 5000 : int(hma_length / timeframe_divisor) 
    hmaTrend_slope_period       := int(hmaTrend_slope_period / timeframe_divisor) > 5000 ? 5000 : int(hmaTrend_slope_period / timeframe_divisor) 
    hma_period_LongEntry        := int(hma_period_LongEntry / timeframe_divisor) > 5000 ? 5000 : int(hma_period_LongEntry/ timeframe_divisor) 

hma = ta.hma(m3_growth_rate_smoothed, hma_length)
hmaTrend                 = hma - hma[hmaTrend_slope_period]
denominator = hma[hma_period_LongEntry]
rocHMALongEntry_raw = (hma - denominator) / denominator
//}

//{ MACD Setup }
macd_settings = macdLib.MACDSettings.new()
macd_settings.fast_length           := input.int(12,"Fast Length", group="MACD", display=display.none)
macd_settings.slow_length           := input.int(26,"Slow Length", group="MACD", display=display.none)
macd_settings.signal_length         := input.int(9,"Signal Smoothing",minval=1,maxval=50,group="MACD", display=display.none)
macd_settings.sma_source            := input.string("EMA","Oscillator MA Type",options=["SMA","EMA"],group="MACD", display=display.none)
macd_settings.sma_signal            := input.string("EMA","Signal Line MA Type",options=["SMA","EMA"],group="MACD", display=display.none)
macd_settings.bullishFlipSignalBars := input.int(1, "Stability in bars before bullish flip(1D=1)",group="MACD", display=display.none)
macd_settings.bearishFlipSignalBars := input.int(2, "Stability in bars before bearish flip",group="MACD", display=display.none)
macd_settings.i_macd_slope_threshold_percent := input(-9.0, "MACD Slope Threshold (%)", group="MACD", display=display.none)
macd_settings.nBarsOut              := input.int(5,"N bars in the future to predict crossover(1D=5)",group="MACD", display=display.none)

macd_source  = input(title="Source",defval=close, group="MACD", display=display.none)
macd_results = macdLib.calculate_macd(macd_source, macd_settings)

macd = macd_results.macd
signal = macd_results.signal
hist = macd_results.hist
isMacdHistRising = macd_results.isMacdHistRising
isMacdHistFalling = macd_results.isMacdHistFalling
macd_slope_above_threshold = macd_results.macd_slope_above_threshold
macd_is_increasing = macd_results.macd_is_increasing
macd_is_decreasing = macd_results.macd_is_decreasing
macd_prediction = macd_results.macd_prediction
macd_flipped_bullish = macd_results.macd_flipped_bullish
macd_flipped_bearish = macd_results.macd_flipped_bearish
macdLongEntryCondition = macd_results.macdLongEntryCondition
macd_slope_current = macd_results.macd_slope_current
//}

//{ Gaussian Channel Inputs }
groupGAUSSIAN = "Gaussian Settings"
poles           = input.int(defval=1, title="Poles", minval=1, maxval=9, group=groupGAUSSIAN, display=display.none)
per             = input.int(defval=146, title="Sampling Period", minval=2, group=groupGAUSSIAN, display=display.none)
mult            = input.float(defval=1.15, title="Filtered True Range Multiplier", minval=0, group=groupGAUSSIAN, display=display.none)
modeLag         = input.bool(defval=false, title="Reduced Lag Mode", group=groupGAUSSIAN, display=display.none)
modeFast        = input.bool(defval=false, title="Fast Response Mode", group=groupGAUSSIAN, display=display.none)
gaussian_src    = input(low, title="Gaussian Source(low)", group=groupGAUSSIAN, display=display.none)

groupAMA        = "Adaptive MA Settings"
use_ama         = input.bool(true, "Use Adaptive MA", group=groupAMA, display=display.none)
ama_length      = input.int(3, "AMA Length(3)", minval=1, group=groupAMA, display=display.none)
ama_fast        = input.int(3, "AMA Fast Period(3)", minval=1, group=groupAMA, display=display.none)
ama_slow        = input.int(30, "AMA Slow Period(30)", minval=1, group=groupAMA, display=display.none)

if i_enable_timeframe_adjustment
    ama_length  := int(ama_length / timeframe_divisor) > 5000 ? 5000 : int(ama_length / timeframe_divisor)
    ama_fast    := int(ama_fast / timeframe_divisor) > 5000 ? 5000 : int(ama_fast / timeframe_divisor) 
    ama_slow    := int(ama_slow / timeframe_divisor) > 5000 ? 5000 : int(ama_slow / timeframe_divisor) 

settings = gcl.GaussianSettings.new(
     poles = poles, 
     per = per, 
     mult = mult, 
     modeLag = modeLag, 
     modeFast = modeFast, 
     useAma = use_ama, 
     amaLength = ama_length, 
     amaFast = ama_fast, 
     amaSlow = ama_slow, 
     useSimpleCalc = false
 )

[hband, lband, ma, gaussianGreen] = gcl.calc( gaussian_src, settings)
//} ========================

//{ Stochastic RSI Calculation }
groupStochRSI       = "Stochastic RSI Settings"
stochMasterSwitch   = input.string("Enabled", title="Stochastic RSI Master Switch", options=["Enabled","Disabled"], group= groupStochRSI, display=display.none)
smoothK             = input.int(4,  "K", minval=1, group= groupStochRSI, display=display.none)
smoothD             = input.int(3,  "D", minval=1, group= groupStochRSI, display=display.none)
lengthRSI           = input.int(10, "RSI Length", minval=1, group= groupStochRSI, display=display.none)
lengthStoch         = input.int(17, "Stochastic Length", minval=1, group= groupStochRSI, display=display.none)
src_stoch           = input(close,  title="RSI Source", group= groupStochRSI, display=display.none)
stoch_tf            = input.timeframe("", "Stoch RSI Timeframe", group= groupStochRSI, display=display.none)
stoch_high_limit    = input.int(87, title="Stochastic High Limit", group= groupStochRSI, display=display.none)
stoch_low_limit     = input.int(20, title="Stochastic Low Limit", group= groupStochRSI, display=display.none)
calcStoch()         => ta.sma(ta.stoch(ta.rsi(src_stoch, lengthRSI), ta.rsi(src_stoch, lengthRSI), ta.rsi(src_stoch, lengthRSI), lengthStoch), smoothK)
stoch_value         = stoch_tf == "" ? calcStoch() : request.security(syminfo.tickerid, stoch_tf, calcStoch(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
bool stochCondition = stochMasterSwitch == "Enabled" ? (stoch_value > stoch_high_limit or stoch_value < stoch_low_limit) : true
osc_high_limit      = input.int(67, title="Maximum RSI allowed on regular long entry condition(67)", group= groupStochRSI, display=display.none)
osc_src             = input(low, "OSC source(low)", group= groupStochRSI, display=display.none)

if i_enable_timeframe_adjustment
    lengthRSI      := int(lengthRSI / timeframe_divisor) > 5000 ? 5000 : int(lengthRSI / timeframe_divisor)
    lengthStoch    := int(lengthStoch / timeframe_divisor) > 5000 ? 5000 : int(lengthStoch / timeframe_divisor)
//} ========================

//{ Stochastic Divergence}
groupStochDiv = "Stochastic Divergence"
stochDivSettings = libStochDiv.StochasticDivergenceSettings.new()
stochDivSettings.stochLength := input.int(14, title="Stochastic Length", minval=1, group=groupStochDiv, display=display.none)
stochDivSettings.smoothK := input.int(3, title="K Smoothing", minval=1, group=groupStochDiv, display=display.none)
stochDivSettings.smoothD := input.int(3, title="D Smoothing", minval=1, group=groupStochDiv, display=display.none)
stochDivSettings.maTypeK := input.string("Simple Moving Average", "MA Type K", options=["Simple Moving Average", "Exponential Moving Average", "Weighted Moving Average", "Hull Moving Average", "Volume Weighted Moving Average", "Volume Weighted Average Price", "None"], group=groupStochDiv, display=display.none)
stochDivSettings.maTypeD := input.string("Exponential Moving Average", "MA Type D", options=["Simple Moving Average", "Exponential Moving Average", "Weighted Moving Average", "Hull Moving Average", "Volume Weighted Moving Average", "Volume Weighted Average Price", "None"], group=groupStochDiv, display=display.none)
stochDivSettings.pivotLookback := input.int(5, title="Pivot Lookback Bars", minval=1, group=groupStochDiv, display=display.none)
stochDivSettings.divergenceStrength := input.int(2, title="Divergence Strength (bars away)", minval=1, group=groupStochDiv, display=display.none)

if i_enable_timeframe_adjustment
    stochDivSettings.stochLength   := int(stochDivSettings.stochLength / timeframe_divisor) > 5000 ? 5000 : int(stochDivSettings.stochLength / timeframe_divisor)
    stochDivSettings.pivotLookback := int(stochDivSettings.pivotLookback / timeframe_divisor) > 5000 ? 5000 : int(stochDivSettings.pivotLookback / timeframe_divisor)

[stoch_bullishDivergence, stoch_bearishDivergence] = libStochDiv.f_calc(stochDivSettings)
//} ========================

//{ VWAP Divergence }
groupVwapDiv = "VWAP Divergence"
vwapDivSettings = libVwapDiv.VWAPDivergenceSettings.new()
vwapDivSettings.pivotLookbackLeft := input.int(1, title="Pivot Lookback Bars Left", minval=1, group=groupVwapDiv, display=display.none)
vwapDivSettings.pivotLookbackRight := input.int(1, title="Pivot Lookback Bars Right", minval=1, group=groupVwapDiv, display=display.none)
vwapDivSettings.divergenceStrength := input.int(2, title="Divergence Strength (bars away)", minval=1, group=groupVwapDiv, display=display.none)

[vwap_bullishDivergence, vwap_bearishDivergence] = libVwapDiv.f_calc(vwapDivSettings)
//} ========================

//{ M3 Indicator }
groupM3ROC                      = "M3 Growth Rate Rate of Change"
m3ROCEnabledEntry               = input.string("Enabled", "Include Rate of Change of M3 on Long Entry", options=["Disabled","Enabled"], group=groupM3ROC, display=display.none)
m3_growth_rate_smoothed_rocLongEntryThreshold  = input.float(40, "m3_growth_rate_smoothed_rocLongEntryThreshold(40)", step=1.0, group=groupM3ROC, display=display.none)
roc_period                      = input.int(2, "ROC Period", group=groupM3ROC, display=display.none)
rocLongEntrySource              = input.string("smoothed_roc", "ROC Source for Long Entry", options=["m3_growthRateRocPercentage","smoothed_roc"], group=groupM3ROC, display=display.none)

if i_enable_timeframe_adjustment
    roc_period      := int(roc_period / timeframe_divisor) > 5000 ? 5000 : int(roc_period / timeframe_divisor) 

m3_growth_rate_roc  = ((m3_growth_rate_smoothed - nz(m3_growth_rate_smoothed[roc_period])) / nz(m3_growth_rate_smoothed[roc_period]))
m3_growthRateRocPercentage             = ((m3_growth_rate_smoothed - nz(m3_growth_rate_smoothed[roc_period])) / nz(m3_growth_rate_smoothed[roc_period])) * 100

float entryROcM3    = rocLongEntrySource == "m3_growthRateRocPercentage" ? m3_growthRateRocPercentage : m3_growth_rate_roc

m3_growthRateRocPercentage_flipped_bullish          = macdLib.getSequenceReversal_M3(-m3_growthRateRocPercentage, 3, 2, i_enable_timeframe_adjustment, timeframe_divisor)
m3_growthRateRocPercentage_flipped_bearish          = macdLib.getSequenceReversal_M3(m3_growthRateRocPercentage, 3, 2, i_enable_timeframe_adjustment, timeframe_divisor)
//}

//{ M2LeadingIndicator Indicator }
group_m2LeadingIndicator_calculations  = "M2 Leading Indicator Calculations"
m2LeadingIndicator_scalingLookback     = input.int(150, title="Scaling Lookback Period(150)", minval=2, group=group_m2LeadingIndicator_calculations, tooltip="Number of bars used to find the min/max values for scaling the M2 plots.", display=display.none)
i_m2LeadingIndicator_smoothingMethod   = input.string("Hull Moving Average", title="M2 Smoothing Method", options=["None", "Simple Moving Average", "Exponential Moving Average", "Hull Moving Average"], group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_barsToRightOfShortLength = input.int(10,"Bars from short length for diff/slope calculations(10)", group=group_general_settings, display=display.none, tooltip = "Value used in multiple entry and exit calculations, huge effect on performance")
i_m2LeadingIndicator_microOffset       = input.int(3, title= "Micro offset, orange line(3)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_miniOffset        = input.int(10, title="Mini offset, orange line(10)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_tinyOffset        = input.int(48, "Tiny offset, orange line(48)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_shortOffset       = input.int(64, "Short offset, orange line(64)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_shortOffset_smoothingLength = input.int(13, "Short Offset Smoothing Length(13)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_mediumOffset      = input.int(78, "Medium offset, red line", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_mediumOffset_smoothingLength = input.int(16, "Medium Offset Smoothing Length", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_longOffset        = input.int(92, "Long offset, yellow line(92)", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_longOffset_smoothingLength = input.int(20, "Long Offset Smoothing Length", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_riseFallLength    = input.int(3, "Length to use for calculating Rise/Fall", group=group_m2LeadingIndicator_calculations, display=display.none)
i_m2LeadingIndicator_oneDayOffset      = input.int(1, "Adjustment factor for one day, unclear if scaling it is needed", group=group_m2LeadingIndicator_calculations, display=display.none)  

if i_enable_timeframe_adjustment
    m2LeadingIndicator_scalingLookback                := int(m2LeadingIndicator_scalingLookback / timeframe_divisor) > 5000 ? 5000 : int(m2LeadingIndicator_scalingLookback/ timeframe_divisor)
    i_m2LeadingIndicator_barsToRightOfShortLength     := int(i_m2LeadingIndicator_barsToRightOfShortLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_barsToRightOfShortLength/ timeframe_divisor)
    i_m2LeadingIndicator_tinyOffset                   := int(i_m2LeadingIndicator_tinyOffset / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_tinyOffset/ timeframe_divisor)
    i_m2LeadingIndicator_shortOffset                  := int(i_m2LeadingIndicator_shortOffset / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_shortOffset / timeframe_divisor)
    i_m2LeadingIndicator_shortOffset_smoothingLength  := int(i_m2LeadingIndicator_shortOffset_smoothingLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_shortOffset_smoothingLength/ timeframe_divisor)
    i_m2LeadingIndicator_mediumOffset                 := int(i_m2LeadingIndicator_mediumOffset / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_mediumOffset / timeframe_divisor)
    i_m2LeadingIndicator_mediumOffset_smoothingLength := int(i_m2LeadingIndicator_mediumOffset_smoothingLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_mediumOffset_smoothingLength/ timeframe_divisor)
    i_m2LeadingIndicator_longOffset                   := int(i_m2LeadingIndicator_longOffset / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_longOffset / timeframe_divisor)
    i_m2LeadingIndicator_longOffset_smoothingLength   := int(i_m2LeadingIndicator_longOffset_smoothingLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_longOffset_smoothingLength/ timeframe_divisor)
    i_m2LeadingIndicator_riseFallLength               := int(i_m2LeadingIndicator_riseFallLength  / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_riseFallLength / timeframe_divisor)
    i_m2LeadingIndicator_oneDayOffset                 := int(i_m2LeadingIndicator_oneDayOffset  / timeframe_divisor) > 5000 ? 5000 : int(i_m2LeadingIndicator_oneDayOffset / timeframe_divisor)

m2_smoothed_microOffset     = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_shortOffset_smoothingLength)
m2_smoothed_miniOffset      = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_shortOffset_smoothingLength)
m2_smoothed_tinyOffset      = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_shortOffset_smoothingLength)
m2_smoothed_shortOffset     = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_shortOffset_smoothingLength)
m2_smoothed_mediumOffset    = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_mediumOffset_smoothingLength)
m2_smoothed_longOffset      = utils.f_ma(m2_US_EU_CN, i_m2LeadingIndicator_smoothingMethod, i_m2LeadingIndicator_longOffset_smoothingLength)

m2_smoothedTinyOffsetSlope     = m2_smoothed_shortOffset[i_m2LeadingIndicator_tinyOffset] - m2_smoothed_shortOffset[(i_m2LeadingIndicator_tinyOffset + i_m2LeadingIndicator_oneDayOffset) > 5000 ? 5000 : (i_m2LeadingIndicator_tinyOffset + i_m2LeadingIndicator_oneDayOffset)]
m2_smoothedShortOffsetSlope    = m2_smoothed_shortOffset[i_m2LeadingIndicator_shortOffset] - m2_smoothed_shortOffset[(i_m2LeadingIndicator_shortOffset + i_m2LeadingIndicator_oneDayOffset) > 5000 ? 5000 : (i_m2LeadingIndicator_shortOffset + i_m2LeadingIndicator_oneDayOffset)]
m2_smoothedMediumOffsetSlope   = m2_smoothed_mediumOffset[i_m2LeadingIndicator_mediumOffset] - m2_smoothed_mediumOffset[(i_m2LeadingIndicator_mediumOffset + i_m2LeadingIndicator_oneDayOffset) > 5000 ? 5000 : (i_m2LeadingIndicator_mediumOffset + i_m2LeadingIndicator_oneDayOffset) ]
m2_smoothedLongOffsetSlope     = m2_smoothed_longOffset[i_m2LeadingIndicator_longOffset] - m2_smoothed_longOffset[(i_m2LeadingIndicator_longOffset + i_m2LeadingIndicator_oneDayOffset) > 5000 ? 5000 : (i_m2LeadingIndicator_longOffset + i_m2LeadingIndicator_oneDayOffset)]

isM2SmoothedMicroOffsetRising    = ta.rising(m2_smoothed_microOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedMiniOffsetRising     = ta.rising(m2_smoothed_miniOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedTinyOffsetRising     = ta.rising(m2_smoothed_shortOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedShortOffsetRising    = ta.rising(m2_smoothed_shortOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedMediumOffsetRising   = ta.rising(m2_smoothed_mediumOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedLongOffsetRising     = ta.rising(m2_smoothed_longOffset, i_m2LeadingIndicator_riseFallLength)

isRising_smoothedM3_no_offset = ta.rising (m3_global_smoothed, i_m2LeadingIndicator_riseFallLength)
isFalling_smoothedM3_no_offset= ta.falling(m3_global_smoothed, i_m2LeadingIndicator_riseFallLength)

isRising_smoothedM3_short_offset     = ta.rising(m3_growth_rate_smoothed[i_m2LeadingIndicator_shortOffset], i_m2LeadingIndicator_shortOffset_smoothingLength)
isFalling_smoothedM3_short_offset    = ta.falling(m3_growth_rate_smoothed[i_m2LeadingIndicator_shortOffset], i_m2LeadingIndicator_shortOffset_smoothingLength)

isM2SmoothedMicroOffsetFalling   = ta.falling(m2_smoothed_microOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedMiniOffsetFalling    = ta.falling(m2_smoothed_miniOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedTinyOffsetFalling    = ta.falling(m2_smoothed_shortOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedShortOffsetFalling   = ta.falling(m2_smoothed_shortOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedMediumOffsetFalling  = ta.falling(m2_smoothed_mediumOffset, i_m2LeadingIndicator_riseFallLength)
isM2SmoothedLongOffsetFalling    = ta.falling(m2_smoothed_longOffset, i_m2LeadingIndicator_riseFallLength)

isM2SmoothedTinyOffsetFlat       = not isM2SmoothedTinyOffsetRising   and not isM2SmoothedTinyOffsetFalling
isM2SmoothedShortOffsetFlat      = not isM2SmoothedShortOffsetRising  and not isM2SmoothedShortOffsetFalling
isM2SmoothedMediumOffsetFlat     = not isM2SmoothedMediumOffsetRising and not isM2SmoothedMediumOffsetFalling
isM2SmoothedLongOffsetFlat       = not isM2SmoothedLongOffsetRising   and not isM2SmoothedLongOffsetFalling

m2_smoothed_tinyOffset   := utils.f_scale_ToRange(m2_smoothed_tinyOffset,  m2LeadingIndicator_scalingLookback, m2LeadingIndicator_scalingLookback)
m2_smoothed_shortOffset  := utils.f_scale_ToRange(m2_smoothed_shortOffset,  m2LeadingIndicator_scalingLookback, m2LeadingIndicator_scalingLookback)
m2_smoothed_mediumOffset := utils.f_scale_ToRange(m2_smoothed_mediumOffset, m2LeadingIndicator_scalingLookback, m2LeadingIndicator_scalingLookback)
m2_smoothed_longOffset   := utils.f_scale_ToRange(m2_smoothed_longOffset,   m2LeadingIndicator_scalingLookback, m2LeadingIndicator_scalingLookback)

m2_smoothedShort_N_bars_out        = m2_smoothed_shortOffset[i_m2LeadingIndicator_shortOffset - i_m2LeadingIndicator_barsToRightOfShortLength]
m2_tinyOffsetDiffToNbarsOut        = m2_smoothed_tinyOffset[i_m2LeadingIndicator_tinyOffset - i_m2LeadingIndicator_barsToRightOfShortLength] - m2_smoothed_tinyOffset[i_m2LeadingIndicator_tinyOffset]
m2_shortOffsetDiffToNbarsOut       = m2_smoothedShort_N_bars_out - m2_smoothed_shortOffset[i_m2LeadingIndicator_shortOffset]
m2_mediumOffsetDiffTo12barsOut     = m2_smoothed_shortOffset[i_m2LeadingIndicator_shortOffset - i_m2LeadingIndicator_barsToRightOfShortLength] - m2_smoothed_shortOffset[i_m2LeadingIndicator_mediumOffset]
m2_shortOffsetSlopeToNbarsOut      = m2_shortOffsetDiffToNbarsOut / nz(i_m2LeadingIndicator_barsToRightOfShortLength)
//} ========================

//{ M2 MACD Calculations
group_m2_macd       = "M2 MACD Settings"
i_m2Macd_fastLength     = input.int(50, title="Fast Length", minval=1,  group=group_m2_macd, tooltip="Fast Moving Average length for MACD calculation on *Original* Total M2.", display=display.none)
i_m2Macd_slowLength     = input.int(200, title="Slow Length", minval=1, group=group_m2_macd, tooltip="Slow Moving Average length for MACD calculation on *Original* Total M2.", display=display.none)
i_m2Macd_signalLength   = input.int(9, title="Signal Length", minval=1, group=group_m2_macd, tooltip="Signal Line smoothing length for MACD.", display=display.none)

if i_enable_timeframe_adjustment
    i_m2Macd_fastLength   := int(i_m2Macd_fastLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2Macd_fastLength / timeframe_divisor)
    i_m2Macd_slowLength   := int(i_m2Macd_slowLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2Macd_slowLength / timeframe_divisor)
    i_m2Macd_signalLength := int(i_m2Macd_signalLength / timeframe_divisor) > 5000 ? 5000 : int(i_m2Macd_signalLength / timeframe_divisor)

m2Macd_fastMA       = ta.ema(m2_US_EU_CN, i_m2Macd_fastLength)
m2Macd_slowMA       = ta.ema(m2_US_EU_CN, i_m2Macd_slowLength)
m2Macd_line     = m2Macd_fastMA - m2Macd_slowMA
m2Macd_signalLine   = ta.ema(m2Macd_line, i_m2Macd_signalLength)

isM2MacdShortCrossBullish = ta.crossover(m2Macd_line[i_m2LeadingIndicator_shortOffset], m2Macd_signalLine[i_m2LeadingIndicator_shortOffset])
m2Macd_shortOffsetDifference = m2Macd_line[i_m2LeadingIndicator_shortOffset] - m2Macd_signalLine[i_m2LeadingIndicator_shortOffset]
isM2MacdLongCrossBullish = ta.crossover(m2Macd_line[i_m2LeadingIndicator_longOffset], m2Macd_signalLine[i_m2LeadingIndicator_longOffset])
//} ========================

//{ RSI Divergence }
rsid_label = "RSI Divergence"
i_enable_timeframe_adjustment_rsi = input.bool(true, title="Apply Time Frame adjustment, ", group=rsid_label, display=display.none, inline="rsid_adj")
i_timeframe_adjustment_weight = input.float(1.0, title="w/ weight", minval=0.1, step=0.1, group=rsid_label, display=display.none, inline="rsid_adj")
i_rsid_src            = input(close, title="RSID Source", group=rsid_label, display=display.none)
i_rsid_lookback       = input.int(14, title="Look-back",  minval=1, step=1,group=rsid_label, display=display.none)
i_rsid_overbought     = input.int(70, title="i_rsid_overbought", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_oversold       = input.int(30, title="i_rsid_oversold", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_minBars        = input.int(5, "Min Bars Between Peaks", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_maxBars        = input.int(50, "Max Bars Between Peaks", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_res            = input.timeframe("", title="Oscillator resolution", group=rsid_label, display=display.none)
i_realTime_lookbackPeriod = input.int(20, "Lookback Period for Real-Time Div", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_len            = input.int(14, minval=1, title="Length", group=rsid_label, display=display.none)
i_rsid_bbLength       = input.int(20, "Bollinger Length", minval=1, step=1, group=rsid_label, display=display.none)
i_rsid_bbMultiplier   = input.float(2.0, "Bollinger Multiplier", minval=0.1, step=0.1, group=rsid_label, display=display.none)

if i_enable_timeframe_adjustment and i_enable_timeframe_adjustment_rsi
    i_rsid_lookback := int(i_rsid_lookback * i_timeframe_adjustment_weight / timeframe_divisor) > 5000 ? 5000 : int(i_rsid_lookback * i_timeframe_adjustment_weight / timeframe_divisor)
    i_realTime_lookbackPeriod := int(i_realTime_lookbackPeriod  * i_timeframe_adjustment_weight / timeframe_divisor) > 5000 ? 5000 : int(i_realTime_lookbackPeriod  * i_timeframe_adjustment_weight / timeframe_divisor)
    i_rsid_len  := int(i_rsid_len  * i_timeframe_adjustment_weight / timeframe_divisor) > 5000 ? 5000 : int(i_rsid_len  * i_timeframe_adjustment_weight / timeframe_divisor)
    i_rsid_bbLength := int(i_rsid_bbLength * i_timeframe_adjustment_weight / timeframe_divisor) > 5000 ? 5000 : int(i_rsid_bbLength * i_timeframe_adjustment_weight / timeframe_divisor)

rsid_lenUp            = ta.ema(math.max(ta.change(i_rsid_src), 0), i_rsid_len)
rsid_lenDn            = ta.ema(-math.min(ta.change(i_rsid_src), 0), i_rsid_len)
rsi = rsid_lenDn == 0 ? 100 : rsid_lenUp == 0 ? 0 : 100 - (100 / (1 + rsid_lenUp / rsid_lenDn))
rsid_osc = request.security(syminfo.tickerid, i_rsid_res, rsi)

rsid_phFound = rsiDiv.phFound(rsid_osc, i_rsid_lookback, i_rsid_lookback)
rsid_plFound = rsiDiv.plFound(rsid_osc, i_rsid_lookback, i_rsid_lookback)
rsid_overbought = rsid_osc > i_rsid_overbought
rsid_oversold   = rsid_osc < i_rsid_oversold

_rsiRegularBullishVal = rsiDiv.regularBullish(rsid_osc, low, 0, 5, 100, rsid_plFound)
rsiRegularBullishCondition   = i_enable_longCondition_rsiRegularBullishDivergence and _rsiRegularBullishVal
_rsiSlowingBullishVal = rsiDiv.slowingBullish(rsid_osc, i_rsid_oversold)
rsiSlowingBullishCondition   = rsid_oversold[1] and i_enable_longCondition_rsiSlowingBullishDivergence and _rsiSlowingBullishVal
_rsiDelayedBullishVal = rsiDiv.delayedDipRSI(rsid_osc, i_rsid_oversold, 0)
rsiDelayedBullishCondition   = rsid_oversold[1] and i_enable_longCondition_rsiDelayedDipDivergence and _rsiDelayedBullishVal
_rsiHiddenBullishVal = rsiDiv.hiddenBullish(rsid_osc, close, 0, 5, 100, rsid_plFound)
rsiHiddenBullishCondition    = i_enable_longCondition_rsiHiddenBullishDivergence and _rsiHiddenBullishVal
_rsiRealTimeBullishVal = rsiDiv.realTimeBullishDiv(rsid_osc, low, i_rsid_maxBars, i_rsid_oversold, i_rsid_bbLength, i_rsid_bbMultiplier)
rsiRealTimeBullishCondition  = i_enable_longCondition_rsiRealTimeBullishDivergence and _rsiRealTimeBullishVal
_rsiConfirmedBullishVal = rsiDiv.confirmedBullishDiv(rsid_osc, low, i_rsid_minBars, i_rsid_maxBars, i_rsid_bbLength, i_rsid_bbMultiplier)
rsiConfirmedBullishCondition = i_enable_longCondition_rsiConfirmedBullishDivergence and _rsiConfirmedBullishVal
_rsiHiddenBearishVal = rsiDiv.hiddenBearish(rsid_osc, high, 0, 5, 100, rsid_phFound)
rsiHiddenBearishCondition_calc    = _rsiHiddenBearishVal // Not enabled in main strategy, but needed for LE lib
//} ========================

//{ Stoch and RSI range filter on Long entry}
groupStochAndRSI               = "Stoch and RSI range filter Long Entry"
stochRSI_len                   = input.int(14, "Stoch and RSI length(14)", minval=1, group=groupStochAndRSI, display=display.none)
rsi_lowpass_filter             = input.int(30, "RSI Threshold for Low(30)", minval=1, group=groupStochAndRSI, display=display.none)
rsi_highpass_filter            = input.int(60, "RSI Threshold for High(60)", minval=1, group=groupStochAndRSI, display=display.none)
stochvalue_lowpass_filter      = input.int(37, "Stoch Value Threshold for Low(?)", minval=1, group=groupStochAndRSI, display=display.none)
stochvalue_highpass_filter     = input.int(70, "Stoch Value Threshold for High(?)", minval=1, group=groupStochAndRSI, display=display.none)

if i_enable_timeframe_adjustment
    stochRSI_len  := int(stochRSI_len  / timeframe_divisor) > 5000 ? 5000 : int(stochRSI_len  / timeframe_divisor)

rsi_low_range_cond          = false
rsi_medium_range_cond       = false
rsi_high_range_cond         = false

osc = ta.rsi(osc_src, stochRSI_len)

if rsid_osc > rsi_highpass_filter
    rsi_high_range_cond     := true
if rsid_osc < rsi_lowpass_filter
    rsi_low_range_cond      := true
if rsid_osc > rsi_lowpass_filter and osc < rsi_highpass_filter
    rsi_medium_range_cond   := true

stoch_low_range_cond        = false
stoch_high_range_cond       = false

if stoch_value > stochvalue_highpass_filter
    stoch_high_range_cond   := true
if stoch_value < stochvalue_lowpass_filter
    stoch_low_range_cond    := true
//} ========================

//{ Realized Price & Divergence}
groupRealizedPrice = "Realized Price"
realizedPriceSettings = libRealizedPrice.RealizedPriceSettings.new()
realizedPriceSettings.realizedPriceComparisonSource := input(title="Source for price to compare to(close)",defval=close, display=display.none, group=groupRealizedPrice)
realizedPriceSettings.smoothingLength := input.int(2, title="Smoothing Length(10)", minval=1, display=display.none, group=groupRealizedPrice)
realizedPriceSettings.smoothingMA := input.string("Simple Moving Average", "Smoothing MA Type", options=["Simple Moving Average", "Exponential Moving Average", "Weighted Moving Average", "Hull Moving Average", "Volume Weighted Moving Average", "Volume Weighted Average Price", "None"], group=groupRealizedPrice, display=display.none)
realizedPriceSettings.realizedPriceLength := input.int(5, title="Realized Price Length(80)", minval=1, display=display.none, group=groupRealizedPrice)
realizedPriceSettings.pivotLeft := input.int(5, title="Divergence Pivot Left(15)", minval=1, display=display.none, group=groupRealizedPrice)
realizedPriceSettings.pivotRight := input.int(1, title="Divergence Pivot Right(5)", minval=1, display=display.none, group=groupRealizedPrice)
realizedPriceSettings.gaussianLen := input.int(15, title="Gaussian Bands Length(50)", group=groupRealizedPrice, display=display.none)
realizedPriceSettings.gaussianMult := input.float(0.65, title="Gaussian Bands StdDev Mult(2)", group=groupRealizedPrice, display=display.none)
realizedPriceSettings.bullNuplThreshold := input.float(0, title="Filter for Bull NUPL Threshold(0)", display=display.none, group=groupRealizedPrice)
realizedPriceSettings.bearNuplThreshold := input.float(2.0, title="Filter for Bear NUPL Threshold(2.0)", display=display.none, group=groupRealizedPrice)

if i_enable_timeframe_adjustment
    realizedPriceSettings.smoothingLength := int(realizedPriceSettings.smoothingLength  / timeframe_divisor) > 5000 ? 5000 : int(realizedPriceSettings.smoothingLength  / timeframe_divisor)
    realizedPriceSettings.pivotLeft       := int(realizedPriceSettings.pivotLeft / timeframe_divisor) > 5000 ? 5000 : int(realizedPriceSettings.pivotLeft / timeframe_divisor)
    realizedPriceSettings.gaussianLen     := int(realizedPriceSettings.gaussianLen / timeframe_divisor) > 5000 ? 5000 : int(realizedPriceSettings.gaussianLen / timeframe_divisor)

[realized_price_bull_div, realized_price_bear_div, realized_price_bull_cond, realized_price_bear_cond, filtered_realized_price_bull_cond, filtered_realized_price_bear_cond, realized_price_smoothed_nupl, realized_price_gaussian_upper, realized_price_nupl] = libRealizedPrice.f_calc(realizedPriceSettings)
//} --------------------------------

atr1_dividedby_close = ta.atr(1) / close

// =====================================================================================================================
// LIBRARY CALL
// =====================================================================================================================

longEntryEnablementInputs = libLongEntry.LongEntryEnablementInputs.new()
longEntryEnablementInputs.i_enablelongCondition_original := i_enablelongCondition_original
longEntryEnablementInputs.i_enablelongCondition_new := i_enablelongCondition_new
longEntryEnablementInputs.i_enablelongCondition_base := i_enablelongCondition_base
longEntryEnablementInputs.i_enablelongCondition_rocLongEntry := i_enablelongCondition_rocLongEntry
longEntryEnablementInputs.i_enableLongGaussianGreenAndHMA := i_enableLongGaussianGreenAndHMA
longEntryEnablementInputs.i_enable_longCondition_macd_crossOver := i_enable_longCondition_macd_crossOver
longEntryEnablementInputs.i_enable_longCondition_rsiSlowingBullishDivergence := i_enable_longCondition_rsiSlowingBullishDivergence
longEntryEnablementInputs.i_enable_longCondition_rsiDelayedDipDivergence := i_enable_longCondition_rsiDelayedDipDivergence
longEntryEnablementInputs.i_enable_longCondition_rsiRegularBullishDivergence := i_enable_longCondition_rsiRegularBullishDivergence
longEntryEnablementInputs.i_enable_longCondition_rsiHiddenBullishDivergence := i_enable_longCondition_rsiHiddenBullishDivergence
longEntryEnablementInputs.i_enable_longCondition_rsiConfirmedBullishDivergence := i_enable_longCondition_rsiConfirmedBullishDivergence
longEntryEnablementInputs.i_enable_longCondition_rsiRealTimeBullishDivergence := i_enable_longCondition_rsiRealTimeBullishDivergence
longEntryEnablementInputs.i_enable_longCondition_realTime_slowing_confirmed := i_enable_longCondition_realTime_slowing_confirmed
longEntryEnablementInputs.i_enable_longCondition_stochastic_divergence := i_enable_longCondition_stochastic_divergence
longEntryEnablementInputs.i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish := i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish
longEntryEnablementInputs.i_enable_longCondition_stochbullish_macd_flipped_bullish_rocM3_flipped_bullish := i_enable_longCondition_stochbullish_macd_flipped_bullish_rocM3_flipped_bullish
longEntryEnablementInputs.i_enable_longCondition_base_not_macd_is_decreasing := i_enable_longCondition_base_not_macd_is_decreasing
longEntryEnablementInputs.i_enable_longCondition_base_isMacdHistRising := i_enable_longCondition_base_isMacdHistRising
longEntryEnablementInputs.i_enable_longCondition_base_isM2SmoothedShortOffsetRising := i_enable_longCondition_base_isM2SmoothedShortOffsetRising
longEntryEnablementInputs.i_enable_longCondition_base_macd_slope_above_threshold := i_enable_longCondition_base_macd_slope_above_threshold
longEntryEnablementInputs.i_enable_longCondition_base_not_isM2SmoothedLongOffsetFalling := i_enable_longCondition_base_not_isM2SmoothedLongOffsetFalling
longEntryEnablementInputs.i_enable_longCondition_base_not_rsi_high_range_cond := i_enable_longCondition_base_not_rsi_high_range_cond
longEntryEnablementInputs.i_enable_longCondition_base_rsid_osc_above_50 := i_enable_longCondition_base_rsid_osc_above_50
longEntryEnablementInputs.i_enable_longCondition_base_stoch_high_range_cond := i_enable_longCondition_base_stoch_high_range_cond
longEntryEnablementInputs.i_enable_longCondition_base_stoch_low_range_cond := i_enable_longCondition_base_stoch_low_range_cond
longEntryEnablementInputs.i_enable_longCondition_isM2MacdLongCrossBullish := i_enable_longCondition_isM2MacdLongCrossBullish
longEntryEnablementInputs.i_enable_longCondition_isM2MacdShortCrossBullish := i_enable_longCondition_isM2MacdShortCrossBullish
longEntryEnablementInputs.i_enable_longCondition_low_rsid := i_enable_longCondition_low_rsid
longEntryEnablementInputs.i_enable_longCondition_macd_crossUnderPrediction := i_enable_longCondition_macd_crossUnderPrediction
longEntryEnablementInputs.i_enable_longCondition_vwap_bullish_diff_short := i_enable_longCondition_vwap_bullish_diff_short
longEntryEnablementInputs.i_enable_longCondition_realized_price_bull_div := i_enable_longCondition_realized_price_bull_div
longEntryEnablementInputs.i_enable_longCondition_realized_price_bull_cond := i_enable_longCondition_realized_price_bull_cond
longEntryEnablementInputs.i_enable_longCondition_filtered_realized_price_bull_cond := i_enable_longCondition_filtered_realized_price_bull_cond
longEntryEnablementInputs.i_enable_longCondition_realized_price_crossOverUpper := i_enable_longCondition_realized_price_crossOverUpper
longEntryEnablementInputs.i_enable_longCondition_vwap_bullish_all_rising := i_enable_longCondition_vwap_bullish_all_rising
longEntryEnablementInputs.i_enable_longCondition_rsiHiddenBearishCondition := i_enable_longCondition_rsiHiddenBearishCondition
longEntryEnablementInputs.i_enable_longCondition_realized_price_bull_div_not_isRisingTinyShort := i_enable_longCondition_realized_price_bull_div_not_isRisingTinyShort
longEntryEnablementInputs.i_enable_longCondition_isRising_smoothedM3_no_offset := i_enable_longCondition_isRising_smoothedM3_no_offset
longEntryEnablementInputs.i_enable_longCondition_test := i_enable_longCondition_test
longEntryEnablementInputs.i_enable_longCondition_base_not_isM3GlobalSmoothedFalling := i_enable_longCondition_base_not_isM3GlobalSmoothedFalling
longEntryEnablementInputs.i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish_n_bars_out := i_enable_longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish_n_bars_out
longEntryEnablementInputs.i_longCondition_base_rsid_rsid_osc_threshold := i_longCondition_base_rsid_rsid_osc_threshold
longEntryEnablementInputs.i_longCondition_base_rsid_m2_threshold := i_longCondition_base_rsid_m2_threshold
longEntryEnablementInputs.i_longCondition_low_rsid_threshold := i_longCondition_low_rsid_threshold
longEntryEnablementInputs.i_longCondition_low_rsid_delta := i_longCondition_low_rsid_delta
longEntryEnablementInputs.i_stochbullish_rocM3bullish_not_macd_flipped_bearish_macd_value := i_stochbullish_rocM3bullish_not_macd_flipped_bearish_macd_value

longEntryGeneralInputs = libLongEntry.LongEntryGeneralInputs.new()
longEntryGeneralInputs.timeCondition := timeCondition
longEntryGeneralInputs.i_log_variables_to_list_of_trades := i_log_variables_to_list_of_trades
longEntryGeneralInputs.gaussianGreen := gaussianGreen
longEntryGeneralInputs.macdLongEntryCondition := macdLongEntryCondition
longEntryGeneralInputs.longEntryAggressiveness := longEntryAggressiveness
longEntryGeneralInputs.close := close
longEntryGeneralInputs.hband := hband
longEntryGeneralInputs.lband := lband
longEntryGeneralInputs.osc := osc
longEntryGeneralInputs.hmaTrend := hmaTrend
longEntryGeneralInputs.atr1_dividedby_close := atr1_dividedby_close
longEntryGeneralInputs.osc_high_limit := osc_high_limit

longEntryRocM3Inputs = libLongEntry.LongEntryRocM3Inputs.new()
longEntryRocM3Inputs.m3_growthRateRocPercentage_flipped_bullish := m3_growthRateRocPercentage_flipped_bullish
longEntryRocM3Inputs.m3_growthRateRocPercentage_flipped_bearish := m3_growthRateRocPercentage_flipped_bearish
longEntryRocM3Inputs.m3ROCEnabledEntry := m3ROCEnabledEntry
longEntryRocM3Inputs.rocHMALongEntry_smoothed := rocHMALongEntry_raw
longEntryRocM3Inputs.rocHMALongEntryThreshold := rocHMALongEntryThreshold
longEntryRocM3Inputs.entryROcM3 := entryROcM3
longEntryRocM3Inputs.m3_growth_rate_smoothed_rocLongEntryThreshold := m3_growth_rate_smoothed_rocLongEntryThreshold

longEntryMacdInputs = libLongEntry.LongEntryMacdInputs.new()
longEntryMacdInputs.macd_flipped_bullish := macd_flipped_bullish
longEntryMacdInputs.macd_flipped_bearish := macd_flipped_bearish
longEntryMacdInputs.macd_is_decreasing := macd_is_decreasing
longEntryMacdInputs.isMacdHistRising := isMacdHistRising
longEntryMacdInputs.macd_slope_above_threshold := macd_slope_above_threshold
longEntryMacdInputs.macd_prediction := macd_prediction
longEntryMacdInputs.macd_slope_current := macd_slope_current
longEntryMacdInputs.macd := macd
longEntryMacdInputs.signal := signal

longEntryRsiDivInputs = libLongEntry.LongEntryRsiDivInputs.new()
longEntryRsiDivInputs.rsiSlowingBullishCondition := _rsiSlowingBullishVal
longEntryRsiDivInputs.rsiDelayedBullishCondition := _rsiDelayedBullishVal
longEntryRsiDivInputs.rsiRegularBullishCondition := _rsiRegularBullishVal
longEntryRsiDivInputs.rsiHiddenBullishCondition := _rsiHiddenBullishVal
longEntryRsiDivInputs.rsiHiddenBearishCondition := rsiHiddenBearishCondition_calc
longEntryRsiDivInputs.rsiRealTimeBullishCondition := _rsiRealTimeBullishVal
longEntryRsiDivInputs.rsiConfirmedBullishCondition := _rsiConfirmedBullishVal
longEntryRsiDivInputs.rsi_high_range_cond := rsi_high_range_cond
longEntryRsiDivInputs.rsi_medium_range_cond := rsi_medium_range_cond
longEntryRsiDivInputs.rsid_osc := rsid_osc

longEntryStochInputs = libLongEntry.LongEntryStochInputs.new()
longEntryStochInputs.stochCondition := stochCondition
longEntryStochInputs.stoch_high_range_cond := stoch_high_range_cond
longEntryStochInputs.stoch_low_range_cond := stoch_low_range_cond
longEntryStochInputs.stoch_bullishDivergence := stoch_bullishDivergence
longEntryStochInputs.stoch_bearishDivergence := stoch_bearishDivergence
longEntryStochInputs.stoch_value := stoch_value

longEntryVwapDivInputs = libLongEntry.LongEntryVwapDivInputs.new()
longEntryVwapDivInputs.vwap_bullishDivergence := vwap_bullishDivergence
longEntryVwapDivInputs.vwap_bearishDivergence := vwap_bearishDivergence

longEntryRealizedPriceInputs = libLongEntry.LongEntryRealizedPriceInputs.new()
longEntryRealizedPriceInputs.realized_price_bull_cond := realized_price_bull_cond
longEntryRealizedPriceInputs.filtered_realized_price_bull_cond := filtered_realized_price_bull_cond
longEntryRealizedPriceInputs.realized_price_bull_div := realized_price_bull_div
longEntryRealizedPriceInputs.realized_price_smoothed_nupl := realized_price_smoothed_nupl
longEntryRealizedPriceInputs.realized_price_gaussian_upper := realized_price_gaussian_upper

longEntryM2LiInputs = libLongEntry.LongEntryM2LiInputs.new()
longEntryM2LiInputs.isM2SmoothedShortOffsetFalling := isM2SmoothedShortOffsetFalling
longEntryM2LiInputs.isM2SmoothedMediumOffsetFalling := isM2SmoothedMediumOffsetFalling
longEntryM2LiInputs.isM2SmoothedShortOffsetRising := isM2SmoothedShortOffsetRising
longEntryM2LiInputs.isM2SmoothedMediumOffsetRising := isM2SmoothedMediumOffsetRising
longEntryM2LiInputs.isM2SmoothedLongOffsetFalling := isM2SmoothedLongOffsetFalling
longEntryM2LiInputs.isM2SmoothedLongOffsetRising := isM2SmoothedLongOffsetRising
longEntryM2LiInputs.isFalling_smoothedM3_short_offset := isFalling_smoothedM3_short_offset
longEntryM2LiInputs.isM2MacdLongCrossBullish := isM2MacdLongCrossBullish
longEntryM2LiInputs.isM2MacdShortCrossBullish := isM2MacdShortCrossBullish
longEntryM2LiInputs.isRising_smoothedM3_short_offset := isRising_smoothedM3_short_offset
longEntryM2LiInputs.isM2SmoothedTinyOffsetFalling := isM2SmoothedTinyOffsetFalling
longEntryM2LiInputs.isM2SmoothedTinyOffsetRising := isM2SmoothedTinyOffsetRising
longEntryM2LiInputs.isM2SmoothedMiniOffsetRising := isM2SmoothedMiniOffsetRising
longEntryM2LiInputs.isM2SmoothedMicroOffsetFalling := isM2SmoothedMicroOffsetFalling
longEntryM2LiInputs.isM2SmoothedShortOffsetFlat := isM2SmoothedShortOffsetFlat
longEntryM2LiInputs.isM2SmoothedMediumOffsetFlat := isM2SmoothedMediumOffsetFlat
longEntryM2LiInputs.isM2SmoothedLongOffsetFlat := isM2SmoothedLongOffsetFlat
longEntryM2LiInputs.isFalling_smoothedM3_no_offset := isFalling_smoothedM3_no_offset
longEntryM2LiInputs.isRising_smoothedM3_no_offset := isRising_smoothedM3_no_offset
longEntryM2LiInputs.i_m2LeadingIndicator_shortOffset := i_m2LeadingIndicator_shortOffset
longEntryM2LiInputs.i_m2LeadingIndicator_mediumOffset := i_m2LeadingIndicator_mediumOffset
longEntryM2LiInputs.i_m2LeadingIndicator_longOffset := i_m2LeadingIndicator_longOffset
longEntryM2LiInputs.m2_mediumOffsetDiffTo12barsOut := m2_mediumOffsetDiffTo12barsOut
longEntryM2LiInputs.m2_smoothedLongOffsetSlope := m2_smoothedLongOffsetSlope
longEntryM2LiInputs.m2_smoothedMediumOffsetSlope := m2_smoothedMediumOffsetSlope
longEntryM2LiInputs.m2_tinyOffsetDiffToNbarsOut := m2_tinyOffsetDiffToNbarsOut
longEntryM2LiInputs.m2Macd_shortOffsetDifference := m2Macd_shortOffsetDifference
longEntryM2LiInputs.m2_shortOffsetDiffToNbarsOut := m2_shortOffsetDiffToNbarsOut
longEntryM2LiInputs.m2_smoothedShortOffsetSlope := m2_smoothedShortOffsetSlope
longEntryM2LiInputs.m2_smoothedTinyOffsetSlope := m2_smoothedTinyOffsetSlope
longEntryM2LiInputs.m2_smoothedShort_N_bars_out := m2_smoothedShort_N_bars_out
longEntryM2LiInputs.m2_shortOffsetSlopeToNbarsOut := m2_shortOffsetSlopeToNbarsOut
longEntryM2LiInputs.m2_smoothed_shortOffset := m2_smoothed_shortOffset
longEntryM2LiInputs.m2_smoothed_mediumOffset := m2_smoothed_mediumOffset
longEntryM2LiInputs.m2_smoothed_longOffset := m2_smoothed_longOffset

longEntryResults = libLongEntry.f_calculateLongEntry(longEntryEnablementInputs, longEntryGeneralInputs, longEntryRocM3Inputs, longEntryMacdInputs, longEntryRsiDivInputs, longEntryStochInputs, longEntryVwapDivInputs, longEntryRealizedPriceInputs, longEntryM2LiInputs)

// =====================================================================================================================
// PLOTTING LOGIC
// =====================================================================================================================
plot(0,color=color.black, display=display.none)
plot(longEntryResults.longCondition_original ? i_plot_baseline - i_plot_increment * 1 : na, title="original", style=plot.style_linebr, color=color.aqua, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_new ? i_plot_baseline - i_plot_increment * 2 : na, title="new", style=plot.style_linebr, color=color.blue, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base ? i_plot_baseline - i_plot_increment * 3 : na, title="base", style=plot.style_linebr, color=color.fuchsia, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rocLongEntry ? i_plot_baseline - i_plot_increment * 4 : na, title="rocLongEntry", style=plot.style_linebr, color=color.green, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_gaussianGreen ? i_plot_baseline - i_plot_increment * 5 : na, title="gaussianGreen", style=plot.style_linebr, color=color.lime, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_macd_crossOver ? i_plot_baseline - i_plot_increment * 6 : na, title="macd_crossOver", style=plot.style_linebr, color=color.maroon, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiSlowingBullishCond ? i_plot_baseline - i_plot_increment * 7 : na, title="rsiSlowingBullishCond", style=plot.style_linebr, color=color.navy, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiDelayedBullishCond ? i_plot_baseline - i_plot_increment * 8 : na, title="rsiDelayedBullishCond", style=plot.style_linebr, color=color.orange, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiRegularBullishCond ? i_plot_baseline - i_plot_increment * 9 : na, title="rsiRegularBullishCond", style=plot.style_linebr, color=color.purple, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiHiddenBullishCond ? i_plot_baseline - i_plot_increment * 10 : na, title="rsiHiddenBullishCond", style=plot.style_linebr, color=color.red, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiRealTimeBullishCond ? i_plot_baseline - i_plot_increment * 11 : na, title="rsiRealTimeBullishCond", style=plot.style_linebr, color=color.teal, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiConfirmedBullishCondition ? i_plot_baseline - i_plot_increment * 12 : na, title="rsiConfirmedBullishCondition", style=plot.style_linebr, color=color.yellow, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_realTime_slowing_confirmedCond ? i_plot_baseline - i_plot_increment * 13 : na, title="realTime_slowing_confirmedCond", style=plot.style_linebr, color=color.silver, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_stochdivergence ? i_plot_baseline - i_plot_increment * 14 : na, title="stochdivergence", style=plot.style_linebr, color=color.gray, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_stochbullish_rocM3bullish_not_macd_flipped_bearish ? i_plot_baseline - i_plot_increment * 15 : na, title="stochbullish_rocM3bullish_not_macd_flipped_bearish", style=plot.style_linebr, color=color.olive, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_stochbullish_macd_flipped_bullish_rocM3_flipped_bullish ? i_plot_baseline - i_plot_increment * 16 : na, title="stochbullish_macd_flipped_bullish_rocM3_flipped_bullish", style=plot.style_linebr, color=color.aqua, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_not_macd_is_decreasing ? i_plot_baseline - i_plot_increment * 17 : na, title="base_not_macd_is_decreasing", style=plot.style_linebr, color=color.blue, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_isMacdHistRising ? i_plot_baseline - i_plot_increment * 18 : na, title="base_isMacdHistRising", style=plot.style_linebr, color=color.fuchsia, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_isM2SmoothedShortOffsetRising ? i_plot_baseline - i_plot_increment * 19 : na, title="base_isM2SmoothedShortOffsetRising", style=plot.style_linebr, color=color.green, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_macd_slope_above_threshold ? i_plot_baseline - i_plot_increment * 20 : na, title="base_macd_slope_above_threshold", style=plot.style_linebr, color=color.lime, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_not_isM2SmoothedLongOffsetFalling ? i_plot_baseline - i_plot_increment * 21 : na, title="base_not_isM2SmoothedLongOffsetFalling", style=plot.style_linebr, color=color.maroon, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_not_rsi_high_range_cond ? i_plot_baseline - i_plot_increment * 22 : na, title="base_not_rsi_high_range_cond", style=plot.style_linebr, color=color.navy, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_rsid_osc_above_50 ? i_plot_baseline - i_plot_increment * 23 : na, title="base_rsid_osc_above_50", style=plot.style_linebr, color=color.orange, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_stoch_high_range_cond ? i_plot_baseline - i_plot_increment * 24 : na, title="base_stoch_high_range_cond", style=plot.style_linebr, color=color.purple, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_stoch_low_range_cond ? i_plot_baseline - i_plot_increment * 25 : na, title="base_stoch_low_range_cond", style=plot.style_linebr, color=color.red, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_isM2MacdLongCrossBullish ? i_plot_baseline - i_plot_increment * 26 : na, title="isM2MacdLongCrossBullish", style=plot.style_linebr, color=color.teal, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_isM2MacdShortCrossBullish ? i_plot_baseline - i_plot_increment * 27 : na, title="isM2MacdShortCrossBullish", style=plot.style_linebr, color=color.yellow, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_low_rsid ? i_plot_baseline - i_plot_increment * 28 : na, title="low_rsid", style=plot.style_linebr, color=color.silver, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_rsiHiddenBearishCondition ? i_plot_baseline - i_plot_increment * 29 : na, title="rsiHiddenBearishCondition", style=plot.style_linebr, color=color.gray, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_macd_crossUnderPrediction ? i_plot_baseline - i_plot_increment * 30 : na, title="macd_crossUnderPrediction", style=plot.style_linebr, color=color.olive, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_vwap_bullish_diff_short ? i_plot_baseline - i_plot_increment * 31 : na, title="vwap_bullish_diff_short", style=plot.style_linebr, color=color.aqua, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_vwap_bullish_all_rising ? i_plot_baseline - i_plot_increment * 32 : na, title="vwap_bullish_all_rising", style=plot.style_linebr, color=color.blue, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_realized_price_bull_cond ? i_plot_baseline - i_plot_increment * 33 : na, title="realized_price_bull_cond", style=plot.style_linebr, color=color.fuchsia, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_filtered_realized_price_bull_cond ? i_plot_baseline - i_plot_increment * 34 : na, title="filtered_realized_price_bull_cond", style=plot.style_linebr, color=color.green, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_realized_price_bull_div ? i_plot_baseline - i_plot_increment * 35 : na, title="realized_price_bull_div", style=plot.style_linebr, color=color.lime, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_realized_price_bull_div_not_isRisingTinyShort ? i_plot_baseline - i_plot_increment * 36 : na, title="realized_price_bull_div_not_isRisingTinyShort", style=plot.style_linebr, color=color.maroon, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_realized_price_crossOverUpper ? i_plot_baseline - i_plot_increment * 37 : na, title="realized_price_crossOverUpper", style=plot.style_linebr, color=color.navy, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_isRising_smoothedM3_no_offset ? i_plot_baseline - i_plot_increment * 38 : na, title="isRising_smoothedM3_no_offset", style=plot.style_linebr, color=color.orange, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_base_not_isM3GlobalSmoothedFalling ? i_plot_baseline - i_plot_increment * 39 : na, title="base_not_isM3GlobalSmoothedFalling", style=plot.style_linebr, color=color.purple, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(longEntryResults.longCondition_test ? i_plot_baseline - i_plot_increment * 40 : na, title="test", style=plot.style_linebr, color=color.red, linewidth=i_plot_line_width, display=display.all-display.status_line)
plot(-42 * i_plot_increment,color=color.black, display=display.none)
