Wolf Waves for ThinkorSwim


Staff member
As requested, here is the Wolf Waves indicator for ThinkorSwim. It automatically plots support and resistance on your chart, as well as trend lines that you can use to catch potential breakouts or breakdown.

This indicator was created by Mobius. As mentioned by the author, this is similar to other Pivot Studies that mark different types of breakouts.


thinkScript Code

Rich (BB code):
# Wolf Waves
# Mobius
# V01.05.22.2018

# User Inputs

input n = 10;

# Internal Script Reference

script LinePlot {

    input BarID = 0;

    input Value = 0;

    input BarOrigin = 0;

    def ThisBar = HighestAll(BarOrigin);

    def ValueLine = if BarOrigin == ThisBar

                then Value

                else Double.NaN;

    plot P = if ThisBar - BarID <= BarOrigin

             then HighestAll(ValueLine)

             else Double.NaN;


# Variables

def o = open;

def h = high;

def l = low;

def c = close;

def x = BarNumber();

def xN = x == HighestAll(x);

# R1

def hh = fold i = 1 to n + 1

         with p = 1

         while p

         do h > GetValue(h, -i);

def PivotH = if (x > n and

                 h == Highest(h, n) and


             then h

             else Double.NaN;

def PHValue = if !IsNaN(PivotH)

              then PivotH

              else PHValue[1];

def PHBarOrigin = if !IsNaN(PivotH)

                  then x

                  else PHBarOrigin[1];

def PHBarID = x - PHBarOrigin;

# R2

def R2PHValue = if PHBarOrigin != PHBarOrigin[1]

                then PHValue[1]

                else R2PHValue[1];

def R2PHBarOrigin = if PHBarOrigin != PHBarOrigin[1]

                    then PHBarOrigin[1]

                    else R2PHBarOrigin[1];

def R2PHBarID = x - R2PHBarOrigin;

# R3

def R3PHValue = if R2PHBarOrigin != R2PHBarOrigin[1]

                then R2PHValue[1]

                else R3PHValue[1];

def R3PHBarOrigin = if R2PHBarOrigin != R2PHBarOrigin[1]

                    then R2PHBarOrigin[1]

                    else R3PHBarOrigin[1];

def R3PHBarID = x - R3PHBarOrigin;

# S1

def ll = fold j = 1 to n + 1

         with q = 1

         while q

         do l < GetValue(l, -j);

def PivotL = if (x > n and

                 l == Lowest(l, n) and


             then l

             else Double.NaN;

def PLValue = if !IsNaN(PivotL)

              then PivotL

              else PLValue[1];

def PLBarOrigin = if !IsNaN(PivotL)

                  then x

                  else PLBarOrigin[1];

def PLBarID = x - PLBarOrigin;

# S2

def S2PLValue = if PLBarOrigin != PLBarOrigin[1]

                then PLValue[1]

                else S2PLValue[1];

def S2PLBarOrigin = if PLBarOrigin != PLBarOrigin[1]

                    then PLBarOrigin[1]

                    else S2PLBarOrigin[1];

def S2PLBarID = x - S2PLBarOrigin;

# S3

def S3PLValue = if S2PLBarOrigin != S2PLBarOrigin[1]

                then S2PLValue[1]

                else S3PLValue[1];

def S3PLBarOrigin = if S2PLBarOrigin != S2PLBarOrigin[1]

                    then S2PLBarOrigin[1]

                    else S3PLBarOrigin[1];

def S3PLBarID = x - S3PLBarOrigin;

# S4

def S4PLValue = if S3PLBarOrigin != S3PLBarOrigin[1]

                then S3PLValue[1]

                else S4PLValue[1];

def S4PLBarOrigin = if S3PLBarOrigin != S3PLBarOrigin[1]

                    then S3PLBarOrigin[1]

                    else S4PLBarOrigin[1];

def S4PLBarID = x - S4PLBarOrigin;

# S5

def S5PLValue = if S4PLBarOrigin != S4PLBarOrigin[1]

                then S4PLValue[1]

                else S5PLValue[1];

def S5PLBarOrigin = if S4PLBarOrigin != S4PLBarOrigin[1]

                    then S4PLBarOrigin[1]

                    else S5PLBarOrigin[1];

def S5PLBarID = x - S5PLBarOrigin;

# Plots

plot R1 = LinePlot(BarID = PHBarID,

                   Value = PHValue,

                   BarOrigin = PHBarOrigin);


AddChartBubble(x == HighestAll(PHBarOrigin), PHValue, "R1", Color.GREEN, 1);

plot R2 = LinePlot(BarID = R2PHBarID,

                   Value = R2PHValue,

                   BarOrigin = R2PHBarOrigin);


AddChartBubble(x == HighestAll(R2PHBarOrigin), PHValue, "R2", Color.GREEN, 1);

plot R3 = LinePlot(BarID = R3PHBarID,

                   Value = R3PHValue,

                   BarOrigin = R3PHBarOrigin);


AddChartBubble(x == HighestAll(R3PHBarOrigin), PHValue, "R3", Color.GREEN, 1);

plot S1 = LinePlot(BarID = PLBarID,

                   Value = PLValue,

                   BarOrigin = PLBarOrigin);


AddChartBubble(x == HighestAll(PLBarOrigin), PLValue, "S1", Color.RED, 0);

plot S2 = LinePlot(BarID = S2PLBarID,

                   Value = S2PLValue,

                   BarOrigin = S2PLBarOrigin);


AddChartBubble(x == HighestAll(S2PLBarOrigin), PLValue, "S2", Color.RED, 0);

plot S3 = LinePlot(BarID = S3PLBarID,

                   Value = S3PLValue,

                   BarOrigin = S3PLBarOrigin);


AddChartBubble(x == HighestAll(S3PLBarOrigin), PLValue, "S3", Color.RED, 0);

# Trend Line

plot SupportLine2 = if x == HighestAll(S2PLBarOrigin)

                    then S2

                    else if x == HighestAll(PLBarOrigin)

                         then S1  #Parentlow

                         else Double.NaN;





def slope2 = (S2 - S1) /

             (HighestAll(S2PLBarOrigin) - PLBarOrigin);

plot ExtLine2 = if x >= S2PLBarOrigin

                then (x - HighestAll(S2PLBarOrigin)) * slope2 + S2

                else Double.NaN;





plot SupportLine3 = if x == HighestAll(R3PHBarOrigin)

                    then R3

                    else if x == PHBarOrigin

                         then R1

                         else Double.NaN;





def slope3 = (R1 - R3) /

             (HighestAll(PHBarOrigin) - R3PHBarOrigin);

plot ExtLine3 = if x >= R3PHBarOrigin

                then (x - HighestAll(R3PHBarOrigin)) * slope3 + R3

                else Double.NaN;





Shareable Link

Last edited:

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

I find the wolf wave very interesting so for the wave counts and you have it here. I use wolf waves every day with amazing results same as pivots really

S3. Finishes out wave 5 to bottom

R3 top of wave 1

S2 bottom of wave 2

2 up to 3 top of wave 3

Down to wave 4

Wave 4 begins the sweet spot up to finish wave 5

Then wait for another wave to develop using the 5- 15 min you even throw a 2min chart up for fast markets

So my suggestion is to label the waves as 1-5

I just so not see many differences waves are waves really and waves subset in between larger waves although what I use gives me fib extensions/fractals that project up and down price points. Maybe a future project. Not sure how you can do the price extension other than on the connecting wave points but If you like I can offer more information pertaining to bullish/bearish numbered patterns 1-5 and direction synopsis? all points connect so we are talking about extensions based on fib probabilities...fractals. I am not a coder sorry

Last edited:
The wolfe wave is best viewed on 3 charts ie; 2 min, 5 min, 15 min for longer-term viewing of the same wave subset. The 2 min is viewed to make sure the wave did or did not fall out of the sink with the 5min can lead to termination of trade. A bearish wave formation says when the 1,3,5 line plot along the upper line in synch and on a linear plane according to Bill and Brian Wolfe. I saw this happen and caught it on spy yesterday for the drop. You can use higher time frames you will see waves of course but the lower time frames catch the wave subsets quicker than the larger waves and often are profitable.
Last edited:
The boundaries of the defined wave channel can repaint so yes
Never worked with wolfes so I'm trying to eyeball identify candidates to test out. Check out the daily of EB. Does the set up of the last month qualify, in your opinion? This would give a target near 11 if I'm reading it correctly?
With price movement yes I'm also using the swing hi/lo, swing short indicators along with premarket hi/lo easy enough for me to trade open highs and lo's and a very simple chart set-up also use advanced market maker 2.o and another I cannot share The wave script I use does post the five waves and numbers each accordingly so I have 4 points to verify the move along with 9 sma and using 30min/1hr/day charts as well as premarket highs and lows. And of course standard Bollinger bands. Knowing the wave counts for the intermediate time frames are great and verified direction off the daily reality.
Last edited:
Here is a perfect 4hr wave chart there are rules to follow trading wave patterns this is a good example it shows the chart moving in a down channel and conforming to the wave principles. Once you begin to trust the patterns it comes easy but also confirms with other indicators so once the pattern set price is set price moves up or down depending on the count.

See chart for an ETA estimated for the ticker price to achieve a rise in price notice the two green lines and a downward wedge if I could extend the chart to the right where these lines converge that is the estimated time frame ETA. Bill Wolfe is responsible for developing the Wolfe Wave over the last 40 years of research. You can tell I get very excited when explaining this so I'll chill on the subject. Thanks for being patient with me.

Good site for information only and wave behavior http://www.wolfewavesignals.com/
Last edited by a moderator:
@J007RMC Good deal, I'll keep an eye to see how it works out. I went ahead and bought a small call position on the EB I mentioned yesterday "possible wolfe wave" yesterday. Up 35% on a 3% underlying move today. Not a bad introduction if it holds all the way to the trend line
The same chart but 1 hr time frame the projected price at 121.3 with a projected time of arrival to Tuesday 10/30 makes sense ER So how does the Wolfe wave estimate price, via price lines and fractals.

The Wolfe wave predicted an apple rise in price on my 4hr chart Friday morning absolutely and nailed an approximation of time to eta based on the bullish plot.

Ben's wolf wave script is identical in that they fire at the same time Ben's is noted by the R1 top. Must view on the 2min time frame very profitable and projects the channel very well on the daily chart. https://tos.mx/Wj3rEc

The wolf wave support level S1, S2, S3 = R1. R2, R3 register as numbered waves for me Bens is extremely accurate as it should be.
Last edited by a moderator:
How are you finding candidates though? I really don't see how you can scan for ideas other than just scrolling through a watch list and see if the pattern is panning out.
@wtf_dude I try to watch only a few of my favorite tickers aapl, ba, dis, and wait for the waves to form longs/shorts because really every ticker moves in such that way either large long time frames or shorter time frames the wave subsets of the larger time frames.. If we did not have waves we don't have movement a universal concept really for me.

I identify the longer time frames and switch to the intermediate time frames to catch the wave sub-sets



Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

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