CE - 42MACRO Equity Factor Table 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Celestial-Eye

//@version=5
indicator("🌌 CE - 42MACRO Equity Factor Table 🌌", "🌌 CE - EFT 🌌")

showCorrTab = input.bool(true,  "Show Correlation Table",   tooltip = "Plots the Correlation table",                        group = "🌌 Table Settings Correlation 🌌")
l           = input.int (14,    "Correlation Length",       tooltip = "Defines the time horizon for the Correlation Table", group = "🌌 Table Settings Correlation 🌌")

showPerfTab = input.bool(true,  "Show Performance Table",   tooltip = "Plots the Performance table",                        group = "🌌 Table Settings Performance 🌌")
rocPeriod   = input.int (14,    "RoC Period", minval=1,     tooltip = "Defines the time horizon for the Equity Table",      group = "🌌 Table Settings Performance 🌌")
useSharpe   = input.bool(false, "Use Sharpe instead of Rate of Change",                                                     group = "🌌 Table Settings Performance 🌌")

showImplied       = input.bool(false, "Show Implied Correlation?",                  tooltip = "Shows Implied Correlation on Chart, disable all other Visuals for best Experience",                                  group = "Implied Correlation - ONLY ENABLE A SINGLE IMPLIED CORRELATION OPTION")
showImpliedNorm   = input.bool(false, "Show Normalized Implied Correlation?",       tooltip = "Better for Crypto... As Crypto Moves faster",                                                                        group = "Implied Correlation - ONLY ENABLE A SINGLE IMPLIED CORRELATION OPTION")
norm_periodImpl   = input.int (50,    "Normalization lookback",     minval=1,       tooltip = "Defines the time horizon for the Normalization - 40 to 70 is a good start",                                          group = "Implied Correlation - ONLY ENABLE A SINGLE IMPLIED CORRELATION OPTION")
showImpliedNorm2  = input.bool(false, "Show double Normalized Implied Correlation?",tooltip = "Even better for Crypto... As Crypto Moves faster",                                                                   group = "Implied Correlation - ONLY ENABLE A SINGLE IMPLIED CORRELATION OPTION")
norm_periodImpl2  = input.int (40,    "Second Normalization lookback",   minval=1,  tooltip = "Defines the time horizon for the second Normalization - usually 10 - 20 less than first Normalization is best",      group = "Implied Correlation - ONLY ENABLE A SINGLE IMPLIED CORRELATION OPTION")

useMA             = input.bool(true,  "Overlay HMA for slightly earlier signals?",                                                                                                          group = "HMA for Implied Correlation")
MALen             = input.int (3,     "Lenght of HMA",                                                                                                                                      group = "HMA for Implied Correlation")
HMASigCol         = input.bool(false, "Background Coloring for HMA Signals",        tooltip = "Uses HMA to give signals, might be earlier but contain some false positives",                group = "HMA for Implied Correlation")

implBarCol        = input.bool(false, "Barcoloring for Impl. Correlation?",         tooltip = "Barcoloring for chosen Implied Correlation",                                                 group = "Visuals")
reg               = input.bool(false, "Show approximate Macroeconomic GRID Regimes",                                                                                                        group = "Visuals")
col               = input.bool(false, "Show Risk On - Risk Off periods",            tooltip = "Works better with higher timeframes/RoC Periods; Macro data takes a while to be realized",   group = "Visuals")

//request securities
VO   = request.security("VO",   "D", close, barmerge.gaps_off)
SPHD = request.security("SPHD", "D", close, barmerge.gaps_off)
EEM  = request.security("EEM",  "D", close, barmerge.gaps_off)
DXJ  = request.security("DXJ",  "D", close, barmerge.gaps_off)
QQQ  = request.security("QQQ",  "D", close, barmerge.gaps_off)
EWZ  = request.security("EWZ",  "D", close, barmerge.gaps_off)
EWU  = request.security("EWU",  "D", close, barmerge.gaps_off)
IWF  = request.security("IWF",  "D", close, barmerge.gaps_off)
SPY  = request.security("SPY",  "D", close, barmerge.gaps_off)
INDA = request.security("INDA", "D", close, barmerge.gaps_off)
FXI  = request.security("FXI",  "D", close, barmerge.gaps_off)
SPLV = request.security("SPLV", "D", close, barmerge.gaps_off)
ACWX = request.security("ACWX", "D", close, barmerge.gaps_off)
EZU  = request.security("EZU",  "D", close, barmerge.gaps_off)
QUAL = request.security("QUAL", "D", close, barmerge.gaps_off)
SPHB = request.security("SPHB", "D", close, barmerge.gaps_off)
MTUM = request.security("MTUM", "D", close, barmerge.gaps_off)
OEF  = request.security("OEF",  "D", close, barmerge.gaps_off)
IWM  = request.security("IWM",  "D", close, barmerge.gaps_off)



//calculate the average RoC
avgROC = (ta.roc(VO,  rocPeriod) +
         ta.roc(SPHD, rocPeriod) +
         ta.roc(EEM,  rocPeriod) +
         ta.roc(DXJ,  rocPeriod) +
         ta.roc(QQQ,  rocPeriod) +
         ta.roc(EWZ,  rocPeriod) +
         ta.roc(EWU,  rocPeriod) +
         ta.roc(IWF,  rocPeriod) +
         ta.roc(SPY,  rocPeriod) +
         ta.roc(INDA, rocPeriod) +
         ta.roc(FXI,  rocPeriod) +
         ta.roc(ACWX, rocPeriod) +
         ta.roc(EZU,  rocPeriod) +
         ta.roc(QUAL, rocPeriod) +
         ta.roc(SPHB, rocPeriod) +
         ta.roc(SPLV, rocPeriod) +
         ta.roc(OEF,  rocPeriod) +
         ta.roc(IWM,  rocPeriod) +
         ta.roc(MTUM, rocPeriod)) / 19

