Multi-timeframe (MTF) Moving Average Indicator for ThinkorSwim

Wondering if I could plot the 15 min 30 min 1 hour 4 hour and daily Simple moving average on 1 chart?
If you are asking does the ToS platform allow you to add the same study 5x to a chart, the answer is yes.
  • Add the study 5x
  • In settings change the timeframes and change colors on the the plots.

Keep in mind that the ToS platform only allows for higher timeframes to be placed on a chart. Therefore, the chart you are using needs to be a timeframe that is less than 15min.
 
I really need help...
1) I want my chart to alert me when the current price is about to approach the EMA... However the alert just goes off even if the price is no where near the EMA
2) The script also displays the EMA for everyday, but I really only need to see the EMA for today and/or yesterday...

Code:
input Period = aggregationPeriod.DAY;
input AvgType = averageType.EXPONENTIAL;
input Length = 8;
input priceclose = close;

plot AVG = MovingAverage(AvgType, close(period = Period), Length);
AVG.setdefaultcolor(color.yellow);

input TimeFrame2 = {default day, week, month};
def lastBar = !IsNaN(close) && IsNaN(close[-1]);
def beyondLastBar = IsNaN(close[-1]) and IsNaN(close);
def PrevDayClose = if !beyondLastBar then Highest(close(period = TimeFrame2), 1)[1] else PrevDayClose[1];
def closeSource = if (lastBar and beyondLastBar) then closeSource[1] else PrevDayClose;
def PrevDayOpen = if !beyondLastBar then Highest(open(period = TimeFrame2), 1)[1] else PrevDayOpen[1];
def openSource = if (lastBar and beyondLastBar) then openSource[1] else PrevDayOpen;
def lastClose = if lastBar then close else lastClose[1];

def Last_Price = if IsNaN(close[-0 - 1]) then lastClose[-0] else Double.NaN;

plot ArrowDn = if last_price >= (AVG - (AVG*0.005))
               then low
               else double.nan;
               ArrowDn.SetDefaultColor(Color.Black);
plot ArrowUp = if last_price <= (AVG + (AVG*0.005))
               then high
               else double.nan;
               ArrowUp.SetDefaultColor(Color.Black);
Alert(ArrowUp, " ", Alert.Bar, sound.Ding);
Alert(ArrowDN, " ", Alert.Bar, sound.Ding);
 
I really need help...
1) I want my chart to alert me when the current price is about to approach the EMA... However the alert just goes off even if the price is no where near the EMA
2) The script also displays the EMA for everyday, but I really only need to see the EMA for today and/or yesterday...

Code:
input Period = aggregationPeriod.DAY;
input AvgType = averageType.EXPONENTIAL;
input Length = 8;
input priceclose = close;

plot AVG = MovingAverage(AvgType, close(period = Period), Length);
AVG.setdefaultcolor(color.yellow);

input TimeFrame2 = {default day, week, month};
def lastBar = !IsNaN(close) && IsNaN(close[-1]);
def beyondLastBar = IsNaN(close[-1]) and IsNaN(close);
def PrevDayClose = if !beyondLastBar then Highest(close(period = TimeFrame2), 1)[1] else PrevDayClose[1];
def closeSource = if (lastBar and beyondLastBar) then closeSource[1] else PrevDayClose;
def PrevDayOpen = if !beyondLastBar then Highest(open(period = TimeFrame2), 1)[1] else PrevDayOpen[1];
def openSource = if (lastBar and beyondLastBar) then openSource[1] else PrevDayOpen;
def lastClose = if lastBar then close else lastClose[1];

def Last_Price = if IsNaN(close[-0 - 1]) then lastClose[-0] else Double.NaN;

plot ArrowDn = if last_price >= (AVG - (AVG*0.005))
               then low
               else double.nan;
               ArrowDn.SetDefaultColor(Color.Black);
plot ArrowUp = if last_price <= (AVG + (AVG*0.005))
               then high
               else double.nan;
               ArrowUp.SetDefaultColor(Color.Black);
Alert(ArrowUp, " ", Alert.Bar, sound.Ding);
Alert(ArrowDN, " ", Alert.Bar, sound.Ding);

