On this page
Overview
In this tutorial I build a Market Pulse dashboard for ThinkOrSwim: custom watchlist columns that show which of the 4 Market Pulse stages each symbol is in, color the cell by stage, and count how many bars the stage has lasted. Click the column header and the whole watchlist sorts by trend.
I start from our free Market Pulse indicator code, make 4 changes that turn it into a custom quote with a bar counter, and copy it into a second column on 30-minute bars. It's for traders who run a scan and want to see which results have the longest trend, or a trend that started 1 bar ago, without opening every chart.
Key Takeaways
- The Market Pulse dashboard is a ThinkOrSwim custom quote, or watchlist column, that shows a symbol's Market Pulse stage and a bar count, such as "Acceleration: 46".
- Each cell is colored by stage: green for acceleration, red for deceleration, gray for accumulation and orange for distribution, with black text.
- In the video, 2 columns run the same code on daily and 30-minute aggregation. Each column uses one of your custom quote scripts.
- Sorting the daily column showed Western Union with the longest run, 46 bars of acceleration, while AR, EOG and GRA had turned green 1 bar ago.
- The download is a .txt file with 2 ThinkOrSwim shared links, one for the daily column and one for the 30-minute column.
What the Market Pulse Dashboard Shows
The Market Pulse dashboard shows the Market Pulse stage of every symbol in a watchlist, with one column per timeframe. Each cell holds the stage name and a counter, so "Acceleration: 46" on the daily column means 46 daily bars in that trend.

| Cell | Background | What the stage means |
|---|---|---|
| Acceleration: n | Green | Bullish trend |
| Deceleration: n | Red | Bearish trend |
| Accumulation: n | Gray | Neither trend stage, price at or above the VMA line |
| Distribution: n | Orange | Neither trend stage, price below the VMA line |
The stage logic comes straight from our free Market Pulse indicator: three volume-weighted moving averages (VWMAs) and a variable moving average (VMA). That tutorial explains how each stage is decided. Here I cover turning it into a column.
Why Use a Watchlist Column for the Market Pulse
A Market Pulse column ranks a list of symbols by trend with one click on the header. In the video, the watchlist is filled by one of our bullish Squeeze scans, run on daily bars, so every symbol already has a bullish bias. The usual next step is to go through each result with backtesters to find the strongest stock to trade.
Sorting the column does the first pass for you. Here's what I look for in the sorted list:
- The longest trend. The highest Acceleration count. In the video, Western Union led the list with 46 bars in a row, the most bullish trend of the group.
- The newest trend. Acceleration: 1. AR, EOG and GRA sat at the top of the sorted list, where the Market Pulse had turned green 1 bar ago, and the chart I had up showed the same.
- Pullback candidates. The gray accumulation cells. That's where I'd look for a greater chance of a pullback.
How to Build the Column From the Indicator Code
The Market Pulse dashboard code starts as a copy of the Market Pulse indicator code, so install that free study first if you're building along with the video. Then set up the column:
- Open Studies, click the scroll icon next to the Market Pulse to see its code, and copy all of it. A text editor works too.
- If there's no watchlist on the left side of your chart, click the add gadget icon and choose Watchlist.
- Click the cog icon on the watchlist and choose Customize.
- Type "custom quote" in the search, or pick custom quotes from the dropdown, and click the scroll icon next to one of them.
- Open the thinkScript Editor tab, paste the code, name the column Market Pulse and set the aggregation to D for daily bars.

