Trend Quality Indicator (With Alert)

BenTen

Administrative
Staff member
Staff
VIP
Lifetime
This is a Trend Quality Indicator for ThinkorSwim shared by Anupam Bagchi who is a data scientist. This indicator is useful for showing buying, selling, and sideways action.
  • Green = buying pressure
  • Selling = selling pressure
  • Yellow = sideways

hzUhBIW.png


thinkScript Code

Rich (BB code):
declare lower;

input fastLength = 7;
input slowLength = 15;
input trendLength = 4;
input noiseType = {default linear, squared};
input noiseLength = 250;
input correctionFactor = 2;
input ThresholdValue = 3;
input AlertEnabled = {true, default false};

def smf = 2 / (1 + trendLength);

def reversal = TrendPeriods(fastLength, slowLength);

rec cpc = if isNaN(reversal[1]) then 0 else if reversal[1] != reversal then 0 else cpc[1] + close - close[1];

rec trend = if isNaN(reversal[1]) then 0 else if reversal[1] != reversal then 0 else trend[1] * (1 - smf) + cpc * smf;

def noise;
def diff = AbsValue(cpc - trend);
switch(noiseType) {
case linear:
    noise = correctionFactor * Average(diff, noiseLength);
case squared:
    noise = correctionFactor * Sqrt(Average(diff*diff, noiseLength));
}

plot TQ = if noise == 0 then 0 else trend / noise;
plot ZeroLine = 0;

TQ.SetPaintingStrategy(PaintingStrategy.Histogram);
TQ.SetLineWeight(3);
TQ.DefineColor("Positive", Color.UPTICK);
TQ.DefineColor("Negative", Color.DOWNTICK);
TQ.DefineColor("Neutral", Color.YELLOW);
TQ.AssignValueColor(if TQ > ThresholdValue then TQ.color("Positive") else if TQ < -ThresholdValue then TQ.color("Negative") else TQ.color("Neutral"));
ZeroLine.SetDefaultColor(GetColor(5));

def crossthresholdup = TQ > ThresholdValue && TQ[1] <= ThresholdValue && AlertEnabled;
def crossthresholddown = TQ < -ThresholdValue && TQ[1] >= -ThresholdValue && AlertEnabled;
alert(crossthresholdup, "Trend Quality just crossed above threshold", Alert.BAR, Sound.DING);
alert(crossthresholddown, "Trend Quality just crossed below threshold", Alert.BAR, Sound.DING);

Shareable Link

Original: https://tos.mx/Drcgp5

Modified: https://tos.mx/wbZ5TC
 
Last edited:

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

I use the Trend Quality indicator and I wanted an MTF version. I had some help with this, but it's not working correctly and I'm not sure why. Seems the second time frame is always incorrect. I wonder if anyone has an idea what's wrong.
Code:
declare lower;
declare zerobase;

input timeFrame1 = aggregationPeriod.HOUR;
input timeFrame2 = aggregationPeriod.TWO_HOURS;
input timeFrame3 = aggregationPeriod.FOUR_HOURS;
input timeFrame4 = aggregationPeriod.DAY;
input timeFrame5 = aggregationPeriod.TWO_DAYS;

input fastLength = 7;
input slowLength = 15;
input trendLength = 4;
input noiseType = {default linear, squared};
input noiseLength = 250;
input correctionFactor = 2;

assert(trendLength > 0, "'trend length' must be positive: " + trendLength);
assert(correctionFactor > 0, "'correction factor' must be positive: " + correctionFactor);

script TrendQuality {

input timeFrame = aggregationPeriod.HOUR;
input fastLength = 7;
input slowLength = 15;
input trendLength = 4;
input noiseType = {default linear, squared};
input noiseLength = 250;
input correctionFactor = 2;

def smf = 2 / (1 + trendLength);
def reversal = TrendPeriods(fastLength, slowLength);
def close = close(period = timeFrame);
def cpc = if isNaN(reversal[1]) then 0 else if reversal[1] != reversal then 0 else cpc[1] + close - close[1];

def trend = if isNaN(reversal[1]) then 0 else if reversal[1] != reversal then 0 else trend[1] * (1 - smf) + cpc * smf;

def noise;
def diff = AbsValue(cpc - trend);
switch(noiseType) {
case linear:
    noise = correctionFactor * Average(diff, noiseLength);
case squared:
    noise = correctionFactor * Sqrt(Average(diff*diff, noiseLength));
}

plot TQ = if noise == 0 then 0 else trend / noise;}

def tf1 = TrendQuality(timeFrame1, fastLength, slowLength, trendLength, noiseType, noiseLength, correctionFactor).TQ;
def tf2 = TrendQuality(timeFrame2, fastLength, slowLength, trendLength, noiseType, noiseLength, correctionFactor).TQ;
def tf3 = TrendQuality(timeFrame3, fastLength, slowLength, trendLength, noiseType, noiseLength, correctionFactor).TQ;
def tf4 = TrendQuality(timeFrame4, fastLength, slowLength, trendLength, noiseType, noiseLength, correctionFactor).TQ;
def tf5 = TrendQuality(timeFrame5, fastLength, slowLength, trendLength, noiseType, noiseLength, correctionFactor).TQ;

plot MTF1 = if IsNaN(close) then double.NaN else 1;
plot MTF2 = if IsNaN(close) then double.NaN else 2;
plot MTF3 = if IsNaN(close) then double.NaN else 3;
plot MTF4 = if IsNaN(close) then double.NaN else 4;
plot MTF5 = if IsNaN(close) then double.NaN else 5;

MTF1.setPaintingStrategy(PaintingStrategy.POINTS);
MTF2.setPaintingStrategy(PaintingStrategy.POINTS);
MTF3.setPaintingStrategy(PaintingStrategy.POINTS);
MTF4.setPaintingStrategy(PaintingStrategy.POINTS);
MTF5.setPaintingStrategy(PaintingStrategy.POINTS);

MTF1.setLineWeight(5);
MTF2.setLineWeight(5);
MTF3.setLineWeight(5);
MTF4.setLineWeight(5);
MTF5.setLineWeight(5);

MTF1.hideBubble();
MTF2.hideBubble();
MTF3.hideBubble();
MTF4.hideBubble();
MTF5.hideBubble();

MTF1.hideTitle();
MTF2.hideTitle();
MTF3.hideTitle();
MTF4.hideTitle();
MTF5.hideTitle();

defineGlobalColor("UpTrend", Color.GREEN);
defineGlobalColor("DownTrend", Color.MAGENTA);

MTF1.AssignValueColor(if TF1 > 0 then globalColor("UpTrend") else globalColor("DownTrend"));
MTF2.AssignValueColor(if TF2 > 0 then globalColor("UpTrend") else globalColor("DownTrend"));
MTF3.AssignValueColor(if TF3 > 0 then globalColor("UpTrend") else globalColor("DownTrend"));
MTF4.AssignValueColor(if TF4 > 0 then globalColor("UpTrend") else globalColor("DownTrend"));
MTF5.AssignValueColor(if TF5 > 0 then globalColor("UpTrend") else globalColor("DownTrend"));
 
Last edited by a moderator:
Hello Ben - just wanted to say I've been using this indicator and I've been really impressed by it! Helps me stay in trades longer on upswings. Thank you for posting it.
 
@Ian_Tai Not tried the code but just looking at it seems it is based on moving averages. So looks like you need to apply your aggs to the MAs. And then plot those to have some idea what you are getting. Looks like you are only plotting TQ.
The plot MTF1 type plots do not look to be defined.
 
@Ian_Tai I am also interested in this MTF indicator. I have taken a look at this but my code experience is limited. Take a look at the Trend Magic indicator from Tom to see if you can learn anything from his code.
Code:
# Trend Magic MTF
# tomsk
# 11.26.2019

# V1.0 - 08.08.2019 - Horserider - Added MTF to Trend Magic
# V1.1 - 11.26.2019 - tomsk      - Optimized code structure, removed duplicate variables
# V1.2 - 11.26.2019 - tomsk      - Converted this study to a lower study with MTF triangles

declare lower;

# GLOBAL DEFINITIONS

DefineGlobalColor("TrendUp", CreateColor(0, 254, 30));
DefineGlobalColor("TrendDown", CreateColor(255, 3, 2));

input agg = AggregationPeriod.FIFTEEN_MIN;
input agg2 = AggregationPeriod.THIRTY_MIN;
input agg3 = AggregationPeriod.HOUR;
input agg4 = AggregationPeriod.FOUR_HOURS;
input agg5 = AggregationPeriod.DAY;

input lengthCCI = 50;
input lengthATR = 5;
input AtrFactor = 0.7;

input DotSize = 3;
input n = 3;

def n1  = n + 1;

# AGGREGATION 1

