Happy Holidays my fellow traders. Thought that I would share my favorite new chart set-up. IMHO, it does not get much easier than this.
I highly recommend that you use this set-up on a computer that has at least 16 GM of memory. And 1 TB of solid state drive. The two zone studies have a combination of over 1000 lines of code. Thus rendering this set-up a serious resource hog.
A special shout out goes to @samer800 for taking the time to convert these two zone studies to ThinkScript. And of course for all of the many other studies he has converted over the past few years.
Alas, here is my favorite new set-up. Enjoy!
WS Slingshot Chart Setup
shared chart link: http://tos.mx/!bX75BLb9 MUST follow these instructions for loading shared links.
I highly recommend that you use this set-up on a computer that has at least 16 GM of memory. And 1 TB of solid state drive. The two zone studies have a combination of over 1000 lines of code. Thus rendering this set-up a serious resource hog.
A special shout out goes to @samer800 for taking the time to convert these two zone studies to ThinkScript. And of course for all of the many other studies he has converted over the past few years.
Alas, here is my favorite new set-up. Enjoy!
WS Slingshot Chart Setup

shared chart link: http://tos.mx/!bX75BLb9 MUST follow these instructions for loading shared links.
Code:
# WildersSmoothing
# Charles Schwab & Co. (c) 2008-2024
# Converted to a SlingShot study by ZupDog
input price = close;
input fastlength = 40;
input slowlength = 45;
input displace = 0;
input Paintbars = no;
input Paintbars2 = no;
input Paintbars3 = no;
input showverticals = no;
input showverticals2 = no;
input showcloud = yes;
input Label = no;
input Label2 = no;
input Label3 = no;
def fasthalflength = Ceil(fastlength / 2);
def fastsqrtlength = Ceil(Sqrt(fastlength));
def fastval = 2 * WildersAverage(price, fasthalflength) - WildersAverage(price, fastlength);
def slowhalflength = Ceil(slowlength / 2);
def slowsqrtlength = Ceil(Sqrt(slowlength));
def slowval = 2 * WildersAverage(price, slowhalflength) - WildersAverage(price, slowlength);
plot fastWS = WildersAverage(fastval, fastsqrtlength)[-displace];
fastWS.SetStyle(Curve.FIRM);
fastWS .DefineColor("Up", GetColor(1));
fastWS .DefineColor("Down", GetColor(0));
fastWS .AssignValueColor(if fastWS > fastWS[1] then fastWS .Color("Up") else fastWS .Color("Down"));
plot slowWS = WildersAverage(slowval, slowsqrtlength)[-displace];
slowWS.SetStyle(Curve.FIRM);
slowWS .DefineColor("Up", GetColor(1));
slowWS .DefineColor("Down", GetColor(0));
slowWS .AssignValueColor(if slowWS > slowWS [1] then slowWS .Color("Up") else slowWS .Color("Down"));
AddVerticalLine(showverticals and crosses (slowWS , slowWS[1], CrossingDirection.ABOVE), " WS SlingShot ", Color.CYAN, 3);
AddVerticalLine(showverticals and crosses (slowWS , slowWS[1], CrossingDirection.BELOW), "WS SlingShot ", Color.YELLOW, 3);
AddVerticalLine(showverticals2 and Crosses (fastWS, slowWS, CrossingDirection.ABOVE), " WS SlingShot Crossover", Color.BLUE, 3);
AddVerticalLine(showverticals2 and Crosses (fastWS, slowWS, CrossingDirection.BELOW), "WS SlingShot Crossover", Color.RED, 3);
AddCloud(if showcloud and fastWS then slowWS else Double.NaN, fastWS, Color.YELLOW, Color.CYAN);
#Alert( (( fastWMA crosses above slowWMA ) ) , " fastAvgType crossed above slowAvgType", Alert.BAR, Sound.Ring );
#Alert( (( fastWMA crosses below slowWMA ) ) , " fastAvgType crossed below slowAvgType", Alert.BAR, Sound.Ring );
DefineGlobalColor("Positive", Color.BLUE);
DefineGlobalColor("Negative", Color.DARK_RED);
rec countup = if fastWS > fastWS[1] then countup[1] + 1 else 0;
rec countdn = if fastWS < fastWS[1] then countdn[1] - 1 else 0;
AddLabel(Label, Concat("WS_SlingShot ", if fastWS > fastWS[1] then countup else countdn), if fastWS > fastWS[1] then Color.GREEN else if fastWS < fastWS[1] then CreateColor(255,153,255) else Color.WHITE );
AssignPriceColor(if !Paintbars
then Color.CURRENT
else if fastWS > fastWS[1]
then GlobalColor("Positive")
else GlobalColor("Negative"));
## Paintbars 2
rec countup2 = if slowWS > slowWS[1] then countup2[1] + 1 else 0;
rec countdn2 = if slowWS < slowWS[1] then countdn2[1] - 1 else 0;
AddLabel(Label2, Concat("WS_SlingShot ", if slowWS > slowWS[1] then countup2 else countdn2), if slowWS > slowWS[1] then Color.GREEN else if slowWS < slowWS[1] then CreateColor(255,153,255) else Color.WHITE );
AssignPriceColor(if !Paintbars2
then Color.CURRENT
else if slowWS > slowWS[1]
then GlobalColor("Positive")
else GlobalColor("Negative"));
## Paintbars 3
rec countup3 = if fastWS > slowWS then countup3[1] + 1 else 0;
rec countdn3 = if fastWS < slowWS then countdn3[1] - 1 else 0;
AddLabel(Label3, Concat("WS_SlingShot ", if fastWS > slowWS then countup3 else countdn3), if fastWS > slowWS then Color.GREEN else if fastWS < slowWS then CreateColor(255,153,255) else Color.WHITE );
AssignPriceColor(if !Paintbars3
then Color.CURRENT
else if fastWS > slowWS
then GlobalColor("Positive")
else GlobalColor("Negative"));
Last edited by a moderator: