Multi-TimeFrame Candles Overlay for ThinkOrSwim

#----------------------------------------------------- # # S I M P L E # C A N D L E O V E R L A Y # # Open line red/green for visualizing FTC # # updated by tickets2themoon and Wiinii (added Global candle color/transpoarency option) # based on STRAT study by Ramon DV. aka Pelonsax # based on Rob Smith's The STRAT # Original Candle Overlay concept by Paul Townsend # Added HeikinAshi Candels by Sam4COK @ Samer800 - 08/2022 #----------------------------------------------------- DECLARE UPPER; #------------------------------------ # MTF SECTION #------------------------------------ input candleType = { Default "CandleStick", "HeikinAshi"}; input Time_Frame = AggregationPeriod.FIFTEEN_MIN; input addcloud = yes; def H = high(period = Time_Frame); def L = low(period = Time_Frame); def O = open(period = Time_Frame); def C = close(period = Time_Frame); def na = double.Nan; def modTime = GetTime() % Time_Frame; def aggPeriod = GetAggregationPeriod(); # Number of bars within the lower timeframe def lowerTimeFrameBarCount = Time_Frame / aggPeriod; # Calculate ms of Middle bar from open on higher timeframe def halfAgg; if lowerTimeFrameBarCount % 2 == 0 then { halfAgg = (lowerTimeFrameBarCount/2) * GetAggregationPeriod();} else { halfAgg = RoundDown(lowerTimeFrameBarCount/2,0) * GetAggregationPeriod();} # Determine the position of each bar in respect to Higher Time Frame def barStart = if modTime == 0 then 1 else 0; def barEnd = if modTime >= (Time_Frame - aggPeriod) then 1 else 0; #Find the middle bar in the lower timeframe def midBar = if modTime == halfAgg then 1 else 0; #If start or end of bar - used to draw side border of candle body def openbar = if barStart or barEnd then 1 else 0; #------------------------------------ # ADD CLOUDS #------------------------------------ def side; if modTime < modTime[1] then{ if side[1] == 1 then{ side = 2; } else{ side = 1; } }else{ side = side[1]; } def sider = side; def doji = C==O; AddCloud(if (candleType == candleType.Candlestick and addcloud and sider == 2 and !doji) then O else na, if (addcloud and sider == 2 and !doji) then C else na, CreateColor(236,64,122), CreateColor(2,160,174), yes); AddCloud( if (candleType == candleType.Candlestick and addcloud and sider == 1 and !doji) then O else na, if (addcloud and sider == 1 and !doji) then C else na, CreateColor(236,64,122), CreateColor(2,160,174), yes); AddCloud( if (candleType == candleType.Candlestick and addcloud and sider == 1 and doji) then O else na, if (addcloud and sider == 1 and doji) then C else na, Color.WHITE, Color.WHITE, yes); AddCloud( if (candleType == candleType.Candlestick and addcloud and sider == 2 and doji) then O else na, if (addcloud and sider == 2 and doji) then C else na, Color.WHITE, Color.WHITE, yes); ### making stuff up here drawing the wick through the middle candle. def up = c > o; def ubh; def ubc; def ubo; def ubl; if candleType == candleType.Candlestick and up and midBar then { ubh = h; ubc = c; ubo = o; ubl = l;} else { ubh = na; ubc = na; ubo = na; ubl = na;} def dbh; def dbc; def dbo; def dbl; if candleType == candleType.Candlestick and !up and !doji and midBar then { dbh = h; dbc = c; dbo = o; dbl = l;} else { dbh = na; dbc = na; dbo = na; dbl = na;} def djbh; def djbc; def djbo; def djbl; if candleType == candleType.Candlestick and doji and midBar then { djbh = h; djbc = c; djbo = o; djbl = l;} else { djbh = na; djbc = na; djbo = na; djbl = na;} def sideuh = if candleType == candleType.Candlestick and up and openbar then C else na; def sideul = if candleType == candleType.Candlestick and up and openbar then O else na; def sidedh = if candleType == candleType.Candlestick and !up and !doji and openbar then O else na; def sidedl = if candleType == candleType.Candlestick and !up and !doji and openbar then C else na; def sidedjh = if candleType == candleType.Candlestick and doji and openbar then O else na; def sidedjl = if candleType == candleType.Candlestick and doji and openbar then C else na; #Draw Upper Wick Green AddChart(high = ubh, low = ubc, open = na, close = na, type = ChartType.BAR , growcolor = CreateColor(2,160,174)); #Draw Upper Wick Red AddChart(high = dbh, low = dbo, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(236,64,122)); #Draw Lower Wick Green AddChart(high = ubo, low = ubl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(2,160,174)); #Draw Lower Wick Red AddChart(high = dbc, low = dbl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(236,64,122)); #Draw Side of Body Green AddChart(high = sideuh, low = sideul, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(2,160,174)); #Draw Side of Body Red AddChart(high = sidedh, low = sidedl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(236,64,122)); #Draw Upper Wick White - Doji AddChart(high = djbh, low = djbo, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); #Draw Lower Wick White - Doji AddChart(high = djbc, low = djbl, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); #Draw Side of Body White AddChart(high = sidedjh, low = sidedjl, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); #plot highs = if o==l then na else ubh; #highs.setpaintingStrategy(PaintingStrategy.POINTS); #highs.setDefaultColor(CreateColor(2,160,174)); #plot lhighs = if o==h then na else dbh; #lhighs.setpaintingStrategy(paintingstrategy.points); #lhighs.setdefaultColor(Color.DARK_RED); #plot lows = if o==l then na else ubl; #lows.setpaintingStrategy(PaintingStrategy.Points); #lows.setdefaultColor(CreateColor(236,64,122)); #plot llows = if o==h then na else dbl; #llows.setpaintingStrategy(PaintingStrategy.POINTS); #llows.SetDefaultColor(Color.DARK_RED); ######## def haOpen; def haHigh; def haLow; def haClose; haClose = (o + h + l + c) / 4; haOpen = CompoundValue(1, (haOpen[1] + haClose[1]) / 2, haClose); haHigh = Max(Max(h, haOpen), haClose); haLow = Min(Min(l, haOpen), haClose); def hh1r = if haClose > haOpen then 1 else if haClose < haOpen then -1 else 0; def HUp = hh1r > 0; def Hdoji = haClose==haOpen; def haO = haOpen; def haC = haClose; # Plot UP candle def UpO; def UpH; def UpL; def UpC; if HUp and midbar and candleType == candleType.HeikinAshi then { UpO = haOpen ; UpH = haHigh ; UpL = haLow ; UpC = haClose; } else { UpO = na; UpH = na; UpL = na; UpC = na; } # Plot DOWN candle def DnO; def DnH; def DnL; def DnC; if !HUp and !Hdoji and midBar and candleType == candleType.HeikinAshi then { DnO = haOpen ; DnH = haHigh ; DnL = haLow ; DnC = haClose; } else { DnO = na; DnH = na; DnL = na; DnC = na; } def Hdjbh; def Hdjbc; def Hdjbo; def Hdjbl; if candleType == candleType."HeikinAshi" and Hdoji and midBar then { Hdjbh = haHigh; Hdjbc = haClose; Hdjbo = haOpen; Hdjbl = haLow;} else { Hdjbh = na; Hdjbc = na; Hdjbo = na; Hdjbl = na;} def Hsideuh = if candleType == candleType.HeikinAshi and HUp and openbar then haClose else na; def Hsideul = if candleType == candleType.HeikinAshi and HUp and openbar then haOpen else na; def Hsidedh = if candleType == candleType.HeikinAshi and !HUp and !Hdoji and openbar then haOpen else na; def Hsidedl = if candleType == candleType.HeikinAshi and !HUp and !Hdoji and openbar then haClose else na; def Hsidedjh = if candleType == candleType.HeikinAshi and Hdoji and openbar then haOpen else na; def Hsidedjl = if candleType == candleType.HeikinAshi and Hdoji and openbar then haClose else na; # Plot the new Chart #Draw Upper Wick Green AddChart(high = UpH, low = UpC, open = na, close = na, type = ChartType.BAR , growcolor = CreateColor(2,160,174)); #Draw Upper Wick Red AddChart(high = DnH, low = DnO, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(192,0,192)); #Draw Lower Wick Green AddChart(high = Upo, low = Upl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(2,160,174)); #Draw Lower Wick Red AddChart(high = Dnc, low = Dnl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(192,0,192)); #Draw Side of Body Green AddChart(high = hsideuh, low = hsideul, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(2,160,174)); #Draw Side of Body Red AddChart(high = hsidedh, low = hsidedl, open = na, close = na, type = ChartType.BAR, growcolor = CreateColor(192,0,192)); #Draw Upper Wick White - Doji AddChart(high = Hdjbh, low = Hdjbo, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); #Draw Lower Wick White - Doji AddChart(high = hdjbc, low = hdjbl, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); #Draw Side of Body White AddChart(high = hsidedjh, low = hsidedjl, open = na, close = na, type = ChartType.BAR, growcolor = color.WHITE); AddCloud(if (candleType == candleType.HeikinAshi and addcloud and sider == 2 and !hdoji) then haO else na, if (addcloud and sider == 2 and !hdoji) then haC else na, CreateColor(192,0,192), CreateColor(2,160,174), yes); AddCloud( if (candleType == candleType.HeikinAshi and addcloud and sider == 1 and !hdoji) then haO else na, if (addcloud and sider == 1 and !hdoji) then haC else na, CreateColor(192,0,192), CreateColor(2,160,174), yes); AddCloud( if (candleType == candleType.HeikinAshi and addcloud and sider == 1 and hdoji) then haO else na, if (addcloud and sider == 1 and hdoji) then haC else na, Color.WHITE, Color.WHITE, yes); AddCloud( if (candleType == candleType.HeikinAshi and addcloud and sider == 2 and hdoji) then haO else na, if (addcloud and sider == 2 and hdoji) then haC else na, Color.WHITE, Color.WHITE, yes); #plot Hahighs = if haOpen==haHigh then na else uph; #hahighs.setpaintingStrategy(PaintingStrategy.POINTS); #hahighs.setDefaultColor(Color.Green); #plot halhighs = if haOpen==haHigh then na else dnh; #halhighs.setpaintingStrategy(paintingstrategy.points); #halhighs.setdefaultColor(Color.Red); #plot halows = if haOpen==haLow then na else upl; #halows.setpaintingStrategy(PaintingStrategy.Points); #halows.setdefaultColor(Color.Green); #plot hallows = if haOpen==haLow then na else dnl; #hallows.setpaintingStrategy(PaintingStrategy.POINTS); #hallows.SetDefaultColor(Color.Red); #------------------------------------ # ADD LABEL #------------------------------------ input Show_Label = yes; AddLabel(Show_Label, Concat(if Time_Frame < 3600000 then Time_Frame / 60000 + "m " else if Time_Frame < 86400000 then Time_Frame / 3600000 + "h " else if Time_Frame < 604800000 then Time_Frame / 86400000 + "D " else if Time_Frame < 2592000000 then Time_Frame / 604800000 + "Wk " else if Time_Frame < 31536000000 then Time_Frame / 2592000000 + "Mo " else Time_Frame / 31536000000 + "Yr ", if Time_Frame then candleType else ""), Color.light_Gray); # end
Hi , Somehow cloud is not working only on 1Hour time frame > Can you please fix it . Thanks
 
