Repaints MTF PPO Heatmap: Destroyer Edition For ThinkOrSwim

Repaints

Ricky_005

Member
Plus
MTF PPO Heatmap — Destroyer Edition: — it sinks them all, to reveal regime and control across timeframes. :ROFLMAO: Mods—don’t worry, it’s just here to sink bad signals… :ROFLMAO:
This is a gift from me to the useThinkScript community.

I’ve spent a lot of time building, breaking, fixing, and tightening this until it behaved the way I want a real “at-a-glance” market read to behave. The goal is simple: stop guessing what timeframe is driving price, and see the PPO state across multiple timeframes in one clean heatmap.

This study is a Multi-Timeframe Standard PPO Heatmap built around PPO histogram behavior:
  • Histogram (DELTA) = MAC − SIG
  • Bull vs Bear is the sign of the histogram (above/below zero)
  • Strength vs Weakening is the histogram’s momentum (rising/falling)
So instead of staring at one PPO and hoping it represents “the market,” you get up to 8 rows of stacked timeframe context. It’s designed to be compact, readable, and fast enough to actually run.

UuFqf8O.png


What You Get
1) A clean multi-timeframe PPO “state” heatmap (up to 8 rows)

Rows ladder up automatically from your chart timeframe (ex: 1d → 2d → 3d → 4d → 1w → 1mo → 3mo → 1yr).

2) 4-Color or 2-Color heatmap mode (plots only)
4-Color = direction + momentum shading
  • BrightGreen: bull strengthening
  • DarkGreen: bull weakening
  • DarkRed: bear weakening
  • BrightRed: bear strengthening
2-Color = momentum-only
  • Green when histogram rising
  • Red when histogram falling
Labels stay 4-color by design (so they always tell the full story).

3) Optional zero-line cross markers + forecast markers
  • Confirmed markers fire on the exact cross bar (MAC crosses 0).
  • Forecast markers can show when a cross is projected within a user-set window.
4) Labels that don’t lie to you
NaN-safe logic is included so you don’t get fake arrows when data is unavailable (common on higher aggregations or limited history symbols). Prediction math is last-bar gated to reduce load.


Performance / Practical Controls
  • rowCount (3–8 rows) lets you cut rows for speed and clarity.
  • Rows that aren’t enabled or aren’t distinct do not plot (no useless placeholders).
  • Base chart support is time-based up to Quarterly (3 months). Year is used only as an upper ladder row.


“Repaint?” — Quick clarification
This study does not use ZigZag, pivots, or any future-bar lookahead logic. It’s straight PPO math (MAC, Signal, Histogram) and state coloring.

Like all indicators, values update until the bar is closed.
And because this is MTF, Thinkorswim will also update higher-timeframe values while that higher-timeframe candle is still forming. So on a lower timeframe chart, the higher rows can appear to “shift” until that higher timeframe bar closes. A lot of people call that repainting, but it’s really just normal MTF behavior.

Bottom line: nothing “changes after the higher-timeframe bar is closed.”
Treat higher-timeframe rows/markers as confirmed on that timeframe’s close.
Also, the optional forecast/projection features are estimates by design and will update as momentum changes.



How I Use It
This isn’t meant to be “the signal.” It’s meant to be your market posture dashboard:
  • Are the higher timeframes aligned or fighting?
  • Is momentum expanding or fading?
  • Is the move real, or just lower-TF noise?
When this thing lights up across multiple rows, you’re not guessing anymore—you’re reading the tape with context.


Give It a Real Test
Drop it on different symbols, different timeframes, and watch how it behaves around:
  • trend starts
  • pullbacks
  • consolidations
  • reversals
  • fakeouts
If you find improvements, optimizations, or cleaner ways to do parts of it—post them. I’m putting this out here to contribute, and I’m absolutely open to other sharp eyes making it better.

“Use it, tweak it, improve it — and if you make it better, post it back so the whole forum levels up.”

Hope you all enjoy it,
Tricky Rick

if st8 == 2 then GlobalColor("BrightGreen") else if st8 == 1 then GlobalColor("DarkGreen")
else if st8 == -1 then GlobalColor("DarkRed") else if st8 == -2 then GlobalColor("BrightRed")
else GlobalColor("Neutral"), location = tfLblLoc
);[/CODE]
 
Last edited:
Anyone like to give some feedback on there experience with the study? What works in the real world, what doesn't and what you would like to improve.
 
Anyone like to give some feedback on there experience with the study? What works in the real world, what doesn't and what you would like to improve.

How has it worked for you?
How does it fit into your strategy?
What value is it providing?

What needs improvement?
 
How has it worked for you?
How does it fit into your strategy?
What value is it providing?

What needs improvement?
Works just fine for me. I was asking if anyone else that may be using it for suggestions or issues they have with it. Doesn't seem as though anyone is interested in it.
 
For Swing Traders,
The non‑MTF portions of this indicator are extremely effective. They are mathematically correct, visually stable, and thoughtfully engineered.

Dashboard GoalWhy It Works
Detect whether momentum is expanding or fadingUses PPO histogram slope (delta of MAC–Signal) which is the correct derivative for momentum acceleration/deceleration.
Provide a clean, readable posture dashboardHeatmap rows, consistent color logic, last-bar gating, create a compact, stable visual summary.
Predict zero-cross eventsUses nonlinear decay, slope suppression, and last-bar gating to avoid false projections. More stable than typical ThinkScript prediction math.
Show confirmed MAC zero-crossesAccurate cross detection with separate offsets and color-coded markers for up/down events.
Excellent job!

Just A Note:
The issues with the MTF function
One unformed PPO value from a higher timeframe cannot reliably indicate alignment across timeframes.
It is not a stable state — it is a moving, repainting target.

Never give significant weight to still‑forming bars on any of your charts.
Causality can only be determined by viewing your chart as a whole — not from one bar, and never from one incomplete bar.
 
Last edited:

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
742 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