Whenever I have problems with a script, I use a debug process to uncover the problem. It is usually a combiination of addlabels, plots, addclouds and addchartbubbles.

In this case, I believe the between function could help solve what you want and is included in the following code with some debug options to test the result. The input debug will toggle those items on/off.

Capture.jpg
Ruby:
input Period = AggregationPeriod.DAY;
input AvgType = AverageType.EXPONENTIAL;
input Length = 8;
input priceclose = close;

plot AVG = MovingAverage(AvgType, close(period = Period), Length);
AVG.SetDefaultColor(Color.YELLOW);

input TimeFrame2 = {default day, week, month};
def lastBar = !IsNaN(close) && IsNaN(close[-1]);
def beyondLastBar = IsNaN(close[-1]) and IsNaN(close);
def PrevDayClose = if !beyondLastBar then Highest(close(period = TimeFrame2), 1)[1] else PrevDayClose[1];
def closeSource = if (lastBar and beyondLastBar) then closeSource[1] else PrevDayClose;
def PrevDayOpen = if !beyondLastBar then Highest(open(period = TimeFrame2), 1)[1] else PrevDayOpen[1];
def openSource = if (lastBar and beyondLastBar) then openSource[1] else PrevDayOpen;
def lastClose = if lastBar then close else lastClose[1];

def Last_Price = if IsNaN(close[-0 - 1]) then lastClose[-0] else Double.NaN;

plot ArrowDn = if Between(Last_Price, AVG - (AVG * 0.005), AVG)
               then low
               else Double.NaN;
ArrowDn.SetDefaultColor(Color.BLACK);

plot ArrowUp = if  Between(Last_Price, AVG, AVG + (AVG * 0.005))
               then high
               else Double.NaN;
ArrowUp.SetDefaultColor(Color.BLACK);

Alert(ArrowUp, " ", Alert.BAR, Sound.Ding);
Alert(ArrowDn, " ", Alert.BAR, Sound.Ding);

input debug = yes;
plot adn = if !debug then double.nan else AVG - (AVG * 0.005);
AddLabel(debug, close + "  " +  (AVG + (AVG * 0.005)) + " " + AVG);
plot aup = if !debug then double.nan else AVG + (AVG * 0.005);
AddLabel(debug, close + "  " + AVG + " " + (AVG + (AVG * 0.005)));
addcloud(if !debug then double.nan else aup,adn,color.lighT_GRAY,color.lighT_GRAY);
 
Whenever I have problems with a script, I use a debug process to uncover the problem. It is usually a combiination of addlabels, plots, addclouds and addchartbubbles.

In this case, I believe the between function could help solve what you want and is included in the following code with some debug options to test the result. The input debug will toggle those items on/off.
Thank you so much for this! I'm wondering if you have any insights on this follow-up question:
I've taken ThinkOrSwim's "DailySMA" indicator and I tried modifying it slightly to display the Daily-8-EMA, however the value doesn't seem accurate in spite of me actually changing the price variable... Originally ThinkOrSwim had it as "FundamentalType.CLOSE"

Code:
input price = AverageType.EXPONENTIAL;
input aggregationPeriod = AggregationPeriod.DAY;
input length = 8;
input displace = 0;
input showOnlyLastPeriod = no;

plot DailyEMA;

if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
    DailyEMA = Double.NaN;
} else {
    DailyEMA = Average(fundamental(price, period = aggregationPeriod)[-displace], length);
}
 
Thank you so much for this! I'm wondering if you have any insights on this follow-up question:
I've taken ThinkOrSwim's "DailySMA" indicator and I tried modifying it slightly to display the Daily-8-EMA, however the value doesn't seem accurate in spite of me actually changing the price variable... Originally ThinkOrSwim had it as "FundamentalType.CLOSE"

Code:
input price = AverageType.EXPONENTIAL;
input aggregationPeriod = AggregationPeriod.DAY;
input length = 8;
input displace = 0;
input showOnlyLastPeriod = no;

plot DailyEMA;

if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
    DailyEMA = Double.NaN;
} else {
    DailyEMA = Average(fundamental(price, period = aggregationPeriod)[-displace], length);
}

