List of "Must Have" Fishing Ponds and Indicators for ThinkorSwim


Well-known member
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 The Sector SPDR list is especially helpful for liquid products.
Those are the fishing ponds I rotate around to.

For indicators, because of my time frame, it's mostly RSI Laguerre Standard Version.
It doesn't have Gamma showing and acts differently than the other RSI Laguerre's I and others have posted here. Just my preference.
My main 3yr Daily Chart with goodies inside.



  • omibL9o.png
    122.1 KB · Views: 51
Last edited:

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

  • Moving Averages
  • Pivots
  • Volume and RelativeSTDVolume
  • VWAP
  • Bollinger Bands and ATR channels
  • ATR
  • Still playing with oscillators (RSI, MACD/TMO)
  • Trend Reversal Indicator with signals
  • Supertrend by Mobius
  • Volume Profile
  • Volume BuyingvsSelling
  • Auto Pivot Points
Last edited:
  • DMI Oscillator
  • Theo Trade Pivot
  • TEA 2.0
  • HULL 21s
  • RSi Laguerre
  • TMO
  • TTM Tend+Hacolt+Momentum
#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;

Plot OS = If Use_OB_OS then over_sold else double.nan;

plot Mid = 50;

plot Mid_h = If  show40_60 then 60 else Double.nan ;
Mid_h .SetDefaultColor(;

plot Mid_L = If  show40_60 then 40 else Double.nan ;

def aggPer = GetAggregationPeriod();

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

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 );

plot stochD = if stochastic_type == stochastic_type.FAST then fastD else slowD;
stochD.SetPaintingStrategy( PaintingStrategy.POINTS );
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;

#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;

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);


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

1) Open ThinkOrSwim Platform
2) Click on “Setup” (upper right corner)
3) Click on “Open shared item…”
4) Paste this URL: 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


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;
#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);
# 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
                   then cond1
                   else Double.NaN;
plot PrevPOC = LinePlot(data = PrevPC, LineLimit = PrevPC_Limit, OnExpansion = no, bar = PrevPCBar).P;
plot PrevVAHline = LinePlot(data = PrevVAH, LineLimit = PrevVAH_Limit, OnExpansion = no, bar = PrevVAHBar).P;
plot PrevVALline = LinePlot(data = PrevVAL, LineLimit = PrevVAL_Limit, OnExpansion = no, bar = PrevVALBar).P;
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:
Last edited by a moderator:
@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.
For those of you that swing trade what are your go to indicators and stratagies on the 4h and d? I am looking to find and backtest some indicators. Thank you.
Last edited by a moderator:
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:
Sorry if you have answered this but I couldn't find it, I'm wondering what the volume profile study is you have? It's the upper study one. Thanks
@imnobody Volume Profile is already in ThinkorSwim. You can get it via the Studies section. Not sure if that is a custom one but looks like the default version to me.
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.
With so many indicators to choose from, I'm curious as to what is everyone's go-to indicator/setup for intraday buy/sell signals? One that doesn't give too many signals but has a solid overall accuracy.
Hi Folks,

Can anyone suggest some the best indicators for swing trading index ETFs long and short? Thanks!
Last edited:

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

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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