//function to calculate Sharpe Ratio
f_sharpe(src, lookback) =>
    float daily_return = src / src[1] - 1
    returns_array = array.new_float(0)
    for i = 0 to lookback
        array.push(returns_array, daily_return[i])
    
    standard_deviation = array.stdev(returns_array)
    mean = array.avg(returns_array)
    
    math.round(mean / standard_deviation * math.sqrt(lookback), 2)


var float rocVO   = na
var float rocSPHD = na
var float rocEEM  = na
var float rocDXJ  = na 
var float rocQQQ  = na 
var float rocEWZ  = na 
var float rocEWU  = na 
var float rocIWF  = na 
var float rocSPY  = na
var float rocINDA = na
var float rocFXI  = na 
var float rocSPLV = na
var float rocACWX = na
var float rocEZU  = na
var float rocQUAL = na
var float rocSPHB = na
var float rocMTUM = na
var float rocIWM  = na
var float rocOEF  = na



if useSharpe == false
    // Calculate the relative RoC for each asset - Standard
    rocVO   := ta.roc(VO,   rocPeriod) - avgROC
    rocSPHD := ta.roc(SPHD, rocPeriod) - avgROC
    rocEEM  := ta.roc(EEM,  rocPeriod) - avgROC
    rocDXJ  := ta.roc(DXJ,  rocPeriod) - avgROC
    rocQQQ  := ta.roc(QQQ,  rocPeriod) - avgROC
    rocEWZ  := ta.roc(EWZ,  rocPeriod) - avgROC
    rocEWU  := ta.roc(EWU,  rocPeriod) - avgROC
    rocIWF  := ta.roc(IWF,  rocPeriod) - avgROC
    rocSPY  := ta.roc(SPY,  rocPeriod) - avgROC
    rocINDA := ta.roc(INDA, rocPeriod) - avgROC
    rocFXI  := ta.roc(FXI,  rocPeriod) - avgROC
    rocSPLV := ta.roc(SPLV, rocPeriod) - avgROC
    rocACWX := ta.roc(ACWX, rocPeriod) - avgROC
    rocEZU  := ta.roc(EZU,  rocPeriod) - avgROC
    rocQUAL := ta.roc(QUAL, rocPeriod) - avgROC
    rocSPHB := ta.roc(SPHB, rocPeriod) - avgROC
    rocMTUM := ta.roc(MTUM, rocPeriod) - avgROC
    rocIWM  := ta.roc(IWM,  rocPeriod) - avgROC
    rocOEF  := ta.roc(OEF,  rocPeriod) - avgROC
    
else if useSharpe == true
    // Calculate the Sharpe ratio for each asset - Optional
    rocVO   := f_sharpe(VO,   rocPeriod)
    rocSPHD := f_sharpe(SPHD, rocPeriod)
    rocEEM  := f_sharpe(EEM,  rocPeriod)
    rocDXJ  := f_sharpe(DXJ,  rocPeriod)
    rocQQQ  := f_sharpe(QQQ,  rocPeriod)
    rocEWZ  := f_sharpe(EWZ,  rocPeriod)
    rocEWU  := f_sharpe(EWU,  rocPeriod)
    rocIWF  := f_sharpe(IWF,  rocPeriod)
    rocSPY  := f_sharpe(SPY,  rocPeriod)
    rocINDA := f_sharpe(INDA, rocPeriod)
    rocFXI  := f_sharpe(FXI,  rocPeriod)
    rocSPLV := f_sharpe(SPLV, rocPeriod)
    rocACWX := f_sharpe(ACWX, rocPeriod)
    rocEZU  := f_sharpe(EZU,  rocPeriod)
    rocQUAL := f_sharpe(QUAL, rocPeriod)
    rocSPHB := f_sharpe(SPHB, rocPeriod)
    rocMTUM := f_sharpe(MTUM, rocPeriod)
    rocIWM  := f_sharpe(IWM,  rocPeriod)
    rocOEF  := f_sharpe(OEF,  rocPeriod)

//calculate the correlation for each asset
correlation_VO   = ta.correlation(close, VO,   l)
correlation_SPHD = ta.correlation(close, SPHD, l)
correlation_EEM  = ta.correlation(close, EEM,  l)
correlation_DXJ  = ta.correlation(close, DXJ,  l)
correlation_QQQ  = ta.correlation(close, QQQ,  l)
correlation_EWZ  = ta.correlation(close, EWZ,  l)
correlation_EWU  = ta.correlation(close, EWU,  l)
correlation_IWF  = ta.correlation(close, IWF,  l)
correlation_SPY  = ta.correlation(close, SPY,  l)
correlation_INDA = ta.correlation(close, INDA, l)
correlation_FXI  = ta.correlation(close, FXI,  l)
correlation_SPLV = ta.correlation(close, SPLV, l)
correlation_ACWX = ta.correlation(close, ACWX, l)
correlation_EZU  = ta.correlation(close, EZU,  l)
correlation_QUAL = ta.correlation(close, QUAL, l)
correlation_SPHB = ta.correlation(close, SPHB, l)
correlation_MTUM = ta.correlation(close, MTUM, l)
correlation_IWM  = ta.correlation(close, IWM,  l)
correlation_OEF  = ta.correlation(close, OEF,  l)