Here is addition of an optional cloud color for the boxes

Capture.jpg
Ruby:
#-----------------------------------------------------
#
#       S I M P L E
#    C A N D L E      O V E R L A Y
#
# Open line red/green for visualizing FTC
#
# updated by tickets2themoon
# based on STRAT study by Ramon DV. aka Pelonsax
# based on Rob Smith's The STRAT
# Original Candle Overlay concept by Paul Townsend
#
#-----------------------------------------------------
# Modified by sleepyz to put a box around time_frame high/low

declare upper;
#------------------------------------
# MTF SECTION
#------------------------------------
input Time_Frame = AggregationPeriod.THIRTY_MIN;
def H = high(period = Time_Frame);
def L = low(period = Time_Frame);
def O = open(period = Time_Frame);
def C = close(period = Time_Frame);
def NA = Double.NaN;

def modTime = GetTime() % Time_Frame;
def aggPeriod = GetAggregationPeriod();

# Number of bars within the lower timeframe
def lowerTimeFrameBarCount =  Time_Frame / aggPeriod;

# Calculate ms of Middle bar from open on higher timeframe
def halfAgg;
if lowerTimeFrameBarCount % 2 == 0
then {
    halfAgg = (lowerTimeFrameBarCount / 2) * GetAggregationPeriod();
}
else {
    halfAgg = RoundDown(lowerTimeFrameBarCount / 2, 0) * GetAggregationPeriod();
}

