List of "Must Have" Indicators for ThinkorSwim

markos

Well-known member
VIP
Everyone could use a different Fishing Pond to look for Ideas from Time to Time, Post yours WITH Description

These Links are from Slim Miller at askslim.com. The Sector SPDR list is especially helpful for liquid products.
 

Volatility Trading Range

VTR is a momentum indicator that shows if a stock is overbought or oversold based on its Weekly and Monthly average volatility trading range.

Download the indicator

zeek

Active member
2019 Donor
  • Trend Reversal Indicator with signals
  • Supertrend by Mobius
  • Volume Profile
  • Volume BuyingvsSelling
  • Auto Pivot Points
 
Last edited:

ugaotrader

Member
Favorite:
  • DMI Oscillator
  • Theo Trade Pivot
  • TEA 2.0
  • TTM LRC
  • HULL 21s
  • RSi Laguerre
  • TMO
  • TTM Tend+Hacolt+Momentum
Code:
#hint:<b>Three X Stochastic Oscillator</b>
# Title = Three_X_Oscillator
# Richard Houser created this 3X Oscillator code on the Yahoo ThinkScript forum
# Stochastic calculated using Lane's formulas in favor over TOS' (has issues)

declare lower;
input Use_OB_OS = yes;#hint Use_OB_OS:<b>Show OverBought/OverSold lines.</b>\n Is alternate to using HH/LL lines.
input Use_HH_LL = no;#hint Use_HH_LL:<b>Show Highest/Lowest actual value lines.</b>\n Is alternate to using OB/OS lines.
input show40_60 = no;#hint show40_60:Yes shows the 40 & 60 lines
input K_period = 21;
input D_period = 9;
input SlowTrendLength = 3;
input smoothing_type = { default EMA, SMA };
input stochastic_type = { FAST, default SLOW };
input over_bought = 80;#hint over_bought:This can be replaced by the  line of the highest actual value
input over_sold = 20;#hint over_sold:This can replaced by the line of the lowest actual value

Plot OB = If Use_OB_OS then over_bought else double.nan;
OB.SetLineWeight(1);
OB.SetDefaultColor(Color.yellow);

Plot OS = If Use_OB_OS then over_sold else double.nan;
OS.SetLineWeight(1);
OS.SetDefaultColor(Color.yellow);

plot Mid = 50;
mid.SetStyle(Curve.LONG_DASH);
mid.SetLineWeight(2);
mid.SetDefaultColor(Color.pink);

plot Mid_h = If  show40_60 then 60 else Double.nan ;
Mid_h.SetStyle(Curve.SHORT_DASH);
Mid_h.SetLineWeight(1);
Mid_h .SetDefaultColor(Color.pink);
Mid_H.Hidebubble();

plot Mid_L = If  show40_60 then 40 else Double.nan ;
Mid_L.SetStyle(Curve.SHORT_DASH);
Mid_L.SetLineWeight(1);
Mid_L.SetDefaultColor(Color.pink);
Mid_L.Hidebubble();

def aggPer = GetAggregationPeriod();

def adjAggPer = if aggPer == AggregationPeriod.MIN then
  AggregationPeriod.THREE_MIN
  else if aggPer == AggregationPeriod.TWO_MIN then
  AggregationPeriod.FIVE_MIN
  else if aggPer == AggregationPeriod.THREE_MIN then
  AggregationPeriod.TEN_MIN
  else if aggPer == AggregationPeriod.FOUR_MIN then
  AggregationPeriod.TEN_MIN
  else if aggPer == AggregationPeriod.FIVE_MIN then
  AggregationPeriod.FIFTEEN_MIN
  else if aggPer == AggregationPeriod.TEN_MIN then
  AggregationPeriod.THIRTY_MIN
  else if aggPer == AggregationPeriod.FIFTEEN_MIN then
  AggregationPeriod.HOUR
  else if aggPer == AggregationPeriod.TWENTY_MIN then
  AggregationPeriod.HOUR
  else if aggPer == AggregationPeriod.THIRTY_MIN then
  AggregationPeriod.TWO_HOURS
  else if aggPer == AggregationPeriod.HOUR then
  AggregationPeriod.FOUR_HOURS
  else if aggPer == AggregationPeriod.TWO_HOURS then
  AggregationPeriod.DAY
  else if aggPer == AggregationPeriod.FOUR_HOURS then
  AggregationPeriod.DAY
  else if aggPer == AggregationPeriod.DAY then
  AggregationPeriod.THREE_DAYS
  else if aggPer == AggregationPeriod.TWO_DAYS then
  AggregationPeriod.WEEK
  else if aggPer == AggregationPeriod.THREE_DAYS then
  AggregationPeriod.WEEK
  else if aggPer == AggregationPeriod.FOUR_DAYS then
  AggregationPeriod.MONTH
  else if aggPer == AggregationPeriod.WEEK then
  AggregationPeriod.MONTH
  else if aggPer == AggregationPeriod.MONTH then
  AggregationPeriod.MONTH
  else
  Double.NaN;