//Calculate Trend Value for each Asset with Normalized KAMA Oscillator by IKKE OMAR
// -> https://www.tradingview.com/script/OwtiIzT3-Normalized-KAMA-Oscillator-Ikke-Omar/
// For best performance use this Indicator on the underlying Assets and adjust the Normalization lookback to the moves you want to capture
kama(asset) =>
    // Define input parameters
    fast_period = input.int(title='Fast Period',             defval=7,  minval=1, group = "Norm KAMA", tooltip = "Normalized KAMA Oscillator by IkkeOmar")
    slow_period = input.int(title='Slow Period',             defval=19, minval=1, group = "Norm KAMA")
    er_period   = input.int(title='Efficiency Ratio Period', defval=8,  minval=1, group = "Norm KAMA")
    norm_period = input.int(title='Normalization lookback',  defval=10, minval=1, group = "Norm KAMA", tooltip = "Defines the time horizon for the Trend calculation of the ETF's - For longer term Trends over weeks or months a length of 50 is usually pretty accurate")

    // Calculate the efficiency ratio
    change     = math.abs(asset - asset[er_period])
    volatility = math.sum(math.abs(asset - asset[1]), er_period)
    er         = change / volatility

    // Calculate the smoothing constant
    sc = er * (2 / (fast_period + 1) - 2 / (slow_period + 1)) + 2 / (slow_period + 1)

    // Calculate the KAMA
    kama = ta.ema(asset, fast_period) + sc * (asset - ta.ema(asset, fast_period))

    // Normalize the Oscillator
    lowest  = ta.lowest (kama, norm_period)
    highest = ta.highest(kama, norm_period)
    normalized = (kama - lowest) / (highest - lowest) - 0.5
    normalized

//Calculate trend for assets 
kamaVO   = kama(VO)   > 0? 1 : -1 
kamaSPHD = kama(SPHD) > 0? 1 : -1 
kamaEEM  = kama(EEM)  > 0? 1 : -1 
kamaDXJ  = kama(DXJ)  > 0? 1 : -1 
kamaQQQ  = kama(QQQ)  > 0? 1 : -1 
kamaEWZ  = kama(EWZ)  > 0? 1 : -1 
kamaEWU  = kama(EWU)  > 0? 1 : -1 
kamaIWF  = kama(IWF)  > 0? 1 : -1 
kamaSPY  = kama(SPY)  > 0? 1 : -1 
kamaINDA = kama(INDA) > 0? 1 : -1 
kamaFXI  = kama(FXI)  > 0? 1 : -1 
kamaSPLV = kama(SPLV) > 0? 1 : -1 
kamaACWX = kama(ACWX) > 0? 1 : -1 
kamaEZU  = kama(EZU)  > 0? 1 : -1 
kamaQUAL = kama(QUAL) > 0? 1 : -1 
kamaSPHB = kama(SPHB) > 0? 1 : -1 
kamaMTUM = kama(MTUM) > 0? 1 : -1 
kamaIWM  = kama(IWM)  > 0? 1 : -1 
kamaOEF  = kama(OEF)  > 0? 1 : -1 


//Calculate Average Implied Correlation 
ImplCorrAvg = math.avg(
     math.round(correlation_VO*      kamaVO,   2), 
     math.round(correlation_SPHD*    kamaSPHD, 2), 
     math.round(correlation_EEM*     kamaEEM,  2), 
     math.round(correlation_DXJ*     kamaDXJ,  2), 
     math.round(correlation_QQQ*     kamaQQQ,  2), 
     math.round(correlation_EWZ*     kamaEWZ,  2), 
     math.round(correlation_EWU*     kamaEWU,  2), 
     math.round(correlation_IWF*     kamaIWF,  2), 
     math.round(correlation_SPY*     kamaSPY,  2),  
     math.round(correlation_INDA*    kamaINDA, 2), 
     math.round(correlation_FXI*     kamaFXI,  2), 
     math.round(correlation_SPLV*    kamaSPLV, 2), 
     math.round(correlation_ACWX*    kamaACWX, 2), 
     math.round(correlation_EZU*     kamaEZU,  2), 
     math.round(correlation_QUAL*    kamaQUAL, 2), 
     math.round(correlation_SPHB*    kamaSPHB, 2),
     math.round(correlation_IWM*     kamaIWM,  2),
     math.round(correlation_OEF*     kamaOEF,  2),
     math.round(correlation_MTUM*    kamaMTUM, 2)) 


// Display correlation values
var string G3 = "🌌 Table Settings Correlation 🌌"

string table0_y_pos = input.string(defval = "top",    title = "Table Position", options = ["top", "middle", "bottom"],                                          group = G3, inline = "1")
string table0_x_pos = input.string(defval = "right",  title = "",               options = ["left", "center", "right"],                                          group = G3, inline = "1")
string i_text_size  = input.string(defval = size.tiny,title='Text Size:',       options=[size.tiny, size.small, size.normal, size.large, size.huge, size.auto], group = G3              )

var table table0 = table.new(
     table0_y_pos + "_" + table0_x_pos, 
     columns = 20, rows = 6, frame_color = color.white,
     frame_width = 1,
     border_color = color.white, 
     border_width = 1)

if showCorrTab
    table.merge_cells(table0, 0, 0, 19, 0)
    table.merge_cells(table0, 0, 4, 19, 4)