# Determine the position of each bar in respect to Higher Time Frame
def barStart = if modTime == 0 then 1 else 0;
def barEnd = if modTime >= (Time_Frame - aggPeriod) then 1 else 0;
#Find the middle bar in the lower timeframe
def midBar = if modTime == halfAgg then 1 else 0;
#If start or end of bar - used to draw side border of candle body
def openbar = if barStart or barEnd then 1 else 0;


#------------------------------------
# ADD CLOUDS
#------------------------------------
input addcloud = yes;

def side;
if modTime < modTime[1]
then {
    if side[1] == 1
    then {
        side = 2;
    }
    else {
        side = 1;
    }
} else {
    side = side[1];
}
def sider = side;
def doji = C == O;

### making stuff up here drawing the wick through the middle candle.
def nan = Double.NaN;
def up = C > O;


def ubh = if up and midBar then H else nan;
def ubc = if up and midBar then H else nan;
def ubo = if up and midBar then L else nan;
def ubl = if up and midBar then L else nan;

def dbh = if !up and !doji and midBar then H else nan;
def dbc = if !up and !doji and midBar then H else nan;
def dbo = if !up and !doji and midBar then L else nan;
def dbl = if !up and !doji and midBar then L else nan;

def djbh = if doji and midBar then H else nan;
def djbc = if doji and midBar then H else nan;
def djbo = if doji and midBar then L else nan;
def djbl = if doji and midBar then L else nan;

def sideuh = if up and openbar then H else nan;
def sideul = if up and openbar then L else nan;
def sidedh = if !up and !doji and openbar then H else nan;
def sidedl = if !up and !doji and openbar then L else nan;
def sidedjh = if doji and openbar then H else nan;
def sidedjl = if doji and openbar then L else nan;



#Draw Side of Body Green
AddChart(high = sideuh, low = sideul, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_GREEN);

#Draw Side of Body Red
AddChart(high = sidedh, low = sidedl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_RED);

#Draw Side of Body White
AddChart(high = sidedjh, low = sidedjl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.WHITE);


plot highs = H;
highs.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
highs.AssignValueColor(if O > C then Color.RED else Color.GREEN);

plot lows = L;
lows.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
lows.AssignValueColor(if O > C then Color.RED else Color.GREEN);

input show_cloud = yes;
DefineGlobalColor("Up", Color.LIGHT_GREEN);
DefineGlobalColor("Dn", Color.LIGHT_RED);
AddCloud(if !show_cloud or sider != sider[-1] then Double.NaN else if O < C then H else Double.NaN, L, GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if !show_cloud or sider != sider[-1] then Double.NaN else if O > C then H else Double.NaN, L, GlobalColor("Dn"), GlobalColor("Dn"));

#------------------------------------
# ADD LABEL
#------------------------------------
input Show_Label = yes;
AddLabel(Show_Label, Concat(if Time_Frame < 3600000 then Time_Frame / 60000 + "m" else if Time_Frame < 86400000 then Time_Frame / 3600000 + "h" else if Time_Frame < 604800000 then Time_Frame / 86400000 + "D" else if Time_Frame < 2592000000 then Time_Frame / 604800000 + "Wk" else if Time_Frame < 31536000000 then Time_Frame / 2592000000 + "Mo" else Time_Frame / 31536000000 + "Yr", if Time_Frame then " CANDLES" else ""), Color.LIGHT_GRAY);

# end
is there a setting that is causing my clouds to connect???
 
is there a setting that is causing my clouds to connect???

This is a workaround a TOS limitation, so it can happen.

Make sure that the timeframe you are using is compatiable with the higher aggregation. For example, if you are viewing a 3min chart, make sure it is divisable with no remainder into the higher timeframe. For example, if you are viewing a 3 min chart, you would have problems when overlaying a 5min higher agg, but you could overlay a 15min higher agg.

So if the above example is not the problem, please provide chart information if you want it tested, . A screen shot would be helpful with the problem you are having.

I have made one revision to the above cloud color to completely color the higher agg overlay as there was a gap. To do this, I just used another addcloud statement for each higher agg bar to fill the gap.

Screenshot-2022-11-08-124927.png
Ruby:
#-----------------------------------------------------
#
#       S I M P L E
#    C A N D L E      O V E R L A Y
#
# Open line red/green for visualizing FTC
#
# updated by tickets2themoon
# based on STRAT study by Ramon DV. aka Pelonsax
# based on Rob Smith's The STRAT
# Original Candle Overlay concept by Paul Townsend
#
#-----------------------------------------------------
# Modified by sleepyz to put a box around time_frame high/low

declare upper;
#------------------------------------
# MTF SECTION
#------------------------------------
input Time_Frame = AggregationPeriod.THIRTY_MIN;
def H = high(period = Time_Frame);
def L = low(period = Time_Frame);
def O = open(period = Time_Frame);
def C = close(period = Time_Frame);
def NA = Double.NaN;

def modTime = GetTime() % Time_Frame;
def aggPeriod = GetAggregationPeriod();

