/ES Futures Quasi-Algo 1 Hour Out Prediction for ThinkorSwim

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Thank you @mashume for updating the /ES. I use your study on my 15 min /ES chart and find it very helpful. If you have the time to do so, could you update the SPX study also? For my trading style, I always watch the 15min, 30 min, and 60 min SPX charts. (when trading the /ES).

SPX

Code:
#########################################################
#
#   Next Hour SPX Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-03-06 to
#          2023-05-30
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version SPX only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;
    

def q1 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then -10.152
    else if HOUR == 10 then -6.15
    else if HOUR == 11 then -6.373
    else if HOUR == 12 then -4.853
    else if HOUR == 13 then -6.06
    else if HOUR == 14 then -4.15
    else if HOUR == 15 then -6.773
    else if HOUR == 16 then -14.0
    else if HOUR == 17 then -17.06
    else if HOUR == 18 then 34.205
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def q3 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then 8.165
    else if HOUR == 10 then 6.368
    else if HOUR == 11 then 5.883
    else if HOUR == 12 then 5.823
    else if HOUR == 13 then 6.155
    else if HOUR == 14 then 7.26
    else if HOUR == 15 then 9.282
    else if HOUR == 16 then 16.157
    else if HOUR == 17 then 12.865
    else if HOUR == 18 then 57.875
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then -1.59
    else if HOUR == 10 then 0.24
    else if HOUR == 11 then -0.04
    else if HOUR == 12 then 1.895
    else if HOUR == 13 then 0.445
    else if HOUR == 14 then 1.91
    else if HOUR == 15 then 2.115
    else if HOUR == 16 then 1.745
    else if HOUR == 17 then -4.52
    else if HOUR == 18 then 46.04
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median, 
if dist_to_median > 5 then color.green 
else if dist_to_median > 1 then color.dark_green 
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red 
else color.gray);
 
MES and ES, NQ and MNQ
/MES will work with the /ES above, and both NQ and MNQ will work with this one:
Code:
#########################################################
#
#   Next Hour /NQ and maybe /MNQ Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-03-21 to
#          2023-05-30
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version /NQ and maybe /MNQ only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;
    

def q1 =
    if HOUR == 0 then -5.25
    else if HOUR == 1 then -8.5
    else if HOUR == 2 then -13.812
    else if HOUR == 3 then -14.75
    else if HOUR == 4 then -7.5
    else if HOUR == 5 then -11.75
    else if HOUR == 6 then -9.562
    else if HOUR == 7 then -14.0
    else if HOUR == 8 then -19.25
    else if HOUR == 9 then -39.125
    else if HOUR == 10 then -22.875
    else if HOUR == 11 then -18.625
    else if HOUR == 12 then -9.5
    else if HOUR == 13 then -17.75
    else if HOUR == 14 then -13.75
    else if HOUR == 15 then -11.812
    else if HOUR == 16 then -12.75
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then -3.812
    else if HOUR == 19 then -7.5
    else if HOUR == 20 then -6.5
    else if HOUR == 21 then -5.75
    else if HOUR == 22 then -3.25
    else -4.75;
def q3 =
    if HOUR == 0 then 5.5
    else if HOUR == 1 then 12.5
    else if HOUR == 2 then 12.5
    else if HOUR == 3 then 13.5
    else if HOUR == 4 then 13.0
    else if HOUR == 5 then 8.0
    else if HOUR == 6 then 13.25
    else if HOUR == 7 then 10.25
    else if HOUR == 8 then 23.75
    else if HOUR == 9 then 31.312
    else if HOUR == 10 then 33.25
    else if HOUR == 11 then 23.75
    else if HOUR == 12 then 26.25
    else if HOUR == 13 then 25.625
    else if HOUR == 14 then 30.5
    else if HOUR == 15 then 26.5
    else if HOUR == 16 then 7.0
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 7.75
    else if HOUR == 19 then 7.75
    else if HOUR == 20 then 7.0
    else if HOUR == 21 then 6.0
    else if HOUR == 22 then 6.25
    else 5.062;