if showCorrTab and barstate.islast
    table.cell(table0, 0, 0, "🌌 CE - EQUITY FACTOR CORRELATION "+str.tostring(l)+"D 🌌", text_size = i_text_size, text_color = color.purple)
    table.cell(table0, 0, 1, "Symbol:",                                               text_size = i_text_size, text_color = color.white, bgcolor = color.black)
    table.cell(table0, 0, 2, "Correlation:",                                          text_size = i_text_size, text_color = color.white, bgcolor = color.black)
    table.cell(table0, 0, 3, "Trend:",                                                text_size = i_text_size, text_color = color.white, bgcolor = color.black)
    table.cell(table0, 0, 4, "Implied Trend to Chart "+str.tostring(l)+"D :",         text_size = i_text_size, text_color = color.white, bgcolor = color.black)
    table.cell(table0, 0, 5, "Avg: " + str.tostring(math.round(ImplCorrAvg,2)),       text_size = i_text_size, text_color = math.round(ImplCorrAvg,2) > 0 ?color.green:color.red)

    table.cell(table0, 1, 1, "VO", text_size = i_text_size, text_color = color.teal)
    table.cell(table0, 1, 2, str.tostring(math.round(correlation_VO, 2)),             text_size = i_text_size, text_color = correlation_VO      > 0 ? color.green : color.red)
    table.cell(table0, 1, 3, str.tostring(kamaVO),                                    text_size = i_text_size, text_color = kamaVO              > 0 ? color.green : color.red)
    table.cell(table0, 1, 5, str.tostring(math.round(correlation_VO*kamaVO, 2)),      text_size = i_text_size, text_color = math.round(correlation_VO*kamaVO, 2) > 0 ? color.green : color.red)

    table.cell(table0, 2, 1, "SPHD", text_size = i_text_size, text_color = color.aqua)
    table.cell(table0, 2, 2, str.tostring(math.round(correlation_SPHD, 2)),           text_size = i_text_size, text_color = correlation_SPHD    > 0 ? color.green : color.red)
    table.cell(table0, 2, 3, str.tostring(kamaSPHD),                                  text_size = i_text_size, text_color = kamaSPHD            > 0 ? color.green : color.red)
    table.cell(table0, 2, 5, str.tostring(math.round(correlation_SPHD*kamaSPHD, 2)),  text_size = i_text_size, text_color = math.round(correlation_SPHD*kamaSPHD, 2) > 0 ? color.green : color.red)

    table.cell(table0, 3, 1, "EEM", text_size = i_text_size, text_color = color.gray)
    table.cell(table0, 3, 2, str.tostring(math.round(correlation_EEM, 2)),            text_size = i_text_size, text_color = correlation_EEM     > 0 ? color.green : color.red)
    table.cell(table0, 3, 3, str.tostring(kamaEEM),                                   text_size = i_text_size, text_color = kamaEEM             > 0 ? color.green : color.red)
    table.cell(table0, 3, 5, str.tostring(math.round(correlation_EEM*kamaEEM, 2)),    text_size = i_text_size, text_color = math.round(correlation_EEM*kamaEEM, 2) > 0 ? color.green : color.red)

    table.cell(table0, 4, 1, "QUAL", text_size = i_text_size, text_color = color.maroon)
    table.cell(table0, 4, 2, str.tostring(math.round(correlation_QUAL, 2)),           text_size = i_text_size, text_color = correlation_QUAL    > 0 ? color.green : color.red)
    table.cell(table0, 4, 3, str.tostring(kamaQUAL),                                  text_size = i_text_size, text_color = kamaQUAL            > 0 ? color.green : color.red)
    table.cell(table0, 4, 5, str.tostring(math.round(correlation_QUAL*kamaQUAL, 2)),  text_size = i_text_size, text_color = math.round(correlation_QUAL*kamaQUAL, 2) > 0 ? color.green : color.red)

    table.cell(table0, 5, 1, "QQQ", text_size = i_text_size, text_color = color.orange)
    table.cell(table0, 5, 2, str.tostring(math.round(correlation_QQQ, 2)),            text_size = i_text_size, text_color = correlation_QQQ     > 0 ? color.green : color.red)
    table.cell(table0, 5, 3, str.tostring(kamaQQQ),                                   text_size = i_text_size, text_color = kamaQQQ             > 0 ? color.green : color.red)
    table.cell(table0, 5, 5, str.tostring(math.round(correlation_QQQ*kamaQQQ, 2)),    text_size = i_text_size, text_color = math.round(correlation_QQQ*kamaQQQ, 2) > 0 ? color.green : color.red)

    table.cell(table0, 6, 1, "EWZ", text_size = i_text_size, text_color = color.rgb(239, 136, 227))
    table.cell(table0, 6, 2, str.tostring(math.round(correlation_EWZ, 2)),            text_size = i_text_size, text_color = correlation_EWZ     > 0 ? color.green : color.red)
    table.cell(table0, 6, 3, str.tostring(kamaEWZ),                                   text_size = i_text_size, text_color = kamaEWZ             > 0 ? color.green : color.red)
    table.cell(table0, 6, 5, str.tostring(math.round(correlation_EWZ*kamaEWZ, 2)),    text_size = i_text_size, text_color = math.round(correlation_EWZ*kamaEWZ, 2) > 0 ? color.green : color.red)

    table.cell(table0, 7, 1, "EWU", text_size = i_text_size, text_color = color.yellow)
    table.cell(table0, 7, 2, str.tostring(math.round(correlation_EWU, 2)),            text_size = i_text_size, text_color = correlation_EWU     > 0 ? color.green : color.red)
    table.cell(table0, 7, 3, str.tostring(kamaEWU),                                   text_size = i_text_size, text_color = kamaEWU             > 0 ? color.green : color.red)
    table.cell(table0, 7, 5, str.tostring(math.round(correlation_EWU*kamaEWU, 2)),    text_size = i_text_size, text_color = math.round(correlation_EWU*kamaEWU, 2) > 0 ? color.green : color.red)

    table.cell(table0, 8, 1, "IWF", text_size = i_text_size, text_color = color.yellow)
    table.cell(table0, 8, 2, str.tostring(math.round(correlation_IWF, 2)),            text_size = i_text_size, text_color = correlation_IWF     > 0 ? color.green : color.red)
    table.cell(table0, 8, 3, str.tostring(kamaIWF),                                   text_size = i_text_size, text_color = kamaIWF             > 0 ? color.green : color.red)
    table.cell(table0, 8, 5, str.tostring(math.round(correlation_IWF*kamaIWF, 2)),    text_size = i_text_size, text_color = math.round(correlation_IWF*kamaIWF, 2) > 0 ? color.green : color.red)

    table.cell(table0, 9, 1, "SPY", text_size = i_text_size, text_color = color.fuchsia)
    table.cell(table0, 9, 2, str.tostring(math.round(correlation_SPY, 2)),            text_size = i_text_size, text_color = correlation_SPY     > 0 ? color.green : color.red)
    table.cell(table0, 9, 3, str.tostring(kamaSPY),                                   text_size = i_text_size, text_color = kamaSPY             > 0 ? color.green : color.red)
    table.cell(table0, 9, 5, str.tostring(math.round(correlation_SPY*kamaSPY, 2)),    text_size = i_text_size, text_color = math.round(correlation_SPY*kamaSPY, 2) > 0 ? color.green : color.red)

    table.cell(table0, 10, 1, "DXJ", text_size = i_text_size, text_color = color.purple)
    table.cell(table0, 10, 2, str.tostring(math.round(correlation_DXJ, 2)),           text_size = i_text_size, text_color = correlation_DXJ     > 0 ? color.green : color.red)
    table.cell(table0, 10, 3, str.tostring(kamaDXJ),                                  text_size = i_text_size, text_color = kamaDXJ             > 0 ? color.green : color.red)
    table.cell(table0, 10, 5, str.tostring(math.round(correlation_DXJ*kamaDXJ, 2)),   text_size = i_text_size, text_color = math.round(correlation_DXJ*kamaDXJ, 2) > 0 ? color.green : color.red)

    table.cell(table0, 11, 1, "INDA", text_size = i_text_size, text_color = color.blue)
    table.cell(table0, 11, 2, str.tostring(math.round(correlation_INDA, 2)),          text_size = i_text_size, text_color = correlation_INDA    > 0 ? color.green : color.red)
    table.cell(table0, 11, 3, str.tostring(kamaINDA),                                 text_size = i_text_size, text_color = kamaINDA            > 0 ? color.green : color.red)
    table.cell(table0, 11, 5, str.tostring(math.round(correlation_INDA*kamaINDA, 2)), text_size = i_text_size, text_color = math.round(correlation_INDA*kamaINDA, 2) > 0 ? color.green : color.red)

    table.cell(table0, 12, 1, "FXI", text_size = i_text_size, text_color = color.red)
    table.cell(table0, 12, 2, str.tostring(math.round(correlation_FXI, 2)),           text_size = i_text_size, text_color = correlation_FXI     > 0 ? color.green : color.red)
    table.cell(table0, 12, 3, str.tostring(kamaFXI),                                  text_size = i_text_size, text_color = kamaFXI             > 0 ? color.green : color.red)
    table.cell(table0, 12, 5, str.tostring(math.round(correlation_FXI*kamaFXI, 2)),   text_size = i_text_size, text_color = math.round(correlation_FXI*kamaFXI, 2) > 0 ? color.green : color.red)

    table.cell(table0, 13, 1, "SPLV", text_size = i_text_size, text_color = color.olive)
    table.cell(table0, 13, 2, str.tostring(math.round(correlation_SPLV, 2)),          text_size = i_text_size, text_color = correlation_SPLV    > 0 ? color.green : color.red)
    table.cell(table0, 13, 3, str.tostring(kamaSPLV),                                 text_size = i_text_size, text_color = kamaSPLV            > 0 ? color.green : color.red)
    table.cell(table0, 13, 5, str.tostring(math.round(correlation_SPLV*kamaSPLV, 2)), text_size = i_text_size, text_color = math.round(correlation_SPLV*kamaSPLV, 2) > 0 ? color.green : color.red)

    table.cell(table0, 14, 1, "EZU", text_size = i_text_size, text_color = color.lime)
    table.cell(table0, 14, 2, str.tostring(math.round(correlation_EZU, 2)),           text_size = i_text_size, text_color = correlation_EZU     > 0 ? color.green : color.red)
    table.cell(table0, 14, 3, str.tostring(kamaEZU),                                  text_size = i_text_size, text_color = kamaEZU             > 0 ? color.green : color.red)
    table.cell(table0, 14, 5, str.tostring(math.round(correlation_EZU*kamaEZU, 2)),   text_size = i_text_size, text_color = math.round(correlation_EZU*kamaEZU, 2) > 0 ? color.green : color.red)

    table.cell(table0, 15, 1, "ACWX", text_size = i_text_size, text_color = color.silver)
    table.cell(table0, 15, 2, str.tostring(math.round(correlation_ACWX, 2)),          text_size = i_text_size, text_color = correlation_ACWX    > 0 ? color.green : color.red)
    table.cell(table0, 15, 3, str.tostring(kamaACWX),                                 text_size = i_text_size, text_color = kamaACWX            > 0 ? color.green : color.red)
    table.cell(table0, 15, 5, str.tostring(math.round(correlation_ACWX*kamaACWX, 2)), text_size = i_text_size, text_color = math.round(correlation_ACWX*kamaACWX, 2) > 0 ? color.green : color.red)

    table.cell(table0, 16, 1, "SPHB", text_size = i_text_size, text_color = color.silver)
    table.cell(table0, 16, 2, str.tostring(math.round(correlation_SPHB, 2)),          text_size = i_text_size, text_color = correlation_SPHB    > 0 ? color.green : color.red)
    table.cell(table0, 16, 3, str.tostring(kamaSPHB),                                 text_size = i_text_size, text_color = kamaSPHB            > 0 ? color.green : color.red)
    table.cell(table0, 16, 5, str.tostring(math.round(correlation_SPHB*kamaSPHB, 2)), text_size = i_text_size, text_color = math.round(correlation_SPHB*kamaSPHB, 2) > 0 ? color.green : color.red)

    table.cell(table0, 17, 1, "MTUM", text_size = i_text_size, text_color = color.silver)
    table.cell(table0, 17, 2, str.tostring(math.round(correlation_MTUM, 2)),          text_size = i_text_size, text_color = correlation_MTUM    > 0 ? color.green : color.red)
    table.cell(table0, 17, 3, str.tostring(kamaMTUM),                                 text_size = i_text_size, text_color = kamaMTUM            > 0 ? color.green : color.red)
    table.cell(table0, 17, 5, str.tostring(math.round(correlation_MTUM*kamaMTUM, 2)), text_size = i_text_size, text_color = math.round(correlation_MTUM*kamaMTUM, 2) > 0 ? color.green : color.red)
    
    table.cell(table0, 18, 1, "IWM", text_size = i_text_size, text_color = color.silver)
    table.cell(table0, 18, 2, str.tostring(math.round(correlation_IWM, 2)),          text_size = i_text_size, text_color = correlation_IWM    > 0 ? color.green : color.red)
    table.cell(table0, 18, 3, str.tostring(kamaIWM),                                 text_size = i_text_size, text_color = kamaIWM            > 0 ? color.green : color.red)
    table.cell(table0, 18, 5, str.tostring(math.round(correlation_IWM*kamaIWM, 2)),  text_size = i_text_size, text_color = math.round(correlation_IWM*kamaIWM, 2) > 0 ? color.green : color.red)

    table.cell(table0, 19, 1, "OEF", text_size = i_text_size, text_color = color.silver)
    table.cell(table0, 19, 2, str.tostring(math.round(correlation_OEF, 2)),          text_size = i_text_size, text_color = correlation_OEF    > 0 ? color.green : color.red)
    table.cell(table0, 19, 3, str.tostring(kamaOEF),                                 text_size = i_text_size, text_color = kamaOEF            > 0 ? color.green : color.red)
    table.cell(table0, 19, 5, str.tostring(math.round(correlation_OEF*kamaOEF, 2)),  text_size = i_text_size, text_color = math.round(correlation_OEF*kamaOEF, 2) > 0 ? color.green : color.red)

// Implied Correlation Normalization
lowest  = ta.lowest (ImplCorrAvg, norm_periodImpl)
highest = ta.highest(ImplCorrAvg, norm_periodImpl)
ImplCorrAvgNorm = (ImplCorrAvg - lowest) / (highest - lowest) - 0.5

lowest2  = ta.lowest (ImplCorrAvgNorm, norm_periodImpl2)
highest2 = ta.highest(ImplCorrAvgNorm, norm_periodImpl2)
ImplCorrAvgNormDouble = (ImplCorrAvgNorm - lowest2) / (highest2 - lowest2) - 0.5

// Implied Correlation Visuals
plot(showImplied?       ImplCorrAvg:na,           "Implied Correlation Avg",                   ImplCorrAvg > 0.1            ?color.green : ImplCorrAvg           < -0.1 ? color.red : color.gray, style = plot.style_columns)
plot(showImpliedNorm?   ImplCorrAvgNorm:na,       "Implied Correlation Avg Normalized",        ImplCorrAvgNorm > 0.1        ?color.green : ImplCorrAvgNorm       < -0.1 ? color.red : color.gray, style = plot.style_columns)
plot(showImpliedNorm2?  ImplCorrAvgNormDouble:na, "Implied Correlation Avg double Normalized", ImplCorrAvgNormDouble > 0.1  ?color.green : ImplCorrAvgNormDouble < -0.1 ? color.red : color.gray, style = plot.style_columns)

hline(showImplied or showImpliedNorm or showImpliedNorm2? 0.1  : na, color = color.green, linewidth = 2)
hline(showImplied or showImpliedNorm or showImpliedNorm2? 0    : na)
hline(showImplied or showImpliedNorm or showImpliedNorm2? -0.1 : na, color = color.red  , linewidth = 2)

// Decide on the barcolor
barcolor(implBarCol and showImpliedNorm? ImplCorrAvgNorm       > 0.1  ?color.green : ImplCorrAvgNorm       < -0.1  ? color.red : color.gray : 
     implBarCol and showImpliedNorm2?    ImplCorrAvgNormDouble > 0.1  ?color.green : ImplCorrAvgNormDouble < -0.1  ? color.red : color.gray :
     implBarCol and not showImpliedNorm? ImplCorrAvg           > 0.1  ?color.green : ImplCorrAvg           < -0.1  ? color.red : color.gray : na)

// HMA
ImplValue = showImpliedNorm? ImplCorrAvgNorm : showImpliedNorm2? ImplCorrAvgNormDouble : showImplied? ImplCorrAvg: na
HMA       = ta.hma(ImplValue, MALen)
HMAL      = ta.crossover(HMA,0)
HMAS      = ta.crossunder(HMA,0)

plot(useMA? HMA : na, "HMA", color.purple, 2)
bgcolor(HMASigCol? color.new(HMAL? color.green: HMAS? color.red: na, 60): na)

// Calculate the different regime probabilities based on asset performance - Could certainly be enhanced and brought to higher sophistication... but works anyways... open to suggestions though
Goldilocks  = (rocVO>0?+1:0)   + (rocSPHD>0?+1:0) + (rocEEM>0?+1:0)  + (rocIWM>0?+1:0)  + (rocQQQ>0?+1:0)  + (rocEWZ<0?+1:0) + (rocEWU<0?+1:0)  + (rocIWF<0?+1:0)  + (rocSPY<0?+1:0)  + (rocDXJ<0?+1:0) 
Reflation   = (rocVO>0?+1:0)   + (rocQQQ>0?+1:0)  + (rocMTUM>0?+1:0) + (rocSPY>0?+1:0)  + (rocIWM>0?+1:0)  + (rocFXI<0?+1:0) + (rocEWZ<0?+1:0)  + (rocEWU<0?+1:0)  + (rocSPLV<0?+1:0) + (rocSPHD<0?+1:0)
Inflation   = (rocINDA>0?+1:0) + (rocQQQ>0?+1:0)  + (rocEWZ>0?+1:0)  + (rocSPHD>0?+1:0) + (rocMTUM>0?+1:0) + (rocEEM<0?+1:0) + (rocACWX<0?+1:0) + (rocFXI<0?+1:0)  + (rocEWU<0?+1:0)  + (rocEZU<0?+1:0)
Deflation   = (rocEWU>0?+1:0)  + (rocSPLV>0?+1:0) + (rocSPHD>0?+1:0) + (rocFXI>0?+1:0)  + (rocQUAL>0?+1:0) + (rocEWZ<0?+1:0) + (rocDXJ<0?+1:0)  + (rocSPHB<0?+1:0) + (rocEEM<0?+1:0)  + (rocOEF<0?+1:0)
Denumerator =  Goldilocks + Reflation + Inflation + Deflation
// Find the greatest value among the scenarios
maxValue = math.max(Goldilocks, Reflation, Inflation, Deflation)

// Determine the market scenario based on the greatest value
Risk = ""
if maxValue == Goldilocks or maxValue == Reflation
    Risk := "RISK ON"