# Number of bars within the lower timeframe
def lowerTimeFrameBarCount =  Time_Frame / aggPeriod;

# Calculate ms of Middle bar from open on higher timeframe
def halfAgg;
if lowerTimeFrameBarCount % 2 == 0
then {
    halfAgg = (lowerTimeFrameBarCount / 2) * GetAggregationPeriod();
}
else {
    halfAgg = RoundDown(lowerTimeFrameBarCount / 2, 0) * GetAggregationPeriod();
}

# Determine the position of each bar in respect to Higher Time Frame
def barStart = if modTime == 0 then 1 else 0;
def barEnd = if modTime >= (Time_Frame - aggPeriod) then 1 else 0;
#Find the middle bar in the lower timeframe
def midBar = if modTime == halfAgg then 1 else 0;
#If start or end of bar - used to draw side border of candle body
def openbar = if barStart or barEnd then 1 else 0;


#------------------------------------
# ADD CLOUDS
#------------------------------------
input addcloud = yes;

def side;
if modTime < modTime[1]
then {
    if side[1] == 1
    then {
        side = 2;
    }
    else {
        side = 1;
    }
} else {
    side = side[1];
}
def sider = side;
def doji = C == O;

### making stuff up here drawing the wick through the middle candle.
def nan = Double.NaN;
def up = C > O;


def ubh = if up and midBar then H else nan;
def ubc = if up and midBar then H else nan;
def ubo = if up and midBar then L else nan;
def ubl = if up and midBar then L else nan;

def dbh = if !up and !doji and midBar then H else nan;
def dbc = if !up and !doji and midBar then H else nan;
def dbo = if !up and !doji and midBar then L else nan;
def dbl = if !up and !doji and midBar then L else nan;

def djbh = if doji and midBar then H else nan;
def djbc = if doji and midBar then H else nan;
def djbo = if doji and midBar then L else nan;
def djbl = if doji and midBar then L else nan;

def sideuh = if up and openbar then H else nan;
def sideul = if up and openbar then L else nan;
def sidedh = if !up and !doji and openbar then H else nan;
def sidedl = if !up and !doji and openbar then L else nan;
def sidedjh = if doji and openbar then H else nan;
def sidedjl = if doji and openbar then L else nan;



#Draw Side of Body Green
AddChart(high = sideuh, low = sideul, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_GREEN);

#Draw Side of Body Red
AddChart(high = sidedh, low = sidedl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_RED);

#Draw Side of Body White
AddChart(high = sidedjh, low = sidedjl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.WHITE);


plot highs = H;
highs.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
highs.AssignValueColor(if O > C then Color.RED else Color.GREEN);

plot lows = L;
lows.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
lows.AssignValueColor(if O > C then Color.RED else Color.GREEN);

input show_cloud = yes;
DefineGlobalColor("Up", Color.LIGHT_GREEN);
DefineGlobalColor("Dn", Color.LIGHT_RED);
AddCloud(if !show_cloud or sider[1] != sider[0] then Double.NaN else if O < C then H else Double.NaN, L, GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if !show_cloud or sider[1] != sider[0] then Double.NaN else if O > C then H else Double.NaN, L, GlobalColor("Dn"), GlobalColor("Dn"));
AddCloud(if !show_cloud or sider != sider[-1] then Double.NaN else if O < C then H else Double.NaN, L, GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if !show_cloud or sider != sider[-1] then Double.NaN else if O > C then H else Double.NaN, L, GlobalColor("Dn"), GlobalColor("Dn"));

#------------------------------------
# ADD LABEL
#------------------------------------
input Show_Label = yes;
AddLabel(Show_Label, Concat(if Time_Frame < 3600000 then Time_Frame / 60000 + "m" else if Time_Frame < 86400000 then Time_Frame / 3600000 + "h" else if Time_Frame < 604800000 then Time_Frame / 86400000 + "D" else if Time_Frame < 2592000000 then Time_Frame / 604800000 + "Wk" else if Time_Frame < 31536000000 then Time_Frame / 2592000000 + "Mo" else Time_Frame / 31536000000 + "Yr", if Time_Frame then " CANDLES" else ""), Color.LIGHT_GRAY);

# end
 
This is a workaround a TOS limitation, so it can happen.

Make sure that the timeframe you are using is compatiable with the higher aggregation. For example, if you are viewing a 3min chart, make sure it is divisable with no remainder into the higher timeframe. For example, if you are viewing a 3 min chart, you would have problems when overlaying a 5min higher agg, but you could overlay a 15min higher agg.

So if the above example is not the problem, please provide chart information if you want it tested, . A screen shot would be helpful with the problem you are having.

I have made one revision to the above cloud color to completely color the higher agg overlay as there was a gap. To do this, I just used another addcloud statement for each higher agg bar to fill the gap.
Thanks for the reply. My 15m overlay with 5m candles (and daily with 15m, 30m, 1hr) is fine with a much older version is what's confusing. But the Daily overlay for 4h or 4h overlay for 2h connects when there's a continuation in trend for some reason.

O9UoOUq.jpg


vs. the correct look i'm looking for

m3LoF7c.jpg
 
Last edited:
Thanks for the reply. My 15m overlay with 5m candles (and daily with 15m, 30m, 1hr) is fine with a much older version is what's confusing. But the Daily overlay for 4h or 4h overlay for 2h connects when there's a continuation in trend for some reason.

O9UoOUq.jpg


vs. the correct look i'm looking for

m3LoF7c.jpg

Here is a link to the grid in the image where the timeframes all seem to work with the overlays shown https://tos.mx/VsWP0td

Clouds do not appear in the lower chart due to a TOS limitation

Screenshot-2022-11-11-054206.png
 
it worked well 15 minutes TF over 5 minutes TF, but did not look good when I tried to overlay Weekly over Daily. How do we fix this?

Can you make it work for Higher TF Week and Lower TF Day?