def m2 =
    if HOUR == 0 then -0.75
    else if HOUR == 1 then 1.5
    else if HOUR == 2 then -0.75
    else if HOUR == 3 then -0.75
    else if HOUR == 4 then 2.75
    else if HOUR == 5 then -1.0
    else if HOUR == 6 then 2.75
    else if HOUR == 7 then -3.25
    else if HOUR == 8 then 0.875
    else if HOUR == 9 then -0.75
    else if HOUR == 10 then 4.875
    else if HOUR == 11 then 5.0
    else if HOUR == 12 then 10.5
    else if HOUR == 13 then 5.25
    else if HOUR == 14 then 8.25
    else if HOUR == 15 then 2.75
    else if HOUR == 16 then -5.75
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 1.75
    else if HOUR == 19 then 0.125
    else if HOUR == 20 then -0.125
    else if HOUR == 21 then 0.25
    else if HOUR == 22 then 1.25
    else -0.5;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median, 
if dist_to_median > 5 then color.green 
else if dist_to_median > 1 then color.dark_green 
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red 
else color.gray);
 

SPX

Code:
#########################################################
#
#   Next Hour SPX Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-03-06 to
#          2023-05-30
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version SPX only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;
   

def q1 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then -10.152
    else if HOUR == 10 then -6.15
    else if HOUR == 11 then -6.373
    else if HOUR == 12 then -4.853
    else if HOUR == 13 then -6.06
    else if HOUR == 14 then -4.15
    else if HOUR == 15 then -6.773
    else if HOUR == 16 then -14.0
    else if HOUR == 17 then -17.06
    else if HOUR == 18 then 34.205
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def q3 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then 8.165
    else if HOUR == 10 then 6.368
    else if HOUR == 11 then 5.883
    else if HOUR == 12 then 5.823
    else if HOUR == 13 then 6.155
    else if HOUR == 14 then 7.26
    else if HOUR == 15 then 9.282
    else if HOUR == 16 then 16.157
    else if HOUR == 17 then 12.865
    else if HOUR == 18 then 57.875
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.0
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.0
    else if HOUR == 9 then -1.59
    else if HOUR == 10 then 0.24
    else if HOUR == 11 then -0.04
    else if HOUR == 12 then 1.895
    else if HOUR == 13 then 0.445
    else if HOUR == 14 then 1.91
    else if HOUR == 15 then 2.115
    else if HOUR == 16 then 1.745
    else if HOUR == 17 then -4.52
    else if HOUR == 18 then 46.04
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);
Thank You kind sir!
 

Updated CL Dec 2023

@Lauri

Code:
#########################################################
#
#   Next Hour /CL Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-10-01 to
#          2023-12-08
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version /CL only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;
    

def q1 =
    if HOUR == 0 then -0.1
    else if HOUR == 1 then -0.1
    else if HOUR == 2 then -0.16
    else if HOUR == 3 then -0.205
    else if HOUR == 4 then -0.2
    else if HOUR == 5 then -0.25
    else if HOUR == 6 then -0.24
    else if HOUR == 7 then -0.29
    else if HOUR == 8 then -0.43
    else if HOUR == 9 then -0.38
    else if HOUR == 10 then -0.483
    else if HOUR == 11 then -0.355
    else if HOUR == 12 then -0.428
    else if HOUR == 13 then -0.34
    else if HOUR == 14 then -0.11
    else if HOUR == 15 then -0.09
    else if HOUR == 16 then -0.11
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then -0.07
    else if HOUR == 19 then -0.15
    else if HOUR == 20 then -0.15
    else if HOUR == 21 then -0.13
    else if HOUR == 22 then -0.09
    else -0.09;
def q3 =
    if HOUR == 0 then 0.09
    else if HOUR == 1 then 0.14
    else if HOUR == 2 then 0.24
    else if HOUR == 3 then 0.33
    else if HOUR == 4 then 0.31
    else if HOUR == 5 then 0.18
    else if HOUR == 6 then 0.17
    else if HOUR == 7 then 0.29
    else if HOUR == 8 then 0.17
    else if HOUR == 9 then 0.355
    else if HOUR == 10 then 0.3
    else if HOUR == 11 then 0.33
    else if HOUR == 12 then 0.24
    else if HOUR == 13 then 0.2
    else if HOUR == 14 then 0.18
    else if HOUR == 15 then 0.1
    else if HOUR == 16 then 0.13
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 0.09
    else if HOUR == 19 then 0.14
    else if HOUR == 20 then 0.11
    else if HOUR == 21 then 0.09
    else if HOUR == 22 then 0.09
    else 0.08;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.015
    else if HOUR == 2 then 0.02
    else if HOUR == 3 then 0.12
    else if HOUR == 4 then 0.07
    else if HOUR == 5 then -0.02
    else if HOUR == 6 then -0.02
    else if HOUR == 7 then -0.03
    else if HOUR == 8 then -0.12
    else if HOUR == 9 then -0.03
    else if HOUR == 10 then -0.08
    else if HOUR == 11 then 0.03
    else if HOUR == 12 then -0.065
    else if HOUR == 13 then -0.1
    else if HOUR == 14 then 0.05
    else if HOUR == 15 then 0.0
    else if HOUR == 16 then 0.01
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 0.0
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then -0.01
    else if HOUR == 21 then -0.02
    else if HOUR == 22 then -0.02
    else -0.01;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median, 