Since TOS is open source (scripts can be modified and used) for most of it's indicators, you picked a good starting point. The DailySMA was written before TOS rolled out the movingaverage function, I believe, and just used Average to compute the SMA. The movingaverage function allows you to use a variety of averages through the input avgtype that is created below.



Ruby:
input avgtype = AverageType.EXPONENTIAL;
input aggregationPeriod = AggregationPeriod.DAY;
input price  = FundamentalType.CLOSE;
input length = 8;
input displace = 0;
input showOnlyLastPeriod = no;

plot DailyEMA;

if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
    DailyEMA = Double.NaN;
} else {
    DailyEMA = MovingAverage(avgtype, Fundamental(price, period = aggregationPeriod)[-displace], length);
}
 
This is a chart label that shows the 13EMA, 50SMA on the daily chart as a label
Can someone please edit this code so that when I switch to a 5 minute or 15 minute chart that it still shows the 1YR:1D value for the SMAs and EMA please?

Thank you




input length1 = 13;
input length2 = 13;
input length3 = 50;
input length4 =200;
input displace = 0;

def sma200 = SimpleMovingAvg(close, 200);
def sma50 = SimpleMovingAvg (close, 50);
def ema13 = ExpAverage(close, 13);
def ema9 = ExpAverage(close, 9);
def price = close;

#plot EMA9_ = ExpAverage(close, 9);
#plot EMA21_ = ExpAverage(close, 21);
#plot SMA50_ = SimpleMovingAvg (close, 50);
#plot SMA200_ = SimpleMovingAvg (close, 200);

#AddLabel(close, ”Stacked MAs” , (if price > sma200 and #price > sma50 and price > ema13 and price > ema10 then #Color.GREEN else Color.RED));

#EMA LABEL 1
def EMA1 = ExpAverage(price[-displace], length1);
def EMA2 = ExpAverage(price[-displace], length2);
#AddLabel(EMA1, length1 + “EMA: ” + ExpAverage(price, #length1), (if EMA1 < price then Color.CYAN else Color.RED));

#EMA LABEL 2
#AddLabel(EMA9_, length2 + “EMA: ” + ExpAverage(price, #length2), (if EMA9_ < price then Color.DARK_RED else Color.RED));

#SMA LABEL 1
def SMA1 = Average(price, length3);
def SMA2 = Average(price, length4);

AddLabel(SMA1, length3 + “SMA: ” + Average(price, length3) , (if SMA1 < price then Color.WHITE else Color.RED));

#SMA LABEL 2
AddLabel(SMA2, length4 + “SMA: ” + Average(price, length4) , (if SMA2 < price then Color.YELLOW else Color.RED));


#EMA LABEL 2
AddLabel(EMA2, length1 + “EMA: ” + ExpAverage(price, length1), (if EMA2 < price then Color.DARK_RED else Color.RED));
 
Last edited by a moderator:
This is a chart label that shows the 13EMA, 50SMA on the daily chart as a label
Can someone please edit this code so that when I switch to a 5 minute or 15 minute chart that it still shows the 1YR:1D value for the SMAs and EMA please?

Thank you




input length1 = 13;
input length2 = 13;
input length3 = 50;
input length4 =200;
input displace = 0;

def sma200 = SimpleMovingAvg(close, 200);
def sma50 = SimpleMovingAvg (close, 50);
def ema13 = ExpAverage(close, 13);
def ema9 = ExpAverage(close, 9);
def price = close;

#plot EMA9_ = ExpAverage(close, 9);
#plot EMA21_ = ExpAverage(close, 21);
#plot SMA50_ = SimpleMovingAvg (close, 50);
#plot SMA200_ = SimpleMovingAvg (close, 200);

#AddLabel(close, ”Stacked MAs” , (if price > sma200 and #price > sma50 and price > ema13 and price > ema10 then #Color.GREEN else Color.RED));

#EMA LABEL 1
def EMA1 = ExpAverage(price[-displace], length1);
def EMA2 = ExpAverage(price[-displace], length2);
#AddLabel(EMA1, length1 + “EMA: ” + ExpAverage(price, #length1), (if EMA1 < price then Color.CYAN else Color.RED));

#EMA LABEL 2
#AddLabel(EMA9_, length2 + “EMA: ” + ExpAverage(price, #length2), (if EMA9_ < price then Color.DARK_RED else Color.RED));