When I used this study for Week vs Day Overly, the drawing is no longer working. Please see the screenshot attached.
4omnEKd.png
 
Last edited by a moderator:
When I used this study for Week vs Day Overly, the drawing is no longer working. Please see the screenshot attached.

4omnEKd.png

This modification seems to work better on daily chart with weekly or monthly

Screenshot-2022-12-30-115548.png
Ruby:
#-----------------------------------------------------
#
#       S I M P L E
#    C A N D L E      O V E R L A Y
#
# Open line red/green for visualizing FTC
#
# updated by tickets2themoon
# based on STRAT study by Ramon DV. aka Pelonsax
# based on Rob Smith's The STRAT
# Original Candle Overlay concept by Paul Townsend
#
#-----------------------------------------------------
# Modified by sleepyz to put a box around time_frame high/low

declare upper;
#------------------------------------
# MTF SECTION
#------------------------------------
input Time_Frame = AggregationPeriod.THIRTY_MIN;
def H = high(period = Time_Frame);
def L = low(period = Time_Frame);
def O = open(period = Time_Frame);
def C = close(period = Time_Frame);
def NA = Double.NaN;

def modTime = GetTime() % Time_Frame;
def aggPeriod = GetAggregationPeriod();

# Number of bars within the lower timeframe
def lowerTimeFrameBarCount =  Time_Frame / aggPeriod;

# Calculate ms of Middle bar from open on higher timeframe
def halfAgg;
if lowerTimeFrameBarCount % 2 == 0
then {
    halfAgg = (lowerTimeFrameBarCount / 2) * GetAggregationPeriod();
}
else {
    halfAgg = RoundDown(lowerTimeFrameBarCount / 2, 0) * GetAggregationPeriod();
}

# Determine the position of each bar in respect to Higher Time Frame
def barStart = if modTime == 0 then 1 else 0;
def barEnd = if modTime >= (Time_Frame - aggPeriod) then 1 else 0;
#Find the middle bar in the lower timeframe
def midBar = if modTime == halfAgg then 1 else 0;
#If start or end of bar - used to draw side border of candle body
def openbar = if barStart or barEnd then 1 else 0;


#------------------------------------
# ADD CLOUDS
#------------------------------------
input addcloud = yes;

def side;
if modTime < modTime[1]
then {
    if side[1] == 1
    then {
        side = 2;
    }
    else {
        side = 1;
    }
} else {
    side = side[1];
}
def sider = side;
def doji = C == O;

### making stuff up here drawing the wick through the middle candle.
def nan = Double.NaN;
def up = C > O;


def ubh = if up and midBar then H else nan;
def ubc = if up and midBar then H else nan;
def ubo = if up and midBar then L else nan;
def ubl = if up and midBar then L else nan;

def dbh = if !up and !doji and midBar then H else nan;
def dbc = if !up and !doji and midBar then H else nan;
def dbo = if !up and !doji and midBar then L else nan;
def dbl = if !up and !doji and midBar then L else nan;

def djbh = if doji and midBar then H else nan;
def djbc = if doji and midBar then H else nan;
def djbo = if doji and midBar then L else nan;
def djbl = if doji and midBar then L else nan;

def sideuh = if up and openbar then H else nan;
def sideul = if up and openbar then L else nan;
def sidedh = if !up and !doji and openbar then H else nan;
def sidedl = if !up and !doji and openbar then L else nan;
def sidedjh = if doji and openbar then H else nan;
def sidedjl = if doji and openbar then L else nan;



#Draw Side of Body Green
AddChart(high = sideuh, low = sideul, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_GREEN);

#Draw Side of Body Red
AddChart(high = sidedh, low = sidedl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.LIGHT_RED);

#Draw Side of Body White
AddChart(high = sidedjh, low = sidedjl, open = NA, close = NA, type = ChartType.BAR, growcolor = Color.WHITE);



plot highs = H;
highs.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
highs.AssignValueColor(if O > C then Color.RED else Color.GREEN);

plot lows = L;
lows.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
lows.AssignValueColor(if O > C then Color.RED else Color.GREEN);

input show_cloud = yes;
DefineGlobalColor("Up", Color.LIGHT_GREEN);
DefineGlobalColor("Dn", Color.LIGHT_RED);

#Daily and Below Aggs
AddCloud(if Time_Frame >= AggregationPeriod.WEEK or !show_cloud or sider[1] != sider[0] then Double.NaN else if O < C then H else Double.NaN, L, GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if Time_Frame >= AggregationPeriod.WEEK or !show_cloud or sider[1] != sider[0] then Double.NaN else if O > C then H else Double.NaN, L, GlobalColor("Dn"), GlobalColor("Dn"));
AddCloud(if Time_Frame >= AggregationPeriod.WEEK or !show_cloud or sider != sider[-1] then Double.NaN else if O < C then H else Double.NaN, L, GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if Time_Frame >= AggregationPeriod.WEEK or !show_cloud or sider != sider[-1] then Double.NaN else if O > C then H else Double.NaN, L, GlobalColor("Dn"), GlobalColor("Dn"));

#Weekly and Monthly Aggs
def count = if GetWeek() != GetWeek()[1] then 1 else if count[1] <= 5 then count[1] + 1 else 1;
def countM = if GetMonth() != GetMonth()[1] then 1 else if GetMonth() then countM[1] + 1 else 1;

def r  = Between(count, 2, 4);
def rM = Between(countM, 2, 29);
AddCloud(if Time_Frame == AggregationPeriod.WEEK and r and O < C then H else Double.NaN, L , GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if Time_Frame == AggregationPeriod.WEEK and r and O > C then H else Double.NaN, L , GlobalColor("Dn"), GlobalColor("Dn"));
AddCloud(if Time_Frame == AggregationPeriod.MONTH and rM and O < C then H else Double.NaN, L , GlobalColor("Up"), GlobalColor("Up"));
AddCloud(if Time_Frame == AggregationPeriod.MONTH and rM and O > C then H else Double.NaN, L , GlobalColor("Dn"), GlobalColor("Dn"));