else
    Risk := "RISK OFF"
RiskCol     = (Risk == "RISK ON"? color.green : color.red)
RiskBg      = (Risk == "RISK ON"? color.new(color.green, 40) : color.new(color.red, 40))

regime = ""
color regCol = na
if maxValue == Goldilocks
    regime := "Goldilocks"
    regCol := color.new(color.green, 50)
else if maxValue == Reflation
    regime := "Reflation"
    regCol := color.new(color.lime, 50)
else if maxValue == Inflation
    regime := "Inflation"
    regCol := color.new(color.red, 50)
else if maxValue == Deflation
    regime := "Deflation"    
    regCol := color.new(color.blue, 50)


plot   (col? Risk == "RISK ON"? 1 : -1 : na )
bgcolor(col? Risk == "RISK ON"? color.new(color.green, 60) : color.new(color.red, 60):na)
bgcolor(reg? regCol : na)






// Table

var string G2 = "🌌 Table Settings Performance 🌌"
string table_y_pos = input.string(defval = "bottom", title = "Table Position", options = ["top", "middle", "bottom"], group = G2, inline = "1")
string table_x_pos = input.string(defval = "right",  title = "",               options = ["left", "center", "right"], group = G2, inline = "1")

color positive_color_input = color(color.new(color.green, 0))
color negative_color_input = color(color.new(color.red, 0))

var table table = table.new(table_y_pos + "_" + table_x_pos, columns = 10, rows = 17, frame_color = color.white,
 frame_width = 1, border_color = color.white, border_width = 1)

if showPerfTab
    table.merge_cells(table, 0, 0,  7,  0)
    table.merge_cells(table, 0, 1,  1,  1)
    table.merge_cells(table, 2, 1,  3,  1)
    table.merge_cells(table, 4, 1,  5,  1)
    table.merge_cells(table, 6, 1,  7,  1)
    table.merge_cells(table, 0, 2,  7,  2)
    table.merge_cells(table, 0, 8,  7,  8)
    table.merge_cells(table, 0, 14, 7, 14)
    table.merge_cells(table, 0, 16, 7, 16)

 // Definitions