#SMA LABEL 1
def SMA1 = Average(price, length3);
def SMA2 = Average(price, length4);

AddLabel(SMA1, length3 + “SMA: ” + Average(price, length3) , (if SMA1 < price then Color.WHITE else Color.RED));

#SMA LABEL 2
AddLabel(SMA2, length4 + “SMA: ” + Average(price, length4) , (if SMA2 < price then Color.YELLOW else Color.RED));


#EMA LABEL 2
AddLabel(EMA2, length1 + “EMA: ” + ExpAverage(price, length1), (if EMA2 < price then Color.DARK_RED else Color.RED));

This seems to work

Capture.jpg
Ruby:
input agg      = AggregationPeriod.DAY;
input length1  = 13;
input length2  = 13;
input length3  = 50;
input length4  = 200;
input displace = 0;

#EMA LABEL 1
def EMA1 = ExpAverage(close(period = agg)[-displace], length1);
def EMA2 = ExpAverage(close(period = agg)[-displace], length2);

#SMA LABEL 1
def SMA1 = Average(close(period = agg), length3);
def SMA2 = Average(close(period = agg), length4);

AddLabel(SMA1, length3 + “SMA: ” + Average(close(period = agg), length3) , (if SMA1 < close(period = agg) then Color.WHITE else Color.RED));

#SMA LABEL 2
AddLabel(SMA2, length4 + “SMA: ” + Average(close(period = agg), length4) , (if SMA2 < close(period = agg) then Color.YELLOW else Color.RED));


#EMA LABEL 2
AddLabel(EMA2, length1 + “EMA: ” + ExpAverage(close(period = agg), length1), (if EMA2 < close(period = agg) then Color.DARK_RED else Color.RED));
 
If you want to display moving averages from higher timeframe such as the hourly or daily on your lower timeframe chart, this indicator will help you do that. It basically displays higher timeframe moving averages on your 5m, 15m, or 30m chart. Anything with a higher timeframe moving average will work.

Here I have the 20 Daily Exponential Moving Average on my 15 minute chart.

iyf4H3R.png


You have the option between EMA, SMA (simple moving average), Hull, Weighted, and Wilders.

thinkScript Code

Rich (BB code):
# MTF Moving Average

input Period = aggregationPeriod.HOUR;
input AvgType = averageType.SIMPLE;
input Length = 50;
input priceclose = close;

plot AVG = MovingAverage(AvgType, close(period = Period), Length);
AVG.setdefaultcolor(color.yellow);

Shareable Link

https://tos.mx/5BpIqL

I'm unable to locate the original developer of this indicator. If you know who made this, please let me know.

Video Tutorial

Hey Ben,
Im trying to incorporate the period function with the below moving average, VWMA, but having trouble. Can you help out? thanks

input Period = AggregationPeriod.FIVE_MIN;
def VWMA = Sum(volume * close) / Sum(volume);

plot MYVWMA = Average(VWMA[-displace], LENGTH);
 
Hey Ben,
Im trying to incorporate the period function with the below moving average, VWMA, but having trouble. Can you help out? thanks

input Period = AggregationPeriod.FIVE_MIN;
def VWMA = Sum(volume * close) / Sum(volume);

plot MYVWMA = Average(VWMA[-displace], LENGTH);
Input or define a LENGTH, and add the period to the close
 
Input or define a LENGTH, and add the period to the close
hey Horserider, still having issues getting this one to work..

##MTF##
input Period = AggregationPeriod.DAY;
input AvgType = AverageType.EXPONENTIAL;
input Length = 20;
input Length1 = 90;
input priceclose = close;
def MTF = MovingAverage(AvgType, close(period = Period), Length);


##VWMA
def VWMA = Sum(volume * close) / Sum(volume); <---am i adding the "period" here? or below?
plot MYVWMA = Average(VWMA, LENGTH);

thx for the help
 
You can move or adjust a Moving Average up or down by using a multiplier ieup: MA * 1.02 , IEdn: MA * .98
You can move or adjust a Moving Average Left or Right by referencing past or forward days IE Left : MA[2]
IE Right : MA[-2]