#------------------------------------
# ADD LABEL
#------------------------------------
input Show_Label = yes;
AddLabel(Show_Label, Concat(if Time_Frame < 3600000 then Time_Frame / 60000 + "m" else if Time_Frame < 86400000 then Time_Frame / 3600000 + "h" else if Time_Frame < 604800000 then Time_Frame / 86400000 + "D" else if Time_Frame < 2592000000 then Time_Frame / 604800000 + "Wk" else if Time_Frame < 31536000000 then Time_Frame / 2592000000 + "Mo" else Time_Frame / 31536000000 + "Yr", if Time_Frame then " CANDLES" else ""), Color.LIGHT_GRAY);

# end
 
Last edited by a moderator:
This modification seems to work better on daily chart with weekly or monthly
Thank you very much! This is awesome.
BTW, how do we modify the code and make it paint the high and low of only Tue and Wed on daily chart as shown:

ErDIQUe.png
 
Thank you very much! This is awesome.
BTW, how do we modify the code and make it paint the high and low of only Tue and Wed on daily chart as shown:

ErDIQUe.png

You can choose cloudcoloring and/or bubbles

Screenshot-2023-01-02-140807.png
Ruby:
def dow = GetDayOfWeek(GetYYYYMMDD());
def hi  = if dow == 2 then Max(high, high[-1]) else hi[1];
plot H  = if Between(dow, 2, 3) then hi else Double.NaN;
def lo  = if dow == 2 then Min(low, low[-1]) else lo[1];
plot L  = if Between(dow, 2, 3) then lo else Double.NaN;

input cloudcolor = no;
def color = if dow == 2 and high < high[-1]
            then 1
            else if dow == 2 and high > high[-1]
            then -1
            else color[1];
def g = color;
AddCloud( if cloudcolor and g == 1 then H else Double.NaN, L, Color.GREEN, Color.GREEN);
AddCloud( if cloudcolor and g == -1 then H else Double.NaN, L, Color.RED, Color.RED);
AddCloud(if !cloudcolor then H else Double.NaN, L);

input bubble = yes;
AddChartBubble(
bubble and dow == 2 and H,
H,
AsText(H) + "\n" + AsText(L),
if cloudcolor and  g == 1
then Color.GREEN
else if cloudcolor and g == -1
then Color.RED
else Color.WHITE);

H.AssignValueColor(if cloudcolor and  g == 1
then Color.GREEN
else if cloudcolor and g == -1
then Color.RED
else Color.WHITE);
L.AssignValueColor(if cloudcolor and  g == 1
then Color.GREEN
else if cloudcolor and g == -1
then Color.RED
else Color.WHITE);
 
Is possible to make this code work for the study as shown? Basically, I would like to paint a box between 9:30-10:30 (EST) showing H,L,O,C for this time period

GydAZDz.png
 
Is possible to make this code work for the study as shown? Basically, I would like to paint a box between 9:30-10:30 (EST) showing H,L,O,C for this time period

GydAZDz.png
IMO, you would be better off using one of the many opening range indicators you can find on this site. In general, they will draw horizontal lines across to the right after your desired time period has ended.
 
Thank you very much for your comment. I did find this working code. however, it draws the horizontal lines to the left not to the right. Can you help me to fix it?


---------------------------------------

input startRDR = 930;
input endRDR = 1030;
input highRDRLineEnd = 1600;
input tradeEntryStartTime = 1035;
input tradeEntryEndTime = 1545;
input activeDurtaion = 60; #60 minute
input isAddingVerticalLine = 0;

input tradeEntryStartTimeEST = 1030;
input tradeEntryEndTimeEST = 1345;

AddVerticalLine(isAddingVerticalLine == 1 and SecondsTillTime(startRDR) == 0, "Start ODR", Color.WHITE, Curve.SHORT_DASH);
AddVerticalLine(isAddingVerticalLine == 1 and SecondsTillTime(endRDR) == 0, "End ODR", Color.WHITE, Curve.SHORT_DASH);

#def isActive = SecondsFromTime(startRDR) >= 0 and SecondsFromTime(endRDR) <= 0;
def isActive = SecondsFromTime(startRDR) >= 0 and SecondsFromTime(endRDR) <= 0;
def isActive2 = SecondsFromTime(startRDR) >= 0 and SecondsFromTime(1035) <= 0;
def isTradeEntryRange = SecondsTillTime(tradeEntryStartTime) <= 0 and SecondsTillTime(tradeEntryEndTime) >=0;
def isInDrawRange = SecondsFromTime(1025)>=0 and SecondsFromTime(1100) <=0;
#collect all highs during the range
def allHighs = if isActive then high else Double.NaN;
#def allHighs = if SecondsTillTime(startRDR) ==0 then high else Double.NaN;

#alternative highs
def highRDRV2 = if SecondsTillTime(startRDR) == 0
#def highRDRv2 = if isActive
then high
else if isActive and high > highRDRV2[1]
then high
else highRDRV2[1];


#def staticValue = highRDRV2[1] + 0.0;
#plot lineTest = if isActive then 382.50 else Double.NaN;
#plot lineTest = staticValue;
#plot lineTest = if isActive then highRDRV2 else Double.NaN;

#pick the highest of all highs
def highRDR = HighestAll(allHighs);
#def highRDRV3 = HighestAll(highRDRv2);

#collect all lows during the range
def allLows = if isActive then low else Double.NaN;
#pick the lowest of all lows
def lowRDR = LowestAll(allLows);
#alternative lows
def lowRDRV2 = if SecondsTillTime(startRDR) == 0
then low
else if isActive and low < lowRDRV2[1]
then low
else lowRDRV2[1];

#AddLabel(yes, "staticValue: " + staticValue);
#AddLabel(yes, "SecondsTillTime: " + SecondsTillTime(2133));
#AddLabel(yes, "SecondsTillTime: " + SecondsTillTime(2134));
#AddLabel(yes, "SecondsFromTime: " + SecondsTillTime(930));
#collect all opens and closes
def allOpens = if isActive then open else Double.NaN;
def allCloses = if isActive then close else Double.NaN;