def _kPeriod;
def _dPeriod;
def _slowTrendLength;

if aggPer == AggregationPeriod.MONTH
then {
  _kPeriod = K_period * 3;
  _dPeriod = D_period * 3;
  _slowTrendLength = SlowTrendLength * 3;
} else {
  _kPeriod = K_period;
  _dPeriod = D_period;
  _slowTrendLength = SlowTrendLength;
}

def priceH = high( period = adjAggPer );
def priceL = low( period = adjAggPer );
def priceC = close( period = adjAggPer );
def lowest_low = Lowest( low, _kPeriod );
def highest_high = Highest( high, _kPeriod );
def fastK = if ( highest_high - lowest_low ) <= 0 then 0 else 100 * ( close - lowest_low ) / ( highest_high - lowest_low );
def fastD = if smoothing_type == smoothing_type.EMA then ExpAverage( fastK, _dPeriod ) else Average( fastK, _dPeriod );
def slowK = fastD;
def slowD = if smoothing_type == smoothing_type.EMA then ExpAverage( slowK, _dPeriod ) else Average( slowK, _dPeriod );

#---Stochastic
plot stochD = if stochastic_type == stochastic_type.FAST then fastD else slowD;
stochD.SetPaintingStrategy( PaintingStrategy.POINTS );
stochD.HideBubble();
stochD.AssignValueColor( if stochD >= stochD[1] then Color.GREEN else if stochD < stochD[1] then Color.RED else Color.GRAY );

##################################################
# Script below will plot a horizontal line at the lowest 3x Osc levelfor all of the data loaded to the chart
plot stochlowest = If Use_HH_LL then LowestAll(stochD) else double.nan;
stochlowest.SetPaintingStrategy(PaintingStrategy.LINE);
stochlowest.SetStyle(Curve.SHORT_DASH);
stochlowest.SetDefaultColor(Color.red);
stochlowest.SetLineWeight(2);
stochlowest.HideBubble();
stochlowest.HideTitle();

#####
#Script below will plot a horizontal line at the highest 3x Osc level for all of the data loaded to the chart
plot stochhighest = If Use_HH_LL then HighestAll(stochD) else double.nan;
stochhighest.SetPaintingStrategy(PaintingStrategy.LINE);
stochhighest.SetStyle(Curve.SHORT_DASH);
stochhighest.SetLineWeight(2);
stochhighest.SetDefaultColor(Color.green);
stochhighest.HideBubble();
stochhighest.HideTitle();

AddLabel(Use_HH_LL,"Highest value " + HighestAll(round(stochD,2)) + " Bars Ago = " + AsText(stochhighest, NumberFormat.TWO_DECIMAL_PLACES), Color.GREEN);
AddLabel(Use_HH_LL, "Lowest value " + LowestAll(round(stochD,2)) + " Bars Ago = " + AsText(stochlowest, NumberFormat.TWO_DECIMAL_PLACES), Color.RED);

6aa6918965617da66dd1c8a20e7cc1e3.png


The Red and Green colors are based on the market cycles:
  • Dark Red: Accumulation
  • Bright Green: Mark Up
  • Dark Green: Distribution
  • Bright Red: Mark Down
  • Blue: Volatility Consolidation
https://www.smbtraining.com/blog/tea-2-0-indicator

1) Open ThinkOrSwim Platform
2) Click on “Setup” (upper right corner)
3) Click on “Open shared item…”
4) Paste this URL: https://tos.mx/DUZDmM5) Go to a chart
6) Click on Studies >> Edit studies…
7) Find the indicator and add it

Really, I practically do not graph the volume, I do use it in all my scanners as a filter, especially the OBV.
For accumulation / distribution i use TEA2.0

VPOC and POC

Code:
declare hide_on_daily;

input MktOpen  = 0930; #hint MktOpen: Cash Marekt open EST.
input MktClose = 1600; #hint MktClose: Cash Market close EST.

def h = high;
def l = low;
def c = close;
def Active = if SecondsFromTime(MktOpen) >= 0 and
                SecondsTillTime(MktClose) >= 0
             then 1
             else 0;
def Today = GetDay() == GetLastDay();
def Yesterday = GetDay() == GetLastDay()-1;
def ap = AggregationPeriod.Day;
def last = if Yesterday and !last[1]
           then close(period = ap)[1]
           else if Yesterday and
              SecondsTillTime(MktClose) == 0 and
              SecondsFromTime(MktClose) == 0
              then if c <> last[1]
                   then c
                   else last[1]
              else last[1];