if dist_to_median > 5 then color.green 
else if dist_to_median > 1 then color.dark_green 
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red 
else color.gray);
 
@Alchicago1

SOXL

Code:
#########################################################
#
#   Next Hour SOXL Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-09-21 to
#          2023-12-14
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version SOXL only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;


def q1 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then -0.06
    else if HOUR == 5 then -0.045
    else if HOUR == 6 then -0.05
    else if HOUR == 7 then -0.09
    else if HOUR == 8 then -0.212
    else if HOUR == 9 then -0.208
    else if HOUR == 10 then -0.145
    else if HOUR == 11 then -0.132
    else if HOUR == 12 then -0.175
    else if HOUR == 13 then -0.132
    else if HOUR == 14 then -0.1
    else if HOUR == 15 then -0.14
    else if HOUR == 16 then -0.04
    else if HOUR == 17 then -0.03
    else if HOUR == 18 then -0.03
    else if HOUR == 19 then -0.076
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def q3 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.081
    else if HOUR == 5 then 0.045
    else if HOUR == 6 then 0.06
    else if HOUR == 7 then 0.11
    else if HOUR == 8 then 0.25
    else if HOUR == 9 then 0.326
    else if HOUR == 10 then 0.239
    else if HOUR == 11 then 0.155
    else if HOUR == 12 then 0.142
    else if HOUR == 13 then 0.135
    else if HOUR == 14 then 0.131
    else if HOUR == 15 then 0.079
    else if HOUR == 16 then 0.02
    else if HOUR == 17 then 0.02
    else if HOUR == 18 then 0.1
    else if HOUR == 19 then 0.23
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.02
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.01
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.011
    else if HOUR == 9 then 0.05
    else if HOUR == 10 then 0.04
    else if HOUR == 11 then 0.005
    else if HOUR == 12 then 0.0
    else if HOUR == 13 then 0.02
    else if HOUR == 14 then 0.015
    else if HOUR == 15 then -0.03
    else if HOUR == 16 then -0.01
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 0.02
    else if HOUR == 19 then 0.058
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);

-mashume
 
@CashMoney

/RTY

Code:
#########################################################
#
#   Next Hour /RTY Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-10-08 to
#          2023-12-15
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version /RTY only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;


def q1 =
    if HOUR == 0 then -0.9
    else if HOUR == 1 then -1.4
    else if HOUR == 2 then -1.7
    else if HOUR == 3 then -1.7
    else if HOUR == 4 then -1.65
    else if HOUR == 5 then -1.7
    else if HOUR == 6 then -2.0
    else if HOUR == 7 then -1.5
    else if HOUR == 8 then -4.825
    else if HOUR == 9 then -6.125
    else if HOUR == 10 then -4.1
    else if HOUR == 11 then -4.575
    else if HOUR == 12 then -4.7
    else if HOUR == 13 then -1.625
    else if HOUR == 14 then -2.4
    else if HOUR == 15 then -2.4
    else if HOUR == 16 then -1.3
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then -1.0
    else if HOUR == 19 then -1.05
    else if HOUR == 20 then -0.9
    else if HOUR == 21 then -0.9
    else if HOUR == 22 then -0.8
    else -0.7;
def q3 =
    if HOUR == 0 then 0.8
    else if HOUR == 1 then 1.175
    else if HOUR == 2 then 2.3
    else if HOUR == 3 then 3.4
    else if HOUR == 4 then 2.7
    else if HOUR == 5 then 1.325
    else if HOUR == 6 then 2.0
    else if HOUR == 7 then 2.9
    else if HOUR == 8 then 4.625
    else if HOUR == 9 then 8.225
    else if HOUR == 10 then 5.1
    else if HOUR == 11 then 2.0
    else if HOUR == 12 then 2.7
    else if HOUR == 13 then 2.9
    else if HOUR == 14 then 3.3
    else if HOUR == 15 then 1.4
    else if HOUR == 16 then 1.7
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 1.4
    else if HOUR == 19 then 1.0
    else if HOUR == 20 then 1.3
    else if HOUR == 21 then 1.075
    else if HOUR == 22 then 0.9
    else 0.6;