The pasted code needs the 4 changes below.
The 4 Code Changes
The Market Pulse dashboard takes 4 changes to the indicator code. The first 3 make it work as a column, which shows only the label's text and color, and the 4th adds the bar counters. If labels are new to you, our AddLabel tutorial explains the function the column is built on.
1. Remove the Chart Bubbles and Turn the Inputs Into Defs
Delete the ChartBubblesOn input and the chart bubble code at the bottom. Then change the two remaining inputs to def, since the 10-bar length and the close never change:
This step’s code is free with an account. Create one or sign in.
The length of 10 is the same VMA length the indicator uses.
2. Change the VMA Plot to a Def
The column should show only the label text, so plot VMA = asd; becomes a def:
This step’s code is free with an account. Create one or sign in.
ThinkOrSwim then flags VMA.setDefaultColor, because only a plot can take a default color. Delete that line and the VMA.AssignValueColor line under the label.
3. Change the Label Text and Add a Background Color
Remove "Stage: " from each label so the cell shows only the stage name. Replace the label's stage colors with one text color, and add AssignBackgroundColor with the same conditions the label uses.
The download has only shared links, so this line is rebuilt from what I say in the video. It uses the label's conditions, including >= for acceleration, with the colors I ended on:
This step’s code is free with an account. Create one or sign in.
White text was hard to read on the colored cells, so I switched it to Color.BLACK.
I also tried cyan for accumulation, then went back to gray because it looks cleaner. Orange stays for distribution. Change any of these colors to suit your screen.
4. Add the Counters
Each counter adds 1 to its own value from the bar before while its condition holds, and resets to 0 when it doesn't. Here is the bullish counter, written out from the video:
This step’s code is free with an account. Create one or sign in.
Then add it to the label text, as "Acceleration: " + bullishCounter.
On my daily chart the column showed an acceleration count of 3 at that point. Counting back 3 candles matched, and the candle before them was still gray. I then built a bearish counter the same way for deceleration, plus counters for accumulation and distribution, and added each one to its stage's text.
Adding a 30-Minute Column
The Market Pulse dashboard gets a second timeframe from a copy of the same code in another custom quote. In the video I add a 30-minute column next to the daily one:
- Copy the finished daily code.
- In Customize, open the custom quotes list and click the scroll icon on another custom quote.
- Delete its code, paste yours, give it a name that shows the timeframe, and set the aggregation to 30 minutes.
- Rename the first column too, for example to Market Pulse daily, so you can tell the two apart.
Each column takes up one of your custom quote scripts, so add as many or as few timeframes as you need. In the video I note that you can keep using the import method to add more. For more on timeframes in thinkScript, see our tutorial on aggregation periods.
Customizing the Counter and Colors
The Market Pulse dashboard code is a starting point, and the video shows where to change it. The background colors are one line, so swapping gray for cyan takes a few seconds.
The counters can track whatever run you care about. In the video I suggest counting consecutive acceleration and accumulation bars: a bullish counter that keeps counting through green and gray bars and resets to 0 only when the stage turns bearish. Test any change on a chart by counting candles, the way I checked the first count.
Members who want a higher timeframe trend on the chart itself can use the MTF Market Pulse.
How I Read the Dashboard
The Market Pulse dashboard sorts a list by trend, and I still open the chart before deciding anything. AR's count of 1 looked like a fresh start, and its chart showed a strong bullish trend before that bar. A long count shows how far a trend has run. It says nothing about where to enter.
With daily and 30-minute columns side by side, you can see whether a daily trend is also trending on the shorter timeframe. Before you trade a name from the list, decide where your stop goes and size the position so a stop-out costs a small, fixed share of your account.
For more watchlist columns, see our free Squeeze Dashboard and the rest of our dashboards.
Common Problems and Fixes
- "Cannot set default color" error. You changed
plot VMAto def. Delete theVMA.setDefaultColorline. - The cell shows colored text on a plain background. Remove the label's color conditions and add the
AssignBackgroundColorline. - The text is hard to read. Use
Color.BLACKfor the label text. - The column's stage doesn't match the line on your chart. You may have older Market Pulse code. The updated indicator's label matches the line exactly, so download it again before you copy the code.
The dashboard on real data
Drawn from real intraday bars with the code on this page, through the Oct 20, 2026 close. Each cell is the post's column: the Market Pulse stage of that symbol on that timeframe and how many bars in a row it has lasted, colored green for acceleration, red for deceleration, gray for accumulation and orange for distribution. The 30-minute column runs on 30-minute bars, the daily column on daily bars.
14 ETFs, sorted by the daily column