def prevHigh = if Yesterday and !prevHigh[1]
               then high(period = ap)[1]
               else if Yesterday and Active and !Active[1]
               then h
               else if Yesterday and Active and h > prevHigh[1]
                    then h
               else prevHigh[1];
def prevLow = if Yesterday and !prevLow[1]
              then low(period = ap)[1]
              else if Yesterday and Active and !Active[1]
               then l
               else if Yesterday and Active and l < prevLow[1]
                    then l
               else prevLow[1];
def BubbleLocation = if Today and Active and !Active[1]
                     then c
                     else double.nan;
plot LastClose = if Today and Active then last else Double.NaN;
LastClose.SetStyle(curve.short_dash);
LastClose.SetDefaultColor(Color.WHITE);
#AddChartBubble(BubbleLocation, LastClose, "C", Color.Dark_Gray, no);
plot pivot = Round(((LastClose + prevHigh + prevLow) / 3) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, (pivot), "Pivot", Color.Dark_Gray, yes);
plot R1 = Round(((2 * pivot) - prevLow) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(R1), "R1", Color.Dark_Gray, no);
plot S1 = Round(((2 * pivot) - prevHigh) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(S1), "S1", Color.Dark_Gray, yes);
plot R2 = Round((pivot + (R1 - S1)) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(R2), "R2", Color.Dark_Gray, no);
plot S2 = Round((pivot - (R1 - S1)) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(S2), "S2", Color.Dark_Gray, yes);
plot R3 = Round((prevHigh + (2 * (pivot - prevLow))) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(R3), "R3", Color.Dark_Gray, no);
plot S3 = Round((prevLow - (2 * (prevHigh - pivot))) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(S3), "S3", Color.Dark_Gray, yes);
plot R4 = Round((prevHigh + (3 * (pivot - prevLow))) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(R4), "R4", Color.Dark_Gray, no);
plot S4 = Round((prevLow - (3 * (prevHigh - pivot))) / TickSize(), 0) * TickSize();
#AddChartBubble(BubbleLocation, HighestAll(S4), "S4", Color.Dark_Gray, yes);
pivot.SetPaintingStrategy(PaintingStrategy.DASHES);
pivot.SetDefaultColor(Color.Dark_Orange);
pivot.SetLineWeight(1);
R1.SetPaintingStrategy(PaintingStrategy.DASHES);
R1.SetDefaultColor(Color.GREEN);
R1.SetLineWeight(1);
R2.SetPaintingStrategy(PaintingStrategy.DASHES);
R2.SetDefaultColor(Color.GREEN);
R2.SetLineWeight(1);
R3.SetPaintingStrategy(PaintingStrategy.DASHES);
R3.SetDefaultColor(Color.GREEN);
R3.SetLineWeight(1);
R4.SetPaintingStrategy(PaintingStrategy.DASHES);
R4.SetDefaultColor(Color.GREEN);
R4.SetLineWeight(1);
S1.SetPaintingStrategy(PaintingStrategy.DASHES);
S1.SetDefaultColor(Color.RED);
S1.SetLineWeight(1);
S2.SetPaintingStrategy(PaintingStrategy.DASHES);
S2.SetDefaultColor(Color.RED);
S2.SetLineWeight(1);
S3.SetPaintingStrategy(PaintingStrategy.DASHES);
S3.SetDefaultColor(Color.RED);
S3.SetLineWeight(1);
S4.SetPaintingStrategy(PaintingStrategy.DASHES);
S4.SetDefaultColor(Color.RED);
S4.SetLineWeight(1);
# End Code Shadow Trader Pivots

# Previous RTH_POC and Value Area Extended to Current Day
def bar = BarNumber();
def RTHBar1 = if SecondsFromTime(MktOpen) == 0 and
                 SecondsTillTime(MktOpen) == 0
              then bar
              else RTHBar1[1];
def RTHBarEnd = if SecondsFromTime(MktClose) == 0 and
                   SecondsTillTime(MktClose) == 0
                then 1
                else Double.NaN;
def cond = bar == RTHBar1; #Active != Active[1];
profile vol = VolumeProfile("startNewProfile" = cond, "onExpansion" = no, "numberOfProfiles" = 10, "pricePerRow" = PricePerRow.TICKSIZE, "value area percent" = 68.4);
def pc = if IsNaN(vol.GetPointOfControl())
         then pc[1]
         else vol.GetPointOfControl();
def hVA = if IsNaN(vol.GetHighestValueArea())
          then hVA[1]
          else vol.GetHighestValueArea();
def lVA = if IsNaN(vol.GetLowestValueArea())
          then lVA[1]
          else vol.GetLowestValueArea();
def hProfile = if IsNaN(vol.GetHighest())# and con
               then hProfile[1]
               else vol.GetHighest();
def lProfile = if IsNaN(vol.GetLowest())# and con
               then lProfile[1]
               else vol.GetLowest();