def m2 =
    if HOUR == 0 then -0.1
    else if HOUR == 1 then -0.1
    else if HOUR == 2 then 0.4
    else if HOUR == 3 then 0.8
    else if HOUR == 4 then 0.4
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.0
    else if HOUR == 7 then 0.7
    else if HOUR == 8 then -0.1
    else if HOUR == 9 then 0.5
    else if HOUR == 10 then 0.4
    else if HOUR == 11 then -0.75
    else if HOUR == 12 then -0.8
    else if HOUR == 13 then 0.9
    else if HOUR == 14 then 0.4
    else if HOUR == 15 then -0.7
    else if HOUR == 16 then -0.2
    else if HOUR == 17 then 0.0
    else if HOUR == 18 then 0.3
    else if HOUR == 19 then 0.1
    else if HOUR == 20 then 0.2
    else if HOUR == 21 then 0.1
    else if HOUR == 22 then 0.1
    else -0.1;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);

-mashume
 
Wow this is awesome just found it. Is there a new post showing updates? I just trade SPY only.
Thanks!

SPY

Code:
#########################################################
#
#   Next Hour SPY Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-11-29 to
#          2024-02-26
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version SPY only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;


def q1 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then -0.21
    else if HOUR == 5 then -0.19
    else if HOUR == 6 then -0.17
    else if HOUR == 7 then -0.26
    else if HOUR == 8 then -0.52
    else if HOUR == 9 then -0.546
    else if HOUR == 10 then -0.486
    else if HOUR == 11 then -0.474
    else if HOUR == 12 then -0.286
    else if HOUR == 13 then -0.413
    else if HOUR == 14 then -0.346
    else if HOUR == 15 then -0.43
    else if HOUR == 16 then -0.1
    else if HOUR == 17 then -0.1
    else if HOUR == 18 then -0.323
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def q3 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.21
    else if HOUR == 5 then 0.153
    else if HOUR == 6 then 0.3
    else if HOUR == 7 then 0.38
    else if HOUR == 8 then 0.55
    else if HOUR == 9 then 0.838
    else if HOUR == 10 then 0.54
    else if HOUR == 11 then 0.549
    else if HOUR == 12 then 0.531
    else if HOUR == 13 then 0.631
    else if HOUR == 14 then 0.55
    else if HOUR == 15 then 0.604
    else if HOUR == 16 then 0.13
    else if HOUR == 17 then 0.17
    else if HOUR == 18 then 0.783
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then -0.02
    else if HOUR == 5 then -0.01
    else if HOUR == 6 then 0.08
    else if HOUR == 7 then 0.08
    else if HOUR == 8 then 0.04
    else if HOUR == 9 then 0.18
    else if HOUR == 10 then 0.05
    else if HOUR == 11 then 0.087
    else if HOUR == 12 then 0.142
    else if HOUR == 13 then 0.18
    else if HOUR == 14 then 0.13
    else if HOUR == 15 then 0.059
    else if HOUR == 16 then -0.01
    else if HOUR == 17 then 0.03
    else if HOUR == 18 then 0.297
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);
 
Updated the indicator to include a "distance to the median" line label. Compares the current close to the projected median. If you're below the median, the theory goes, the median may pull you up. if you're above the next median, the median may pull you down.

PS I did not update the first post with this script, as the coefficients have changed with time and new data. the version for any of these studies is to look at the date range in the header.

-mashume
Code:
#########################################################
#
#   Next Hour ES Trading Range
#     Algorithmic Prediction
#   Values Derived on Data from
#          2021-02-03 to
#          2021-04-15
#
#   @mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version /ES (and maybe /MES) only
#  Functional on 1, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;
   

def q1 =
    if HOUR == 0 then -2.25
    else if HOUR == 1 then -3.25
    else if HOUR == 2 then -2.812
    else if HOUR == 3 then -3.5
    else if HOUR == 4 then -1.75
    else if HOUR == 5 then -2.5
    else if HOUR == 6 then -2.0
    else if HOUR == 7 then -3.5
    else if HOUR == 8 then -3.5
    else if HOUR == 9 then -5.688
    else if HOUR == 10 then -4.0
    else if HOUR == 11 then -2.25
    else if HOUR == 12 then -2.812
    else if HOUR == 13 then -4.25
    else if HOUR == 14 then -6.5
    else if HOUR == 15 then -4.5
    else if HOUR == 16 then -1.75
    else if HOUR == 17 then 1.0
    else if HOUR == 18 then -3.25
    else if HOUR == 19 then -3.0
    else if HOUR == 20 then -3.5
    else if HOUR == 21 then -3.5
    else if HOUR == 22 then -2.0
    else -1.5;