Just a note though, moving a MA to the right requires future data that has not occurred , so the far right edge of your chart will be missing a line by the amount of data that you have forward referenced! You are REPAINTING the moving average!
 
@wcsharron @tradegeek After a bit of thought process, I think you are better off with labels than Plot.

check out labels study code below. This seems to work our regardless of Time or Tick charts.

Code:
#
# SM_MovingAverageLabels
#
# version 1.2
#
declare on_volume;

#Default moving average values:
#SIMP 3 Close.DAY
#SIMP 8 Close.DAY
#SIMP 20 Close.DAY
#SIMP 50 Close.DAY
#SIMP 200 Close.DAY


input aP = AggregationPeriod.DAY;

input MA_1_length = 3; #simple
input MA_2_length = 8; #simple
input MA_3_length = 20; #simple
input MA_4_length = 50; #simple
input MA_5_length = 200; #simple

def MA_1_closeType = close(period = aP);
def MA_2_closeType = close(period = aP);
def MA_3_closeType = close(period = aP);
def MA_4_closeType = close(period = aP);
def MA_5_closeType = close(period = aP);

def MA_1_avg = round(Average(MA_1_closeType, MA_1_length),2);
def MA_2_avg = round(Average(MA_2_closeType, MA_2_length),2);
def MA_3_avg = round(Average(MA_3_closeType, MA_3_length),2);
def MA_4_avg = round(Average(MA_4_closeType, MA_4_length),2);
def MA_5_avg = round(Average(MA_5_closeType, MA_5_length),2);

def currentPrice = close;

AddLabel(1, "SMA" + " ", Color.YELLOW);

def MA_1_above = if currentPrice > MA_1_avg then 1 else 0;
def MA_1_below = if currentPrice <= MA_1_avg then 1 else 0;
AddLabel(MA_1_above, MA_1_length + ": " + MA_1_avg + " ", Color.GREEN);
AddLabel(MA_1_below, MA_1_length + ": " + MA_1_avg + " ", Color.RED);

def MA_2_above = if currentPrice > MA_2_avg then 1 else 0;
def MA_2_below = if currentPrice <= MA_2_avg then 1 else 0;
AddLabel(MA_2_above, MA_2_length + ": " + MA_2_avg + " ", Color.GREEN);
AddLabel(MA_2_below, MA_2_length + ": " + MA_2_avg + " ", Color.RED);

def MA_3_above = if currentPrice > MA_3_avg then 1 else 0;
def MA_3_below = if currentPrice <= MA_3_avg then 1 else 0;
AddLabel(MA_3_above, MA_3_length + ": " + MA_3_avg + " ", Color.GREEN);
AddLabel(MA_3_below, MA_3_length + ": " + MA_3_avg + " ", Color.RED);

def MA_4_above = if currentPrice > MA_4_avg then 1 else 0;
def MA_4_below = if currentPrice <= MA_4_avg then 1 else 0;
AddLabel(MA_4_above, MA_4_length + ": " + MA_4_avg + " ", Color.GREEN);
AddLabel(MA_4_below, MA_4_length + ": " + MA_4_avg + " ", Color.RED);

def MA_5_above = if currentPrice > MA_5_avg then 1 else 0;
def MA_5_below = if currentPrice <= MA_5_avg then 1 else 0;
AddLabel(MA_4_above, MA_5_length + ": " + MA_5_avg + " ", Color.GREEN);
AddLabel(MA_4_below, MA_5_length + ": " + MA_5_avg + " ", Color.RED);

#EXPO 3 Close
#EXPO 8 Close
#EXPO 20 Close
#EXPO 50 Close
#EXPO 200 Close

input EMA_1_length = 3; #exponential
input EMA_2_length = 8; #exponential
input EMA_3_length = 20; #exponential
input EMA_4_length = 50; #exponential
input EMA_5_length = 200; #exponential

def EMA_1_closeType = close;
def EMA_2_closeType = close;
def EMA_3_closeType = close;
def EMA_4_closeType = close;
def EMA_5_closeType = close;