def POC = if Active then pc else Double.NaN;
def VAHigh = if Active then hVA else Double.NaN;
def VALow = if Active then lVA else Double.NaN;
def PrevPC = if !IsNaN(RTHBarEnd)
            then POC[1]
            else PrevPC[1];
def PrevPCBar = if !IsNaN(RTHBarEnd)
               then bar
               else PrevPCBar[1];
def PrevPC_Limit = if bar == PrevPCBar
                  then Double.NaN
                  else if bar > PrevPCBar
                       then bar - PrevPCBar
                       else PrevPC_Limit[1];
def PrevVAH = if !IsNaN(RTHBarEnd)
            then VAHigh[1]
            else PrevVAH[1];
def PrevVAHBar = if !IsNaN(RTHBarEnd)
               then bar
               else PrevVAHBar[1];
def PrevVAH_Limit = if bar == PrevVAHBar
                  then Double.NaN
                  else if bar > PrevVAHBar
                       then bar - PrevVAHBar
                       else PrevVAH_Limit[1];
def PrevVAL = if !IsNaN(RTHBarEnd)
            then VALow[1]
            else PrevVAL[1];
def PrevVALBar = if !IsNaN(RTHBarEnd)
               then bar
               else PrevVALBar[1];
def PrevVAL_Limit = if bar == PrevVALBar
                  then Double.NaN
                  else if bar > PrevVALBar
                       then bar - PrevVALBar
                       else PrevVAL_Limit[1];
script LinePlot {
    input LineLimit = 0;
    input OnExpansion = yes;
    input data = close;
    input bar = 0;
    def ThisBar = HighestAll(bar);
    def cLine = if bar == ThisBar
                then data
                else Double.NaN;
    def cond1 = CompoundValue(1, if IsNaN(data)
                                 then cond1[1]
                                 else data, data);
    plot P = if ThisBar - LineLimit <= bar
             then HighestAll(cLine)
             else Double.NaN;
    plot ExpLine = if OnExpansion and
                     IsNaN(data[-1])
                   then cond1
                   else Double.NaN;
}
plot PrevPOC = LinePlot(data = PrevPC, LineLimit = PrevPC_Limit, OnExpansion = no, bar = PrevPCBar).P;
PrevPOC.SetDefaultColor(Color.RED);
PrevPOC.SetDefaultColor(Color.RED);
plot PrevVAHline = LinePlot(data = PrevVAH, LineLimit = PrevVAH_Limit, OnExpansion = no, bar = PrevVAHBar).P;
PrevVAHline.SetDefaultColor(Color.RED);
PrevVAHline.SetDefaultColor(Color.RED);
plot PrevVALline = LinePlot(data = PrevVAL, LineLimit = PrevVAL_Limit, OnExpansion = no, bar = PrevVALBar).P;
PrevVALline.SetDefaultColor(Color.RED);
PrevVALline.SetDefaultColor(Color.RED);
addCloud(PrevVALline, PrevVAHline, color.dark_Gray, Color.dark_Gray);
input bubbles = yes;
def n = 2;
def n1 = n + 1;
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), PrevVAH[n1], "VAH", color = Color.YELLOW, yes);
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), PrevVAL[n1], "VAL", Color.YELLOW, no);
AddChartBubble(bubbles and !IsNaN(close[n1]) and IsNaN(close[n]), PrevPOC[n1], "POC", Color.RED, no);
# End POC and Value Area

Basic Flexlibe Grid: https://tos.mx/RFc1iF3
 
Last edited by a moderator:

horserider

Well-known member
VIP
@ugaotrader Great if it works for you. I am just pointing out you have multiple momentum studies all telling you the same information. I believe you could select one and make the chart less cluttered. How does the IWO Turning point work for you. It is supposed to have lots of information and option buy sell info. I have never figured it out and gave up.
 

markos

Well-known member
VIP
I can't speak for him,but, I think @BenTen has something like that in mind, but it's a large task to say the least.

He has a start with the explore button. Otherwise try to put the label name in Search box. Get Notepad++ and put scripts in there for later. In the mean time, please review the Universe of Thinkscript in the Tutorials section. A lot of what you'd like is there.
 
Last edited:

J007RMC

Well-known member
2019 Donor
Funny every time I reply to this thread seems Ive made some changes to my trading methodology but my staple indicators are the advanced market moves, magic fib, auto trend, the tmo, the adaptive vwap along with the macd and stochastic indicators.. last few days Ive used the macd candlesticks with success. BUT MY MOST FAVORITE the rsi Laguerre and hull watchlist scans with great success.
 

New Indicator: Buy the Dip

Check out our Buy the Dip indicator and see how it can help you find profitable swing trading ideas. Scanner, watchlist columns, and add-ons are included.

Download the indicator

Similar threads

Top