def q3 =
    if HOUR == 0 then 2.25
    else if HOUR == 1 then 3.0
    else if HOUR == 2 then 3.75
    else if HOUR == 3 then 3.75
    else if HOUR == 4 then 2.75
    else if HOUR == 5 then 2.75
    else if HOUR == 6 then 3.25
    else if HOUR == 7 then 3.062
    else if HOUR == 8 then 5.0
    else if HOUR == 9 then 8.25
    else if HOUR == 10 then 7.062
    else if HOUR == 11 then 6.75
    else if HOUR == 12 then 5.25
    else if HOUR == 13 then 5.0
    else if HOUR == 14 then 6.25
    else if HOUR == 15 then 6.938
    else if HOUR == 16 then 3.5
    else if HOUR == 17 then 6.25
    else if HOUR == 18 then 2.812
    else if HOUR == 19 then 3.0
    else if HOUR == 20 then 3.25
    else if HOUR == 21 then 2.25
    else if HOUR == 22 then 1.75
    else 2.0;
def m2 =
    if HOUR == 0 then -0.125
    else if HOUR == 1 then -0.25
    else if HOUR == 2 then 0.25
    else if HOUR == 3 then 0.25
    else if HOUR == 4 then 0.375
    else if HOUR == 5 then 0.0
    else if HOUR == 6 then 0.5
    else if HOUR == 7 then 0.0
    else if HOUR == 8 then 0.5
    else if HOUR == 9 then 2.0
    else if HOUR == 10 then 2.25
    else if HOUR == 11 then 2.5
    else if HOUR == 12 then 1.25
    else if HOUR == 13 then 0.75
    else if HOUR == 14 then -0.5
    else if HOUR == 15 then 1.25
    else if HOUR == 16 then 0.75
    else if HOUR == 17 then 2.5
    else if HOUR == 18 then -0.5
    else if HOUR == 19 then 0.25
    else if HOUR == 20 then 0.25
    else if HOUR == 21 then -0.5
    else if HOUR == 22 then 0.25
    else 0.25;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);
Does this code work now during 2024 for ES?

I see the code for 2024. Thank you

Do we need to update every quarter? is there a way to automatically calculate on TOS instead of manual update every time. ?
 
Do we need to update every quarter? is there a way to automatically calculate on TOS instead of manual update every time. ?
You should update when you feel that the market has changed in some way. There is a long post I did about this earlier in this thread I think.

There is no way to make ToS do the updates or use real-time data. The indicator code is "written" by a python script I wrote and does a bunch of statistical calculations on the data (aggregations etc...) that aren't really possible in the ToS thinkscript environment. A link to the python notebook that creates the thinkscript is elsewhere in this thread.

Happy Trading,
mashume
 
You should update when you feel that the market has changed in some way. There is a long post I did about this earlier in this thread I think.

There is no way to make ToS do the updates or use real-time data. The indicator code is "written" by a python script I wrote and does a bunch of statistical calculations on the data (aggregations etc...) that aren't really possible in the ToS thinkscript environment. A link to the python notebook that creates the thinkscript is elsewhere in this thread.

Happy Trading,
mashume
Appreciate the help and guidance. I would like to learn to update the code by following the method. Could please help in pointing to the recent post/information. I would like to update my script for /MES, /MNQ, /MYM, /M2K, /CL and /GC futures.

Thank you
 
Thanks!

SPY

Code:
#########################################################
#
#   Next Hour SPY Trading Range
#     Algorithmic Prediction
#
#   Values Derived on Data from
#          2023-11-29 to
#          2024-02-26
#
#   mashume at usethinkscript.com
#
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#
#  This Version SPY only
#  Functional on 1, 2, 3, 5, 10, 15, 20, 30, 60 minute charts
#
#########################################################

declare upper;

def Y = 31556926;
def M = 2629743;
def D = 86400;
def H = 3600;
def HalfHour = 1800;
def epoch = (getTime() / 1000);
def YMD = (epoch % Y) - (epoch / Y);
def month = (Floor(YMD / M) + 1);
def GMT = Floor((epoch % D) / H);
def HOUR = if GMT > 4 then GMT - 4 else if GMT < 4 then (GMT + 24) - 4 else 0;

def tf = getAggregationPeriod();