def EMA_1_avg = round(ExpAverage(EMA_1_closeType, EMA_1_length),2);
def EMA_2_avg = round(ExpAverage(EMA_2_closeType, EMA_2_length),2);
def EMA_3_avg = round(ExpAverage(EMA_3_closeType, EMA_3_length),2);
def EMA_4_avg = round(ExpAverage(EMA_4_closeType, EMA_4_length),2);
def EMA_5_avg = round(ExpAverage(EMA_5_closeType, EMA_5_length),2);

AddLabel(1, "EMA" + " ", Color.YELLOW);

def EMA_1_above = if currentPrice > EMA_1_avg then 1 else 0;
def EMA_1_below = if currentPrice <= EMA_1_avg then 1 else 0;
AddLabel(EMA_1_above, EMA_1_length + ": " + EMA_1_avg + " ", Color.GREEN);
AddLabel(EMA_1_below, EMA_1_length + ": " + EMA_1_avg + " ", Color.RED);

def EMA_2_above = if currentPrice > EMA_2_avg then 1 else 0;
def EMA_2_below = if currentPrice <= EMA_2_avg then 1 else 0;
AddLabel(EMA_2_above, EMA_2_length + ": " + EMA_2_avg + " ", Color.GREEN);
AddLabel(EMA_2_below, EMA_2_length + ": " + EMA_2_avg + " ", Color.RED);

def EMA_3_above = if currentPrice > EMA_3_avg then 1 else 0;
def EMA_3_below = if currentPrice <= EMA_3_avg then 1 else 0;
AddLabel(EMA_3_above, EMA_3_length + ": " + EMA_3_avg + " ", Color.GREEN);
AddLabel(EMA_3_below, EMA_3_length + ": " + EMA_3_avg + " ", Color.RED);

def EMA_4_above = if currentPrice > EMA_4_avg then 1 else 0;
def EMA_4_below = if currentPrice <= EMA_4_avg then 1 else 0;
AddLabel(EMA_4_above, EMA_4_length + ": " + EMA_4_avg + " ", Color.GREEN);
AddLabel(EMA_4_below, EMA_4_length + ": " + EMA_4_avg + " ", Color.RED);

def EMA_5_above = if currentPrice > EMA_5_avg then 1 else 0;
def EMA_5_below = if currentPrice <= EMA_5_avg then 1 else 0;
AddLabel(EMA_4_above, EMA_5_length + ": " + EMA_5_avg + " ", Color.GREEN);
AddLabel(EMA_4_below, EMA_5_length + ": " + EMA_5_avg + " ", Color.RED);

**Note: This code has 5 of SMA and EMA labels defined and all SMA are fixed to AggregatePeriod.Day where as EMA are current candle.

-Surya
@surya thanks for the labels. Instead of having the EMA labels based on the current price. Is it possible to have the EMA values taken from higher timeframes. Example if price is above 21 EMA in 3 or 5 min chart while my current chart is on either 1min or 1000 Tick chart?.
 
Is there any way to change the "input Period = AggregationPeriod.DAY;" to "input Period = AggregationPeriod.5000t;" I am slowly moving away from candlestick charts to tick charts and looking for a way to change the timeframe from either a Daily, One Hour, or 15 minute to a 5000 tick, 2000 tick, and 1000 tick timeframe. Thank you!
 
@tosalers6247 @rwfarrell
Scripts utilizing Intraday aggregations cannot be used on tick charts. The tick charts x and y-axis only use data related to price and volume lots. It has no comprehension of intraday time.

Tick charts are defined by days. So a script that has a daily aggregation written into it, is possible but no lower timeframes.
 
Last edited:
is there a way i can set up a watchlist to be alerted when a 15 min candle opens above the Daily 21 SMA with this script ? I dont even know if its even possible .
 
is there a way i can set up a watchlist to be alerted when a 15 min candle opens above the Daily 21 SMA with this script ? I dont even know if its even possible .
The ToS platform does not support the use of multiple timeframes in Scans, Watchlists, Chart Alerts, Conditional Orders or Tick charts.
MTF studies can only be used as plots on charts.
 
is there a way i can set up a watchlist to be alerted when a 15 min candle opens above the Daily 21 SMA with this script ? I dont even know if its even possible .
There are 26 fifteen min candles in a trading day, X 21 days so when the close of the fifteen Min bar crosses above a 546 SMA will give you the answer
 

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

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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