def c = close(period = agg);
def h = high(period = agg);
def l = low(period = agg);
def pricedata = HL2(period = agg);
def ATRcci = Average(TrueRange(h, c, l), lengthATR) * AtrFactor;
def price = c + l + h;
def linDev = lindev(price, lengthCCI);
def CCI = if lindev == 0 then 0 else (price - Average(price, lengthCCI)) / linDev / 0.015;
def MT1 = if CCI > 0
          then Max(MT1[1], pricedata - ATRcci)
          else Min(MT1[1], pricedata + ATRcci);
plot MT1_Dot = if IsNaN(close) then Double.NaN else 1;
MT1_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT1_Dot.SetLineWeight(DotSize);
MT1_Dot.AssignValueColor(if c < MT1 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 1, (agg/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 2

def c2 = close(period = agg2);
def h2 = high(period = agg2);
def l2 = low(period = agg2);
def pricedata2 = HL2(period = agg2);
def ATRcci2 = Average(TrueRange(h2, c2, l2), lengthATR) * AtrFactor;
def price2 = c2 + l2 + h2;
def linDev2 = lindev(price2, lengthCCI);
def CCI2 = if linDev2 == 0 then 0 else (price2 - Average(price2, lengthCCI)) / linDev2 / 0.015;
def MT2 = if CCI2 > 0
          then Max(MT2[1], pricedata2 - ATRcci2)
          else Min(MT2[1], pricedata2 + ATRcci2);
plot MT2_Dot = if IsNaN(close) then Double.NaN else 2;
MT2_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT2_Dot.SetLineWeight(DotSize);
MT2_Dot.AssignValueColor(if c2 < MT2 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 2, (agg2/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 3

def c3 = close(period = agg3);
def h3 = high(period = agg3);
def l3 = low(period = agg3);
def pricedata3 = HL2(period = agg3);

def ATRcci3 = Average(TrueRange(h3, c3, l3), lengthATR) * AtrFactor;
def price3 = c3 + l3 + h3;
def linDev3 = lindev(price3, lengthCCI);
def CCI3 = if linDev3 == 0 then 0 else (price3 - Average(price3, lengthCCI)) / linDev3 / 0.015;
def MT3 = if CCI3 > 0
          then Max(MT3[1], pricedata3 - ATRcci3)
          else Min(MT3[1], pricedata3 + ATRcci3);
plot MT3_Dot = if IsNaN(close) then Double.NaN else 3;
MT3_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT3_Dot.SetLineWeight(DotSize);
MT3_Dot.AssignValueColor(if c3 < MT3 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 3, (agg3/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 4

def c4 = close(period = agg4);
def h4 = high(period = agg4);
def l4 = low(period = agg4);
def pricedata4 = HL2(period = agg4);

def ATRcci4 = Average(TrueRange(h4, c4, l4), lengthATR) * AtrFactor;
def price4 = c4 + l4 + h4;
def linDev4 = lindev(price4, lengthCCI);
def CCI4 = if linDev4 == 0 then 0 else (price4 - Average(price4, lengthCCI)) / linDev4 / 0.015;
def MT4 = if CCI4 > 0
          then Max(MT4[1], pricedata4 - ATRcci4)
          else Min(MT4[1], pricedata4 + ATRcci4);
plot MT4_Dot = if IsNaN(close) then Double.NaN else 4;
MT4_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT4_Dot.SetLineWeight(DotSize);
MT4_Dot.AssignValueColor(if c4 < MT4 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 4, (agg4/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 5

def c5 = close(period = agg5);
def h5 = high(period = agg5);
def l5 = low(period = agg5);
def pricedata5 = HL2(period = agg5);

def ATRcci5 = Average(TrueRange(h5, c5, l5), lengthATR) * AtrFactor;
def price5 = c5 + l5 + h5;
def linDev5 = lindev(price5, lengthCCI);
def CCI5 = if linDev5 == 0 then 0 else (price5 - Average(price5, lengthCCI)) / linDev5 / 0.015;
def MT5 = if CCI5 > 0
          then Max(MT5[1], pricedata5 - ATRcci5)
          else Min(MT5[1], pricedata5 + ATRcci5);
plot MT5_Dot = if IsNaN(close) then Double.NaN else 5;
MT5_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT5_Dot.SetLineWeight(DotSize);
MT5_Dot.AssignValueColor(if c5 < MT5 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 5, (agg5/1000/60) + " min", Color.Yellow, yes);
# End Trend Magic MTF
 
@BenTen - question, any chance you could edit/adjust the code to remove the selling pressure (red), only leaving the yellow and green (sideways and buying). I have been trying to do it on my own for a few hours but I am failing miserably.
 
@Ian_Tai I am also interested in this MTF indicator. I have taken a look at this but my code experience is limited. Take a look at the Trend Magic indicator from Tom to see if you can learn anything from his code.
Code:
# Trend Magic MTF
# tomsk
# 11.26.2019

# V1.0 - 08.08.2019 - Horserider - Added MTF to Trend Magic
# V1.1 - 11.26.2019 - tomsk      - Optimized code structure, removed duplicate variables
# V1.2 - 11.26.2019 - tomsk      - Converted this study to a lower study with MTF triangles

declare lower;

# GLOBAL DEFINITIONS

DefineGlobalColor("TrendUp", CreateColor(0, 254, 30));
DefineGlobalColor("TrendDown", CreateColor(255, 3, 2));

input agg = AggregationPeriod.FIFTEEN_MIN;
input agg2 = AggregationPeriod.THIRTY_MIN;
input agg3 = AggregationPeriod.HOUR;
input agg4 = AggregationPeriod.FOUR_HOURS;
input agg5 = AggregationPeriod.DAY;

input lengthCCI = 50;
input lengthATR = 5;
input AtrFactor = 0.7;

input DotSize = 3;
input n = 3;

def n1  = n + 1;

# AGGREGATION 1

def c = close(period = agg);
def h = high(period = agg);
def l = low(period = agg);
def pricedata = HL2(period = agg);
def ATRcci = Average(TrueRange(h, c, l), lengthATR) * AtrFactor;
def price = c + l + h;
def linDev = lindev(price, lengthCCI);
def CCI = if lindev == 0 then 0 else (price - Average(price, lengthCCI)) / linDev / 0.015;
def MT1 = if CCI > 0
          then Max(MT1[1], pricedata - ATRcci)
          else Min(MT1[1], pricedata + ATRcci);
plot MT1_Dot = if IsNaN(close) then Double.NaN else 1;
MT1_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT1_Dot.SetLineWeight(DotSize);
MT1_Dot.AssignValueColor(if c < MT1 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 1, (agg/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 2

def c2 = close(period = agg2);
def h2 = high(period = agg2);
def l2 = low(period = agg2);
def pricedata2 = HL2(period = agg2);
def ATRcci2 = Average(TrueRange(h2, c2, l2), lengthATR) * AtrFactor;
def price2 = c2 + l2 + h2;
def linDev2 = lindev(price2, lengthCCI);
def CCI2 = if linDev2 == 0 then 0 else (price2 - Average(price2, lengthCCI)) / linDev2 / 0.015;
def MT2 = if CCI2 > 0
          then Max(MT2[1], pricedata2 - ATRcci2)
          else Min(MT2[1], pricedata2 + ATRcci2);
plot MT2_Dot = if IsNaN(close) then Double.NaN else 2;
MT2_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT2_Dot.SetLineWeight(DotSize);
MT2_Dot.AssignValueColor(if c2 < MT2 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 2, (agg2/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 3

def c3 = close(period = agg3);
def h3 = high(period = agg3);
def l3 = low(period = agg3);
def pricedata3 = HL2(period = agg3);

def ATRcci3 = Average(TrueRange(h3, c3, l3), lengthATR) * AtrFactor;
def price3 = c3 + l3 + h3;
def linDev3 = lindev(price3, lengthCCI);
def CCI3 = if linDev3 == 0 then 0 else (price3 - Average(price3, lengthCCI)) / linDev3 / 0.015;
def MT3 = if CCI3 > 0
          then Max(MT3[1], pricedata3 - ATRcci3)
          else Min(MT3[1], pricedata3 + ATRcci3);
plot MT3_Dot = if IsNaN(close) then Double.NaN else 3;
MT3_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT3_Dot.SetLineWeight(DotSize);
MT3_Dot.AssignValueColor(if c3 < MT3 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 3, (agg3/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 4

def c4 = close(period = agg4);
def h4 = high(period = agg4);
def l4 = low(period = agg4);
def pricedata4 = HL2(period = agg4);

def ATRcci4 = Average(TrueRange(h4, c4, l4), lengthATR) * AtrFactor;
def price4 = c4 + l4 + h4;
def linDev4 = lindev(price4, lengthCCI);
def CCI4 = if linDev4 == 0 then 0 else (price4 - Average(price4, lengthCCI)) / linDev4 / 0.015;
def MT4 = if CCI4 > 0
          then Max(MT4[1], pricedata4 - ATRcci4)
          else Min(MT4[1], pricedata4 + ATRcci4);
plot MT4_Dot = if IsNaN(close) then Double.NaN else 4;
MT4_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT4_Dot.SetLineWeight(DotSize);
MT4_Dot.AssignValueColor(if c4 < MT4 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 4, (agg4/1000/60) + " min", Color.Yellow, yes);

# AGGREGATION 5

def c5 = close(period = agg5);
def h5 = high(period = agg5);
def l5 = low(period = agg5);
def pricedata5 = HL2(period = agg5);

def ATRcci5 = Average(TrueRange(h5, c5, l5), lengthATR) * AtrFactor;
def price5 = c5 + l5 + h5;
def linDev5 = lindev(price5, lengthCCI);
def CCI5 = if linDev5 == 0 then 0 else (price5 - Average(price5, lengthCCI)) / linDev5 / 0.015;
def MT5 = if CCI5 > 0
          then Max(MT5[1], pricedata5 - ATRcci5)
          else Min(MT5[1], pricedata5 + ATRcci5);
plot MT5_Dot = if IsNaN(close) then Double.NaN else 5;
MT5_Dot.SetPaintingStrategy(PaintingStrategy.TRIANGLES);
MT5_Dot.SetLineWeight(DotSize);
MT5_Dot.AssignValueColor(if c5 < MT5 then GlobalColor("TrendDown") else GlobalColor("TrendUp"));
AddChartBubble(!IsNaN(close[n1]) and IsNaN(close[n]), 5, (agg5/1000/60) + " min", Color.Yellow, yes);
# End Trend Magic MTF


Can anyone elaborate on how to properly use this indicator? Thank you.
 
I've been tinkering with this indicator for a bit, and I've noticed that it occasionally comes up blank. Why is that?
 
@Kimberly sometimes the best way to see the value of an indicator is to load on your chart and play with it rather than have someone tell you the value. You may gain more than someone else’s interpretation.
@Kimberly sometimes the best way to see the value of an indicator is to load on your chart and play with it rather than have someone tell you the value. You may gain more than someone else’s interpretation.

I had already done that. As someone new to trading I was simply asking for someone to elaborate on its use. My question was in reference to Trend Magic MTF.
 
@Kimberly The idea of any MTF study is to see on one chart time frame what is happening on a different chart time frames. An attempt to eliminate needing two or three different time frame charts open. With most studies turning green or red indicates the direction. It follows with a MTF study if all are turning green or red it simply means the current direction has lasted for an amount of time to include all the specified time frames. Maybe that suggests a bigger trend in that direction, maybe not and direction may change on the next bar.
So the suggestion (dinodotcom)of loading an indicator and watching it is a good one. The best teacher can be just watching the market and how it moves. Add indicators, watch. Look for patterns, watch. Time will let you better understand how it all fits together.
 
@Kimberly The idea of any MTF study is to see on one chart time frame what is happening on a different chart time frames. An attempt to eliminate needing two or three different time frame charts open. With most studies turning green or red indicates the direction. It follows with a MTF study if all are turning green or red it simply means the current direction has lasted for an amount of time to include all the specified time frames. Maybe that suggests a bigger trend in that direction, maybe not and direction may change on the next bar.
So the suggestion (dinodotcom)of loading an indicator and watching it is a good one. The best teacher can be just watching the market and how it moves. Add indicators, watch. Look for patterns, watch. Time will let you better understand how it all fits together.

@horserider, Thank you for your response. It is truly appreciated. I have a better understanding. I plan on having this loaded tomorrow and I will watch it's behavior.
 
This is an overall interesting thread as I myself have been looking at the Trend Quality indicator (no access to the code), but found that it has a lag on the reset with no way to modify the code...so I left it alone. With @BenTen posting the code above, I am hopeful to improve on the reset feature of this indicator above. But before doing so, has anyone here attempted to improve the reset of this indicator so that it resets right before the high point and right before the low point as illustrated on this screenshot? (The screenshot was taken from my Tradestation Platform using a specialized indicator....no access to the source code). If you've noticed the Trend Quality Indicator resets several bars after the trend is over. This is not good as it causes severe draw downs! I've illustrated below with vertical dashed-lined how it should reset. Any thoughts on how to improve the TQI would be appreciated.
NQ1-M-Reset.jpg
 
Based on initial testing, I find MTF Trend Quality is a good indicator to confirm the direction of the trend, if multiple timeframe agree, generally provides forecast of potential direction. I been looking at it in a intermediate timeframe (days to weeks) to confirm cycle analysis. I haven't had change to observe this indicator series in lower time frames yet.
 

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
225 Online
Create Post

Similar threads

Similar threads

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