def barsPerHour = if tf == AggregationPeriod.HOUR then 1
    else if tf == AggregationPeriod.THIRTY_MIN then 2
    else if tf == AggregationPeriod.TWENTY_MIN then 3
    else if tf == AggregationPeriod.FIFTEEN_MIN then 4
    else if tf == AggregationPeriod.TEN_MIN then 6
    else if tf == AggregationPeriod.FIVE_MIN then 12
    else if tf == AggregationPeriod.THREE_MIN then 20
    else if tf == AggregationPeriod.TWO_MIN then 30
    else if tf == AggregationPeriod.MIN then 60
    else double.nan;


def q1 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then -0.21
    else if HOUR == 5 then -0.19
    else if HOUR == 6 then -0.17
    else if HOUR == 7 then -0.26
    else if HOUR == 8 then -0.52
    else if HOUR == 9 then -0.546
    else if HOUR == 10 then -0.486
    else if HOUR == 11 then -0.474
    else if HOUR == 12 then -0.286
    else if HOUR == 13 then -0.413
    else if HOUR == 14 then -0.346
    else if HOUR == 15 then -0.43
    else if HOUR == 16 then -0.1
    else if HOUR == 17 then -0.1
    else if HOUR == 18 then -0.323
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def q3 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then 0.21
    else if HOUR == 5 then 0.153
    else if HOUR == 6 then 0.3
    else if HOUR == 7 then 0.38
    else if HOUR == 8 then 0.55
    else if HOUR == 9 then 0.838
    else if HOUR == 10 then 0.54
    else if HOUR == 11 then 0.549
    else if HOUR == 12 then 0.531
    else if HOUR == 13 then 0.631
    else if HOUR == 14 then 0.55
    else if HOUR == 15 then 0.604
    else if HOUR == 16 then 0.13
    else if HOUR == 17 then 0.17
    else if HOUR == 18 then 0.783
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;
def m2 =
    if HOUR == 0 then 0.0
    else if HOUR == 1 then 0.0
    else if HOUR == 2 then 0.0
    else if HOUR == 3 then 0.0
    else if HOUR == 4 then -0.02
    else if HOUR == 5 then -0.01
    else if HOUR == 6 then 0.08
    else if HOUR == 7 then 0.08
    else if HOUR == 8 then 0.04
    else if HOUR == 9 then 0.18
    else if HOUR == 10 then 0.05
    else if HOUR == 11 then 0.087
    else if HOUR == 12 then 0.142
    else if HOUR == 13 then 0.18
    else if HOUR == 14 then 0.13
    else if HOUR == 15 then 0.059
    else if HOUR == 16 then -0.01
    else if HOUR == 17 then 0.03
    else if HOUR == 18 then 0.297
    else if HOUR == 19 then 0.0
    else if HOUR == 20 then 0.0
    else if HOUR == 21 then 0.0
    else if HOUR == 22 then 0.0
    else 0.0;

def midline = hl2(period = AggregationPeriod.HOUR)[1];
def median = hl2(period = AggregationPeriod.HOUR)[1] + m2;
def upper = median + (q3);
def lower = median + (q1);

plot c = midline;
c.setStyle(CURve.SHORT_DASH);
c.setDefaultColor(getColor(7));

plot median_line = median[barsPerHour];
median_line.SetPaintingStrategy(PaintingStrategy.DASHES);
median_line.SetDefaultColor(getColor(3));
plot expected_upper = upper[barsPerHour];
expected_upper.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_upper.SetDefaultColor(getColor(1));
plot expected_lower = lower[barsPerHour];
expected_lower.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
expected_lower.SetDefaultColor(getColor(5));

addcloud(expected_upper, expected_lower, color.white, color.white);
def upside = (expected_upper[(-1 * barsPerHour)] - close);
def downside = (close - expected_lower[(-1 * barsPerHour)]);
addLabel(yes, "current upside: " + upside + "  current downside: " + downside, if upside > downside then color.dark_green else if downside > upside then color.dark_red else color.dark_gray);

def dist_to_median = (median_line[(-1 * barsPerHour)] - close);
addLabel(yes, "Distance to Median: " + dist_to_median,
if dist_to_median > 5 then color.green
else if dist_to_median > 1 then color.dark_green
else if dist_to_median < -5 then color.red
else if dist_to_median < -1 then color.dark_red
else color.gray);

Thank You!!!
Data on SPY is still pretty close to your older post data. This is very helpful Thank You.
 

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
346 Online
Create Post

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top