#pick the max between the highest of all opens and all closes
def highIRDR = Max(HighestAll(allOpens), HighestAll(allCloses));
#pick the min between the highest of all opens and all closes
def lowIRDR = Min(LowestAll(allOpens), LowestAll(allCloses));

#alternative for IRDR open and close
def highIRDRV2 = if SecondsTillTime(startRDR) == 0
then if open > close then open else close
else if isActive
then
if open > close and open > highIRDRV2[1] then open
else if open <= close and close > highIRDRV2[1] then close else highIRDRV2[1]
else highIRDRV2[1];

def lowIRDRV2 = if SecondsTillTime(startRDR) == 0
then if open < close then open else close
else if isActive
then
if open < close and open < lowIRDRV2[1] then open
else if open >= close and close < lowIRDRV2[1] then close else lowIRDRV2[1]
else lowIRDRV2[1];

def range = highIRDRV2 - lowIRDRV2;
def halfRange = range/2;
def midIRDR = highIRDRV2 - halfRange;

input entryType = {default IDRClose, DRClose};
def bullEntryCondition;
def bearEntryCondition;
def tradeEntryRange = if SecondsTillTime(tradeEntryStartTimeEST) <= 0 and SecondsTillTime(tradeEntryEndTimeEST) >= 0 then 1 else 0;
switch(entryType){
case DRClose:
bullEntryCondition = tradeEntryRange and close > highRDRV2 and close[1] <= highRDRV2;
bearEntryCondition = tradeEntryRange and close < lowRDRV2 and close[1] >= lowRDRV2;
case IDRClose:
bullEntryCondition = tradeEntryRange and close > highIRDRV2 and close[1] <= highIRDRV2;
bearEntryCondition = tradeEntryRange and close < lowIRDRV2 and close[1] >= lowIRDRV2;
}

def isBullish = if bullEntryCondition then 1 else if !tradeEntryRange then 0 else isBullish[1];

def isBearish = if bearEntryCondition then 1 else if !tradeEntryRange then 0 else isBearish[1];

#plot 5 lines: high, low, open and close for RDR range
#def myColor = GetColor(1);
#plot line1 = if isActive then highRDR else Double.NaN;
#AddLabel(yes, "high: " + highRDRV2[1]);
plot line1 = if isInDrawRange then highRDRV2 else Double.NaN;
#line1.SetdefaultColor(Color.CYAN);
line1.SetdefaultColor(GetColor(0));
#plot line12 = if isInDrawRange then highRDRV2 else Double.NaN;
#plot line12 = if isActive then allHighs else Double.NaN;
#plot line2 = if isActive then lowRDR else Double.NaN;
plot line2 = if isInDrawRange then lowRDRV2 else Double.NaN;
#line2.SetdefaultColor(Color.CYAN);
line2.SetdefaultColor(GetColor(0));
#plot line3 = if isActive then highIRDR else Double.NaN;
#plot line4 = if isActive then lowIRDR else Double.NaN;
plot line3 = if isInDrawRange then highIRDRV2 else Double.NaN;
line3.setStyle(Curve.Short_DASH);
line3.SetdefaultColor(Color.CYAN);
plot line4 = if isInDrawRange then lowIRDRV2 else Double.NaN;
line4.setStyle(Curve.Short_DASH);
line4.SetdefaultColor(Color.CYAN);

plot line5 = if isTradeEntryRange then midIRDR else Double.NaN;
line5.setpaintingStrategy(paintingStrategy.HORIZONTAL);
line5.setStyle(Curve.Short_DASH);
line5.SetdefaultColor(Color.CYAN);

#plot std levels
def upsideHalfSTD = highIRDRV2 + halfRange;
def upsideOneSTD = highIRDRV2 + range;
plot line6 = if isBullish and isTradeEntryRange then upsideHalfSTD else Double.NaN;
line6.setStyle(Curve.Short_DASH);
line6.SetdefaultColor(Color.WHITE);

plot line7 = if isBullish and isTradeEntryRange then upsideOneSTD else Double.NaN;
line7.setStyle(Curve.Short_DASH);
line7.SetdefaultColor(Color.WHITE);

def downsideHalfSTD = lowIRDRV2 - halfRange;
def downsideOneSTD = lowIRDRV2 - range;
plot line8 = if isBearish and isTradeEntryRange then downsideHalfSTD else Double.NaN;
line8.setStyle(Curve.Short_DASH);
line8.SetdefaultColor(Color.WHITE);

plot line9 = if isBearish and isTradeEntryRange then downsideOneSTD else Double.NaN;
line9.setStyle(Curve.Short_DASH);
line9.SetdefaultColor(Color.WHITE);

#def textTmp = if isBullish then “Bullish” else “Bearish” ;
AddLabel(yes, if isBullish then “Bullish” else if isBearish then “Bearish” else "Neutral",
if isBullish then Color.GREEN else if isBearish then Color.RED else Color.WHITE);

AddVerticalLine(SecondsFromTime(startRDR) == 0, AsText(startRDR), Color.WHITE);
AddVerticalLine(SecondsFromTime(endRDR) == 0, asText(endRDR), Color.WHITE);
-------------------------------
 
Is possible to make this code work for the study as shown? Basically, I would like to paint a box between 9:30-10:30 (EST) showing H,L,O,C for this time period

GydAZDz.png

This starts at Regular Trading Start Time and contines until Input Minutes past the Start Time

Screenshot-2023-01-03-135300.png

Ruby:
#HighLow_Cloud_x_Minutes
input coverHLOnly = yes;
input minutes     = 60;

def toPaint = if GetTime() >= RegularTradingStart(GetYYYYMMDD()) and
                 GetTime() <= RegularTradingStart(GetYYYYMMDD()) + minutes * 60 * 1000 and
                 GetTime() <= RegularTradingEnd(GetYYYYMMDD())
              then 1 else 0;