if showPerfTab and barstate.islast
    table.cell(table, 0, 0,  text = "🌌 CE - EQUITY FACTOR "+str.tostring(rocPeriod)+"D 🌌", text_size = i_text_size, text_color = color.purple)
    table.cell(table, 0, 2,  text = "Top 5 Equity Factors ",                                  text_size = i_text_size, text_color = color.green)
    table.cell(table, 0, 8,  text = "Bottom 5 Equity Factors ",                               text_size = i_text_size, text_color = color.red)

    table.cell(table, 0, 14, text = "Risk Period: ",                                          text_size = i_text_size, text_color = color.white)
    table.cell(table, 0, 16, text = Risk,                                                     text_size = i_text_size, text_color = color.white , bgcolor = RiskBg, text_font_family = font.family_monospace)
  
 
    table.cell(table, 0, 1,"GOLDILOCKS",                         text_size = i_text_size, text_color = color.green)                                             
    table.cell(table, 0, 3,"Mid Caps (VO)",                      text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 3,str.tostring(math.round(rocVO,2)),    text_size = i_text_size, text_color = rocVO   > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 4,"Dividend Compounders (SPHD)",        text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 4,str.tostring(math.round(rocSPHD,2)),  text_size = i_text_size, text_color = rocSPHD > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 5,"Emerging Markets (EEM)",             text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 5,str.tostring(math.round(rocEEM,2)),   text_size = i_text_size, text_color = rocEEM  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 6,"Small Caps (IWM)",                   text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 6,str.tostring(math.round(rocIWM,2)),   text_size = i_text_size, text_color = rocIWM  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 7,"Mega Cap Growth (QQQ)",              text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 7,str.tostring(math.round(rocQQQ,2)),   text_size = i_text_size, text_color = rocQQQ  > 0  ? positive_color_input : negative_color_input)

    table.cell(table, 0, 9, text = "Brazil (EWZ)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 9,str.tostring(math.round(rocEWZ,2)),   text_size = i_text_size, text_color = rocEWZ  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 10, text = "United Kingdom (EWU)",      text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 10,str.tostring(math.round(rocEWU,2)),  text_size = i_text_size, text_color = rocEWU  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 11, text = "Growth (IWF)",              text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 11,str.tostring(math.round(rocIWF,2)),  text_size = i_text_size, text_color = rocIWF  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 12, text = "United States (SPY)",       text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 12,str.tostring(math.round(rocSPY,2)),  text_size = i_text_size, text_color = rocSPY  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 13, text = "Japan (DXJ)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 13,str.tostring(math.round(rocDXJ,2)),  text_size = i_text_size, text_color = rocDXJ  > 0  ? positive_color_input : negative_color_input)
    table.cell(table, 0, 15, text = "Goldilocks Probability: ",  text_size = i_text_size, text_color = color.white)
    table.cell(table, 1, 15,str.tostring(math.round(Goldilocks/Denumerator*100, 2))+"% | "+str.tostring(Goldilocks)+ " / 10", text_size = i_text_size, text_color = RiskCol)

    table.cell(table, 2, 1,"REFLATION",                          text_size = i_text_size, text_color = color.lime)         
    table.cell(table, 2, 3,"Mid Caps (VO)",                      text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 3,str.tostring(math.round(rocVO,2)),    text_size = i_text_size, text_color = rocVO   > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 4,"Mega Cap Growth (QQQ)",              text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 4,str.tostring(math.round(rocQQQ,2)),   text_size = i_text_size, text_color = rocQQQ  > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 5,"Momentum (MTUM)",                    text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 5,str.tostring(math.round(rocMTUM,2)),  text_size = i_text_size, text_color = rocMTUM > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 6,"United States (SPY)",                text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 6,str.tostring(math.round(rocSPY,2)),   text_size = i_text_size, text_color = rocSPY  > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 7,"Small Caps (IWM)",                   text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 7,str.tostring(math.round(rocIWM,2)),   text_size = i_text_size, text_color = rocIWM  > 0 ? positive_color_input : negative_color_input)  
    
    table.cell(table, 2, 9, text = "China (FXI)",                text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 9,str.tostring(math.round(rocFXI,2)),   text_size = i_text_size, text_color = rocFXI  > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 10, text = "Brazil (EWZ)",              text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 10,str.tostring(math.round(rocEWZ,2)),  text_size = i_text_size, text_color = rocEWZ  > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 11, text = "United Kingdom (EWU)",      text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 11,str.tostring(math.round(rocEWU,2)),  text_size = i_text_size, text_color = rocEWU  > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 12, text = "Low Beta (SPLV)",           text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 12,str.tostring(math.round(rocSPLV,2)), text_size = i_text_size, text_color = rocSPLV > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 13, text = "Dividend Compounders (SPHD)",text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 13,str.tostring(math.round(rocSPHD,2)), text_size = i_text_size, text_color = rocSPHD > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 2, 15, text = "Reflation Probability: ",   text_size = i_text_size, text_color = color.white)
    table.cell(table, 3, 15,str.tostring(math.round(Reflation/Denumerator*100, 2))+"% | "+str.tostring(Reflation)+ " / 10", text_size = i_text_size, text_color = RiskCol)

    table.cell(table, 4, 1,"INFLATION",                          text_size = i_text_size, text_color = color.red)          
    table.cell(table, 4, 3,"India (INDA)",                       text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 3,str.tostring(math.round(rocINDA,2)),  text_size = i_text_size, text_color = rocINDA > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 4,"Mega Cap Growth (QQQ)",              text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 4,str.tostring(math.round(rocQQQ,2)),   text_size = i_text_size, text_color = rocQQQ > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 5,"Brazil (EWZ)",                       text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 5,str.tostring(math.round(rocEWZ,2)),   text_size = i_text_size, text_color = rocEWZ > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 6,"Dividend Compounders (SPHD)",        text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 6,str.tostring(math.round(rocSPHD,2)),  text_size = i_text_size, text_color = rocSPHD > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 7,"Momentum (MTUM)",                    text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 7,str.tostring(math.round(rocMTUM,2)),  text_size = i_text_size, text_color = rocMTUM > 0 ? positive_color_input : negative_color_input)  

    table.cell(table, 4, 9, text = "Emerging Markets (EEM)",     text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 9,str.tostring(math.round(rocEEM,2)),   text_size = i_text_size, text_color = rocEEM > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 10, text = "International ex-US (ACWX)",text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 10,str.tostring(math.round(rocACWX,2)), text_size = i_text_size, text_color = rocACWX > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 11, text = "China (FXI)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 11,str.tostring(math.round(rocFXI,2)),  text_size = i_text_size, text_color = rocFXI > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 4, 12, text = "United Kingdom (EWU)",      text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 12,str.tostring(math.round(rocEWU,2)),  text_size = i_text_size, text_color = rocEWU > 0 ? positive_color_input : negative_color_input)  
    table.cell(table, 4, 13, text = "Eurozone (EZU)",            text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 13,str.tostring(math.round(rocEZU,2)),  text_size = i_text_size, text_color = rocEZU > 0 ? positive_color_input : negative_color_input)  
    table.cell(table, 4, 15, text = "Inflation Probability: ",   text_size = i_text_size, text_color = color.white)
    table.cell(table, 5, 15,str.tostring(math.round(Inflation/Denumerator*100, 2))+"% | "+str.tostring(Inflation)+ " / 10", text_size = i_text_size, text_color = RiskCol)

    table.cell(table, 6, 1,"DEFLATION",                          text_size = i_text_size, text_color = color.blue)        
    table.cell(table, 6, 3,"United Kingdom (EWU)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 3,str.tostring(math.round(rocEWU,2)),   text_size = i_text_size, text_color = rocEWU > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 4,"Low Beta (SPLV)",                    text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 4,str.tostring(math.round(rocSPLV,2)),  text_size = i_text_size, text_color = rocSPLV > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 5,"Dividend Compounders (SPHD)",        text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 5,str.tostring(math.round(rocSPHD,2)),  text_size = i_text_size, text_color = rocSPHD > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 6,"China (FXI)",                        text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 6,str.tostring(math.round(rocFXI,2)),   text_size = i_text_size, text_color = rocFXI > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 7,"Quality (QUAL)",                     text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 7,str.tostring(math.round(rocQUAL,2)),  text_size = i_text_size, text_color = rocQUAL > 0 ? positive_color_input : negative_color_input)

    table.cell(table, 6, 9, text = "Brazil (EWZ)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 9,str.tostring(math.round(rocEWZ,2)),   text_size = i_text_size, text_color = rocEWZ > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 10, text = "Japan (DXJ)",               text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 10,str.tostring(math.round(rocDXJ,2)),  text_size = i_text_size, text_color = rocDXJ > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 11, text = "High Beta (SPHB)",          text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 11,str.tostring(math.round(rocSPHB,2)), text_size = i_text_size, text_color = rocSPHB > 0 ? positive_color_input : negative_color_input)
    table.cell(table, 6, 12, text = "Emerging Markets (EEM)",    text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 12,str.tostring(math.round(rocEEM,2)),  text_size = i_text_size, text_color = rocEEM > 0 ? positive_color_input : negative_color_input)  
    table.cell(table, 6, 13, text = "Size (OEF)",                text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 13,str.tostring(math.round(rocOEF,2)),  text_size = i_text_size, text_color = rocOEF > 0 ? positive_color_input : negative_color_input)  
    table.cell(table, 6, 15, text = "Deflation Probability: ",   text_size = i_text_size, text_color = color.white)
    table.cell(table, 7, 15,str.tostring(math.round(Deflation/Denumerator*100, 2))+"% | "+str.tostring(Deflation)+ " / 10", text_size = i_text_size, text_color = RiskCol)
  
