heres a MTF (Multi Time Frame) Squeeze indicator
Its a top study changes from yellow to red depending if its in a squeeze for that timeframe
#input price = CLOSE;
input length = 20;
input nK = 1.5;
input nBB = 2.0;
input alertLine = 1.0;
def SQ_month_sq;
def SQ_month_alert;
def SQ_month_no_alert;
def closemonth;
if GetAggregationPeriod() <= AggregationPeriod.MONTH {
closemonth = close(period=AggregationPeriod.MONTH);
SQ_month_sq = TTM_Squeeze(closemonth, length, nK, nBB, alertline).SqueezeAlert;
if SQ_month_sq == 0 {
SQ_month_alert = 1;
SQ_month_no_alert = Double.NaN;
} else {
SQ_month_alert = Double.NaN;
SQ_month_no_alert = 1;
}
} else {
closemonth = 0;
SQ_month_sq = 0;
SQ_month_alert = 0;
SQ_month_no_alert = 0;
}
AddLabel(SQ_month_alert, "M", COLOR.RED);
AddLabel(SQ_month_no_alert, "M", COLOR.GREEN);
def SQ_week;
def SQ_week_alert;
def SQ_week_no_alert;
def closeweek;
if GetAggregationPeriod() <= AggregationPeriod.WEEK {
closeweek = close(period=AggregationPeriod.WEEK);
SQ_week = TTM_Squeeze(closeweek, length, nK, nBB, alertline).SqueezeAlert;
if SQ_week == 0 {
SQ_week_alert = 1;
SQ_week_no_alert = Double.NaN;
} else {
SQ_week_alert = Double.NaN;
SQ_week_no_alert = 1;
}
} else {
closeweek = 0;
SQ_week = 0;
SQ_week_alert = 0;
SQ_week_no_alert = 0;
}
AddLabel(SQ_week_alert, "W", COLOR.RED);
AddLabel(SQ_week_no_alert, "W", COLOR.GREEN);
def SQ_4day;
def SQ_4day_alert;
def SQ_4day_no_alert;
def close4day;
if GetAggregationPeriod() <= AggregationPeriod.FOUR_DAYS {
close4day = close(period=AggregationPeriod.FOUR_DAYS);
SQ_4day = TTM_Squeeze(close4day, length, nK, nBB, alertline).SqueezeAlert;
if SQ_4day == 0 {
SQ_4day_alert = 1;
SQ_4day_no_alert = Double.NaN;
} else {
SQ_4day_alert = Double.NaN;
SQ_4day_no_alert = 1;
}
} else {
close4day = 0;
SQ_4day = 0;
SQ_4day_alert = 0;
SQ_4day_no_alert = 0;
}
AddLabel(SQ_4day_alert, "4D", COLOR.RED);
AddLabel(SQ_4day_no_alert, "4D", COLOR.GREEN);
def SQ_3day;
def SQ_3day_alert;
def SQ_3day_no_alert;
def close3day;
if GetAggregationPeriod() <= AggregationPeriod.THREE_DAYS {
close3day = close(period=AggregationPeriod.THREE_DAYS);
SQ_3day = TTM_Squeeze(close3day, length, nK, nBB, alertline).SqueezeAlert;
if SQ_3day == 0 {
SQ_3day_alert = 1;
SQ_3day_no_alert = Double.NaN;
} else {
SQ_3day_alert = Double.NaN;
SQ_3day_no_alert = 1;
}
} else {
close3day = 0;
SQ_3day = 0;
SQ_3day_alert = 0;
SQ_3day_no_alert = 0;
}
AddLabel(SQ_3day_alert, "3D", COLOR.RED);
AddLabel(SQ_3day_no_alert, "3D", COLOR.GREEN);
def SQ_2day;
def SQ_2day_alert;
def SQ_2day_no_alert;
def close2day;
if GetAggregationPeriod() <= AggregationPeriod.TWO_DAYS {
close2day = close(period=AggregationPeriod.TWO_DAYS);
SQ_2day = TTM_Squeeze(close2day, length, nK, nBB, alertline).SqueezeAlert;
if SQ_2day == 0 {
SQ_2day_alert = 1;
SQ_2day_no_alert = Double.NaN;
} else {
SQ_2day_alert = Double.NaN;
SQ_2day_no_alert = 1;
}
} else {
close2day = 0;
SQ_2day = 0;
SQ_2day_alert = 0;
SQ_2day_no_alert = 0;
}
AddLabel(SQ_2day_alert, "2D", COLOR.RED);
AddLabel(SQ_2day_no_alert, "2D", COLOR.GREEN);
def SQ_1day;
def SQ_1day_alert;
def SQ_1day_no_alert;
def close1day;
if GetAggregationPeriod() <= AggregationPeriod.DAY {
close1day = close(period=AggregationPeriod.DAY);
SQ_1day = TTM_Squeeze(close1day, length, nK, nBB, alertline).SqueezeAlert;
if SQ_1day == 0 {
SQ_1day_alert = 1;
SQ_1day_no_alert = Double.NaN;
} else {
SQ_1day_alert = Double.NaN;
SQ_1day_no_alert = 1;
}
} else {
close1day = 0;
SQ_1day = 0;
SQ_1day_alert = 0;
SQ_1day_no_alert = 0;
}
AddLabel(SQ_1day_alert, "1D", COLOR.RED);
AddLabel(SQ_1day_no_alert, "1D", COLOR.GREEN);
def SQ_4hour;
def SQ_4hour_alert;
def SQ_4hour_no_alert;
def close4hour;
if GetAggregationPeriod() <= AggregationPeriod.FOUR_HOURS {
close4hour = close(period=AggregationPeriod.FOUR_HOURS);
SQ_4hour = TTM_Squeeze(close4hour, length, nK, nBB, alertline).SqueezeAlert;
if SQ_4hour == 0 {
SQ_4hour_alert = 1;
SQ_4hour_no_alert = Double.NaN;
} else {
SQ_4hour_alert = Double.NaN;
SQ_4hour_no_alert = 1;
}
} else {
close4hour = 0;
SQ_4hour = 0;
SQ_4hour_alert = 0;
SQ_4hour_no_alert = 0;
}
AddLabel(SQ_4hour_alert, "4h", COLOR.RED);
AddLabel(SQ_4hour_no_alert, "4h", COLOR.GREEN);
def SQ_2hour;
def SQ_2hour_alert;
def SQ_2hour_no_alert;
def close2hour;
if GetAggregationPeriod() <= AggregationPeriod.TWO_HOURS {
close2hour = close(period=AggregationPeriod.TWO_HOURS);
SQ_2hour = TTM_Squeeze(close2hour, length, nK, nBB, alertline).SqueezeAlert;
if SQ_2hour == 0 {
SQ_2hour_alert = 1;
SQ_2hour_no_alert = Double.NaN;
} else {
SQ_2hour_alert = Double.NaN;
SQ_2hour_no_alert = 1;
}
} else {
close2hour = 0;
SQ_2hour = 0;
SQ_2hour_alert = 0;
SQ_2hour_no_alert = 0;
}
AddLabel(SQ_2hour_alert, "2h", COLOR.RED);
AddLabel(SQ_2hour_no_alert, "2h", COLOR.GREEN);
def SQ_1hour;
def SQ_1hour_alert;
def SQ_1hour_no_alert;
def close1hour;
if GetAggregationPeriod() <= AggregationPeriod.HOUR {
close1hour = close(period=AggregationPeriod.HOUR);
SQ_1hour = TTM_Squeeze(close1hour, length, nK, nBB, alertline).SqueezeAlert;
if SQ_1hour == 0 {
SQ_1hour_alert = 1;
SQ_1hour_no_alert = Double.NaN;
} else {
SQ_1hour_alert = Double.NaN;
SQ_1hour_no_alert = 1;
}
} else {
close1hour = 0;
SQ_1hour = 0;
SQ_1hour_alert = 0;
SQ_1hour_no_alert = 0;
}
AddLabel(SQ_1hour_alert, "1h", COLOR.RED);
AddLabel(SQ_1hour_no_alert, "1h", COLOR.GREEN);
def SQ_30min;
def SQ_30min_alert;
def SQ_30min_no_alert;
def close30min;
if GetAggregationPeriod() <= AggregationPeriod.THIRTY_MIN {
close30min = close(period=AggregationPeriod.THIRTY_MIN);
SQ_30min = TTM_Squeeze(close30min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_30min == 0 {
SQ_30min_alert = 1;
SQ_30min_no_alert = Double.NaN;
} else {
SQ_30min_alert = Double.NaN;
SQ_30min_no_alert = 1;
}
} else {
close30min = 0;
SQ_30min = 0;
SQ_30min_alert = 0;
SQ_30min_no_alert = 0;
}
AddLabel(SQ_30min_alert, "30m", COLOR.RED);
AddLabel(SQ_30min_no_alert, "30m", COLOR.GREEN);
def SQ_15min;
def SQ_15min_alert;
def SQ_15min_no_alert;
def close15min;
if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN {
close15min = close(period=AggregationPeriod.FIFTEEN_MIN);
SQ_15min = TTM_Squeeze(close15min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_15min == 0 {
SQ_15min_alert = 1;
SQ_15min_no_alert = Double.NaN;
} else {
SQ_15min_alert = Double.NaN;
SQ_15min_no_alert = 1;
}
} else {
close15min = 0;
SQ_15min = 0;
SQ_15min_alert = 0;
SQ_15min_no_alert = 0;
}
AddLabel(SQ_15min_alert, "15m", COLOR.RED);
AddLabel(SQ_15min_no_alert, "15m", COLOR.GREEN);
def SQ_10min;
def SQ_10min_alert;
def SQ_10min_no_alert;
def close10min;
if GetAggregationPeriod() <= AggregationPeriod.TEN_MIN {
close10min = close(period=AggregationPeriod.TEN_MIN);
SQ_10min = TTM_Squeeze(close10min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_10min == 0 {
SQ_10min_alert = 1;
SQ_10min_no_alert = Double.NaN;
} else {
SQ_10min_alert = Double.NaN;
SQ_10min_no_alert = 1;
}
} else {
close10min = 0;
SQ_10min = 0;
SQ_10min_alert = 0;
SQ_10min_no_alert = 0;
}
AddLabel(SQ_10min_alert, "10m", COLOR.RED);
AddLabel(SQ_10min_no_alert, "10m", COLOR.GREEN);
def SQ_5min;
def SQ_5min_alert;
def SQ_5min_no_alert;
def close5min;
if GetAggregationPeriod() <= AggregationPeriod.FIVE_MIN {
close5min = close(period=AggregationPeriod.FIVE_MIN);
SQ_5min = TTM_Squeeze(close5min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_5min == 0 {
SQ_5min_alert = 1;
SQ_5min_no_alert = Double.NaN;
} else {
SQ_5min_alert = Double.NaN;
SQ_5min_no_alert = 1;
}
} else {
close5min = 0;
SQ_5min = 0;
SQ_5min_alert = 0;
SQ_5min_no_alert = 0;
}
AddLabel(SQ_5min_alert, "5m", COLOR.RED);
AddLabel(SQ_5min_no_alert, "5m", COLOR.GREEN);
def SQ_4min;
def SQ_4min_alert;
def SQ_4min_no_alert;
def close4min;
if GetAggregationPeriod() <= AggregationPeriod.FOUR_MIN {
close4min = close(period=AggregationPeriod.FOUR_MIN);
SQ_4min = TTM_Squeeze(close4min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_4min == 0 {
SQ_4min_alert = 1;
SQ_4min_no_alert = Double.NaN;
} else {
SQ_4min_alert = Double.NaN;
SQ_4min_no_alert = 1;
}
} else {
close4min = 0;
SQ_4min = 0;
SQ_4min_alert = 0;
SQ_4min_no_alert = 0;
}
AddLabel(SQ_4min_alert, "4m", COLOR.RED);
AddLabel(SQ_4min_no_alert, "4m", COLOR.GREEN);
def SQ_3min;
def SQ_3min_alert;
def SQ_3min_no_alert;
def close3min;
if GetAggregationPeriod() <= AggregationPeriod.THREE_MIN {
close3min = close(period=AggregationPeriod.THREE_MIN);
SQ_3min = TTM_Squeeze(close3min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_3min == 0 {
SQ_3min_alert = 1;
SQ_3min_no_alert = Double.NaN;
} else {
SQ_3min_alert = Double.NaN;
SQ_3min_no_alert = 1;
}
} else {
close3min = 0;
SQ_3min = 0;
SQ_3min_alert = 0;
SQ_3min_no_alert = 0;
}
AddLabel(SQ_3min_alert, "3m", COLOR.RED);
AddLabel(SQ_3min_no_alert, "3m", COLOR.GREEN);
def SQ_2min;
def SQ_2min_alert;
def SQ_2min_no_alert;
def close2min;
if GetAggregationPeriod() <= AggregationPeriod.TWO_MIN {
close2min = close(period=AggregationPeriod.TWO_MIN);
SQ_2min = TTM_Squeeze(close2min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_2min == 0 {
SQ_2min_alert = 1;
SQ_2min_no_alert = Double.NaN;
} else {
SQ_2min_alert = Double.NaN;
SQ_2min_no_alert = 1;
}
} else {
close2min = 0;
SQ_2min = 0;
SQ_2min_alert = 0;
SQ_2min_no_alert = 0;
}
AddLabel(SQ_2min_alert, "2m", COLOR.RED);
AddLabel(SQ_2min_no_alert, "2m", COLOR.GREEN);
def SQ_1min;
def SQ_1min_alert;
def SQ_1min_no_alert;
def close1min;
if GetAggregationPeriod() <= AggregationPeriod.MIN {
close1min = close(period=AggregationPeriod.MIN);
SQ_1min = TTM_Squeeze(close1min, length, nK, nBB, alertline).SqueezeAlert;
if SQ_1min == 0 {
SQ_1min_alert = 1;
SQ_1min_no_alert = Double.NaN;
} else {
SQ_1min_alert = Double.NaN;
SQ_1min_no_alert = 1;
}
} else {
close1min = 0;
SQ_1min = 0;
SQ_1min_alert = 0;
SQ_1min_no_alert = 0;
}
AddLabel(SQ_1min_alert, "1m", COLOR.RED);
AddLabel(SQ_1min_no_alert, "1m", COLOR.GREEN);