def dayh    = if toPaint[1] == 0 and toPaint == 1
              then high
              else if toPaint == 1
              then Max(high, dayh[1])
              else 0;
def dayhi   = if toPaint[1] == 1 and toPaint == 0
              then dayh[1]
              else dayhi[1];
plot H       = if toPaint
              then if coverHLOnly == no
                   then Double.POSITIVE_INFINITY
                   else dayhi[-minutes / (GetAggregationPeriod() / 60000)]     
              else Double.NaN;
H.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
H.SetDefaultColor(Color.WHITE);
H.SetLineWeight(3);

def dayl    = if toPaint[1] == 0 and toPaint == 1
              then low
              else if toPaint == 1
              then Min(low, dayl[1]) else 0 ;
def daylo   = if toPaint[1] == 1 and toPaint == 0
              then dayl[1]
              else daylo[1];
plot L      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else daylo[-minutes / (GetAggregationPeriod() / 60000)]         
              else Double.NaN;
L.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
L.SetDefaultColor(Color.WHITE);
L.SetLineWeight(3);

def dayo    = if toPaint[1] == 0 and toPaint == 1
              then open
              else dayo[1] ;
def dayop   = if toPaint[1] == 1 and toPaint == 0
              then dayo[1]
              else dayop[1];
plot O      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else dayop[-minutes / (GetAggregationPeriod() / 60000)]         
              else Double.NaN;
O.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
O.SetDefaultColor(Color.WHITE);
O.SetLineWeight(3);

def daycl   = if toPaint[1] == 1 and toPaint == 0
              then close[1]
              else daycl[1];
plot C      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else daycl[-minutes / (GetAggregationPeriod() / 60000)]         
              else Double.NaN;
C.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
C.SetDefaultColor(Color.WHITE);
C.SetLineWeight(3);

AddCloud(H, L,   Color.LIGHT_GRAY, Color.LIGHT_GRAY);

input showverticals = yes;
AddVerticalLine(showverticals and GetTime() crosses above RegularTradingStart(GetYYYYMMDD()), "Start Time", color = Color.WHITE);
AddVerticalLine(showverticals and GetTime() crosses above RegularTradingStart(GetYYYYMMDD()) + minutes * 60 * 1000, minutes + " Minutes Past Start Time", color = Color.WHITE);
 
Last edited:
Thank you so much. Your coding skills are amazing, my friend. Is possible to add 4 horizontal lines for High, Low, Open, Close for that time period?

UMhV7OT.png
 
This starts at Regular Trading Start Time and contines until Input Minutes past the Start Time

Screenshot-2023-01-03-135300.png

Ruby:
#HighLow_Cloud_x_Minutes
input coverHLOnly = yes;
input minutes     = 60;

def toPaint = if GetTime() >= RegularTradingStart(GetYYYYMMDD()) and
                 GetTime() <= RegularTradingStart(GetYYYYMMDD()) + minutes * 60 * 1000 and
                 GetTime() <= RegularTradingEnd(GetYYYYMMDD())
              then 1 else 0;

def dayh    = if toPaint[1] == 0 and toPaint == 1
              then high
              else if toPaint == 1
              then Max(high, dayh[1])
              else 0;
def dayhi   = if toPaint[1] == 1 and toPaint == 0
              then dayh[1]
              else dayhi[1];
plot H       = if toPaint
              then if coverHLOnly == no
                   then Double.POSITIVE_INFINITY
                   else dayhi[-minutes / (GetAggregationPeriod() / 60000)]    
              else Double.NaN;
H.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
H.SetDefaultColor(Color.WHITE);
H.SetLineWeight(3);

def dayl    = if toPaint[1] == 0 and toPaint == 1
              then low
              else if toPaint == 1
              then Min(low, dayl[1]) else 0 ;
def daylo   = if toPaint[1] == 1 and toPaint == 0
              then dayl[1]
              else daylo[1];
plot L      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else daylo[-minutes / (GetAggregationPeriod() / 60000)]        
              else Double.NaN;
L.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
L.SetDefaultColor(Color.WHITE);
L.SetLineWeight(3);

def dayo    = if toPaint[1] == 0 and toPaint == 1
              then open
              else dayo[1] ;
def dayop   = if toPaint[1] == 1 and toPaint == 0
              then dayo[1]
              else dayop[1];
plot O      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else dayop[-minutes / (GetAggregationPeriod() / 60000)]        
              else Double.NaN;
O.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
O.SetDefaultColor(Color.WHITE);
O.SetLineWeight(3);

def daycl   = if toPaint[1] == 1 and toPaint == 0
              then close[1]
              else daycl[1];
plot C      = if toPaint
              then if coverHLOnly == no
                   then Double.NEGATIVE_INFINITY
                   else daycl[-minutes / (GetAggregationPeriod() / 60000)]        
              else Double.NaN;
C.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
C.SetDefaultColor(Color.WHITE);
C.SetLineWeight(3);

AddCloud(H, L,   Color.LIGHT_GRAY, Color.LIGHT_GRAY);

input showverticals = yes;
AddVerticalLine(showverticals and GetTime() crosses above RegularTradingStart(GetYYYYMMDD()), "Start Time", color = Color.WHITE);
AddVerticalLine(showverticals and GetTime() crosses above RegularTradingStart(GetYYYYMMDD()) + minutes * 60 * 1000, minutes + " Minutes Past Start Time", color = Color.WHITE);
I'm very impressed by your coding skills. Everything I threw at you; you came back with an answer at ease!
 
Hi @SleepyZ , just thinking out loud if it is even possible to have renko / range chart as overlay?

This link might help https://usethinkscript.com/threads/multi-timeframe-candles-overlay-for-thinkorswim.1425/post-62110

This overlay is based upon bars, which should work on most charts, versus time, which does not work well on renko/range charts.

Here is a 2 tick renko chart with the bars set to 10 using the code in the link. You can turn the volume shown on/off.

 

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

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
381 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