30 stocks, sorted the same way

Sorting does the first pass, as in the video. The longest daily acceleration among the 30 stocks belonged to MSFT, at 17 bars. None of the 30 had turned green on the last daily bar. The two columns disagreed on 28 of the 44 names. A daily acceleration next to a weaker 30-minute cell is a short-term pullback inside a longer trend: MSFT read Acceleration: 17 on the daily column and Accumulation: 1 on the 30-minute.
By the numbers
30 well-known stocks and 14 ETFs at the Oct 20, 2026 close.
Download
Download the Market Pulse Dashboard for ThinkOrSwim. The download is a .txt file with 2 ThinkOrSwim shared links: the Market Pulse Dashboard column for the daily time frame and the same column for the 30-minute time frame. In ThinkOrSwim, click Setup in the top right corner, choose Open shared item, paste a link, click Preview and then Import. If you haven't imported a shared item before, here's how to import into your ThinkOrSwim platform.
Questions
What is the Market Pulse dashboard?
The Market Pulse dashboard is a free set of ThinkOrSwim watchlist columns from TOS Indicators. Each column shows a symbol's Market Pulse stage (acceleration, deceleration, accumulation or distribution), colored by stage, with a count of bars in that stage. In the video I run one column on daily bars and one on 30-minute bars.
How do I add the Market Pulse dashboard to my ThinkOrSwim watchlist?
Download the .txt file from this page. In ThinkOrSwim, click Setup in the top right corner, choose Open shared item, paste one of the 2 links, click Preview and then Import. Open your watchlist's Customize window, search for market pulse and add the column. Repeat with the second link for the other timeframe.
What does the number in the Market Pulse column mean?
The number is a counter of bars in the current trend. Acceleration: 46 means the symbol has been in that bullish trend for 46 bars on the column's timeframe. In the video, Western Union had the highest count at 46, while AR, EOG and GRA showed 1 because the Market Pulse had turned green on the last bar.
What do the colors in the Market Pulse dashboard mean?
Green is acceleration, red is deceleration, gray is accumulation and orange is distribution. The code sets them with AssignBackgroundColor, using the same conditions as the Market Pulse indicator label, and the text is black so it reads on every color. You can change any of the 4 colors in that one line.
How do I add a 30-minute Market Pulse column?
Copy your finished daily code, open another custom quote in the Customize window, delete its code and paste yours. Name it for the timeframe and set the aggregation to 30 minutes. The download already includes a 30-minute version as its second shared link, so you can import that instead.
How do I create a custom watchlist column in ThinkOrSwim?
Click the cog icon on a watchlist and choose Customize. Search for custom quote, click the scroll icon next to one, and open the thinkScript Editor tab. Paste your code, name the column and set the aggregation. In the Market Pulse column, the VMA plot becomes a def so only the label shows, and AssignBackgroundColor colors the cell.
Why does my custom quote say it cannot set the default color?
Only a plot can take a default color. After you change plot VMA to def VMA, the VMA.setDefaultColor line throws that error. Delete it, and delete the VMA.AssignValueColor line as well, since the column only shows the label and never draws the VMA line.
How is the dashboard different from the Market Pulse indicator?
The indicator draws the variable moving average line on a chart and prints the stage in a label for one symbol. The dashboard runs the same stage logic as a watchlist column for every symbol in the list, adds a bar counter, and lets you sort by it. The logic itself is explained on the Market Pulse indicator page.
Goes with
Get each new indicator by email
One email on Sundays with the week's new tool and its code. A free account also unlocks every .txt download.
No credit card. Unsubscribe anytime.
Fair Value Gap
False Breakout Scanner
Heiken Ashi Trend



Stock Volatility Box
Futures Volatility Box
ORB Setups
Squeeze Setups
Automated trading: "Buy the Dip" Script
Market Pulse
TTM Squeeze Dashboard
Relative Performance Dashboard