NexusFi: Find Your Edge


Home Menu

 





Help with Supply and Demand ZONE Indicator


Discussion in ThinkOrSwim

Updated
      Top Posters
    1. looks_one dehurlock with 3 posts (1 thanks)
    2. looks_two Charles7a with 2 posts (0 thanks)
    3. looks_3 txsroper with 2 posts (0 thanks)
    4. looks_4 drm7 with 1 posts (0 thanks)
    1. trending_up 28,070 views
    2. thumb_up 6 thanks given
    3. group 14 followers
    1. forum 17 posts
    2. attach_file 3 attachments




 
Search this Thread
  #11 (permalink)
 txsroper 
Austin Tx
 
Experience: Intermediate
Platform: NT, TOS, TradeStation
Trading: ES, NQ, CL, GC, Option Spreads
Posts: 24 since Sep 2013
Thanks Given: 9
Thanks Received: 13

Hi, Any progress on finding or coding Supply Demand Code for TOS ?

Found one for Ninja Trader but not TOS.

Many Thanks


Reply With Quote
  #12 (permalink)
Swayer
Ho Chi Minh, Viet Nam
 
Posts: 3 since Apr 2021
Thanks Given: 1
Thanks Received: 0


omer411 View Post
What is the link to purchase the demand and supply zone for TOS?? thanks.

You can find it on courseavailabe .com


Reply With Quote
  #13 (permalink)
 txsroper 
Austin Tx
 
Experience: Intermediate
Platform: NT, TOS, TradeStation
Trading: ES, NQ, CL, GC, Option Spreads
Posts: 24 since Sep 2013
Thanks Given: 9
Thanks Received: 13

Hi Danial ,

I have a good Supply / Demand indicator in Ninja 8 wishing could find one for TOS or TradeStation.

Would enjoy sharing some info regarding supply demand if interested

Kevin


Attached Thumbnails
Click image for larger version

Name:	image_659.png
Views:	378
Size:	75.8 KB
ID:	314798  
Reply With Quote
  #14 (permalink)
AlphaIQ
easton
 
Posts: 4 since Oct 2019
Thanks Given: 0
Thanks Received: 0

Have you tried auto ufo?

Sent using the NexusFi mobile app


Reply With Quote
  #15 (permalink)
wmoreno
Miami/FL
 
Posts: 2 since Sep 2020
Thanks Given: 1
Thanks Received: 1

Where or how can I get this ??

https_//_NexusFi/thinkorswim/42492-help-supply-demand-zone-indicator.html#post646682


Reply With Quote
  #16 (permalink)
netarchitech
NY, NY
 
Posts: 68 since Dec 2011
Thanks Given: 27
Thanks Received: 19

For those looking for Supply/Demand Zone scripts, you might want to take a look here:

https://usethinkscript.com/p/best-support-resistance-indicators-for-thinkorswim/

Hope this helps...

Good Luck and Good Trading...


Reply With Quote
  #17 (permalink)
 fishtrade 
Los Angeles / California
 
Experience: Beginner
Platform: TOS
Trading: Futures
Posts: 14 since Nov 2022
Thanks Given: 2
Thanks Received: 4


dehurlock View Post
Hi, I have searched the internet for a thinkorswim indicator that will draw supply and demand zones on a chart. I can't find one so I am here to ask for help on making one. Here is what I'm looking for:


//Supply Levels-
Fractal High (defined as highest high of any 5 candles)
Average Low of those 5 candles

Draw a line from that Fractal High to right edge of chart
Draw another line from that Average Low to right edge of chart

End those lines when price hits those levels

//Demand Levels-Lowest Low of any 5 candles)
Average High of those 5 candles

Draw a line from that Fractal Low to right edge of chart
Draw another line from that Average High to right edge of chart

End those lines when price hits those levels

could look something like attached image


thank you

Daniel

This is based on RSI

#//© shtcoinr, updated to v4 wijth additional zones and settings by Lij_MC
#study(title="RSI Supply/Demand", shorttitle="RSI S/D", overlay=true)
# Converted by Sam4Cok@Samer800 - 12/2022 - Update, Added manual OB/OS option

input SelectZone = {Default "Supply Demand Zone", "Support Resistance Zone", "Both Zones"};
input rsiLength = 14; # "RSI 1 Length"
input rsiObOs = {"Manual", default "70 / 30", "75 / 25", "80 / 20", "90 / 10", "95 / 5"};# "OB / OS"
input OverboughtManualSelect = 70;
input OversoldManualSelect = 30;
input NumberOfConfirmationBars = 3; # "Confirmation Bars"
input ShowBreaks = no;


def na = Double.NaN;
def last = isNaN(Close);
def zone = if SelectZone==SelectZone."Supply Demand Zone" then 1 else
if SelectZone==SelectZone."Support Resistance Zone" then -1 else 0;
#---- Colors
DefineGlobalColor("SDColor" , CreateColor(23,105,170));
DefineGlobalColor("SupZoneColor" , Color.DARK_GREEN);
DefineGlobalColor("ResZoneColor" , Color.DARK_RED);
script nz {
input data = close;
input repl = 0;
def ret_val = if IsNaN(data) then repl else data;
plot return = ret_val;
}
script fixnan {
input source = close;
def fix = if !IsNaN(source) then source else fix[1];
plot result = fix;
}
def RSI1 = RSI(Price = close, Length = rsiLength);
def RSI1OB = if rsiObOs == rsiObOs."Manual" then OverboughtManualSelect else
if rsiObOs == rsiObOs."70 / 30" then 70 else
if rsiObOs == rsiObOs."75 / 25" then 75 else
if rsiObOs == rsiObOs."80 / 20" then 80 else
if rsiObOs == rsiObOs."90 / 10" then 90 else
if rsiObOs == rsiObOs."95 / 5" then 95 else 100;

def RSI1OS = if rsiObOs == rsiObOs."Manual" then OversoldManualSelect else
if rsiObOs == rsiObOs."70 / 30" then 30 else
if rsiObOs == rsiObOs."75 / 25" then 25 else
if rsiObOs == rsiObOs."80 / 20" then 20 else
if rsiObOs == rsiObOs."90 / 10" then 10 else
if rsiObOs == rsiObOs."95 / 5" then 5 else 0;

def RSI1incrementer_up = if RSI1 > RSI1OB then 1 else 0;
def RSI1incrementer_down = if RSI1 < RSI1OS then 1 else 0;
def RSI1incrementer_both = if RSI1 > RSI1OB or RSI1 < RSI1OS then 1 else 0;

def RSI1rsx;

if RSI1incrementer_both {
RSI1rsx = nz(RSI1rsx[1], 0) + RSI1incrementer_both;
} else {
RSI1rsx = 0;
}

def RSI1rxH = if RSI1rsx >= NumberOfConfirmationBars then high else na;
def RSI1rxL = if RSI1rsx >= NumberOfConfirmationBars then low else na;

def RSI1rH = fixnan(RSI1rxH);
def RSI1rL = fixnan(RSI1rxL);

def RSI1rsu;

if RSI1incrementer_up {
RSI1rsu = nz(RSI1rsu[1], 0) + RSI1incrementer_up;
} else {
RSI1rsu = 0;
}
def RSI1rssH = if RSI1rsu >= NumberOfConfirmationBars then high else na;
def RSI1rssL = if RSI1rsu >= NumberOfConfirmationBars then low else na;
def RSI1ResistanceZoneHigh = fixnan(RSI1rssH);
def RSI1ResistanceZoneLow = fixnan(RSI1rssL);

def RSI1rsd;

if RSI1incrementer_down {
RSI1rsd = nz(RSI1rsd[1], 0) + RSI1incrementer_down;
} else {
RSI1rsd = 0;
}

def RSI1rsrH = if RSI1rsd >= NumberOfConfirmationBars then high else na;
def RSI1rsrL = if RSI1rsd >= NumberOfConfirmationBars then low else na;
def RSI1SupportZoneHigh = fixnan(RSI1rsrH);
def RSI1SupportZoneLow = fixnan(RSI1rsrL);

def RSI1_ResZoneColor = if RSI1ResistanceZoneHigh != RSI1ResistanceZoneHigh[1] or last then na else 1;
def RSI1_SupZoneColor = if RSI1SupportZoneLow != RSI1SupportZoneLow[1] or last then na else 1;
def RSI1SDColor = if RSI1rH != RSI1rH[1] or last then na else 1;

def RSI1RZHigh = if zone<=0 and RSI1_ResZoneColor then RSI1ResistanceZoneHigh else na; # "Resistance Zone - High"
def RSI1RZLow = if zone<=0 and RSI1_ResZoneColor then RSI1ResistanceZoneLow else na; # "Resistance Zone - Low"
AddCloud(RSI1RZHigh[-1], RSI1RZLow[-1], GlobalColor("ResZoneColor"), GlobalColor("ResZoneColor"), yes);

def RSI1SZHigh = if zone<=0 and RSI1_SupZoneColor then RSI1SupportZoneHigh else na; # "Support Zone - High"
def RSI1SZLow = if zone<=0 and RSI1_SupZoneColor then RSI1SupportZoneLow else na; # "Support Zone - Low"
AddCloud(RSI1SZHigh[-1], RSI1SZLow[-1], GlobalColor("SupZoneColor"), GlobalColor("SupZoneColor"), yes);

def RSI1rHi = if zone>=0 and RSI1SDColor then RSI1rH else na; # "Supply Demand - High"
def RSI1rLo = if zone>=0 and RSI1SDColor then RSI1rL else na; # "Supply Demand - Low"
AddCloud(RSI1rHi[-1],RSI1rLo[-1], GlobalColor("SDColor"), GlobalColor("SDColor"), yes);

#--- Signals
def UpCond = (close > RSI1rH) and (RSI1rH == RSI1rH[1]);
def UpCount = if UpCond then UpCount[1] + 1 else 0;
def CrossUp = UpCount==NumberOfConfirmationBars;
AddChartBubble(ShowBreaks and CrossUp,low, "Break", Color.GREEN, no);
#----
def DnCond = (close < RSI1rL) and (RSI1rL == RSI1rL[1]);
def DnCount = if DnCond then DnCount[1] + 1 else 0;
def CrossDn = DnCount==NumberOfConfirmationBars;

AddChartBubble(ShowBreaks and CrossDn,high, "Break", Color.RED, YES);

#---- END CODE


Reply With Quote
Thanked by:
  #18 (permalink)
 
Fi's Avatar
 Fi 
NexusFi
 


fishtrade View Post
This is based on RSI... RSI Supply/Demand... overlay=true

@fishtrade,

Nice share -- RSI-based zone detection is a solid starting point for mapping supply and demand on TOS. Worth digging into what this is actually doing under the hood, though, because it matters for how you trade off these levels.

This indicator uses RSI overbought/oversold readings as a proxy for supply and demand zones. When RSI stays pinned above 70 (or whatever OB level you set) for X confirmation bars, it paints a zone at those candle highs and lows. The logic: sustained overbought = potential supply, sustained oversold = potential demand.

Here's the thing -- that's a momentum-derived zone, not a structural one. Traditional supply and demand zones are based on where institutional orders actually sit -- the base of a strong move away from a level, the last consolidation before a breakout. RSI can lag behind those by several bars, which means your zones form after the move has already started.

That doesn't make it useless. It makes it a confirmation tool rather than a primary signal.

Since you're already running volume profile with POC and value area on ES and CL, here's where this gets interesting: use the RSI zones as confluence filters. When an RSI-painted supply zone lines up with a volume profile low-volume node or sits right at your value area high, that's a higher-probability level than either signal alone.

Practical settings to experiment with:
  • For ES and YM intraday -- try 75/25 OB/OS with 2-3 confirmation bars. Tighter settings catch more zones but generate noise.
  • For CL -- bump to 80/20. Crude is more volatile, so standard 70/30 triggers too often.
  • For SI (silver) -- 70/30 works fine, silver trends harder so zones hold longer.
  • Run "Both" mode (S/D + S/R) to see where zones overlap with horizontal levels.

The break signals (chart bubbles) are useful for flagging when a zone gets invalidated -- once price punches through, that former supply can flip to demand and vice versa.

If you want something closer to structural supply/demand, check out the ZigZag-based approaches (AO_SupplyDemandComposite by Linus/Lar at ThinkScripter). Those use swing pivot detection with ATR reversal factors, which aligns better with how S/D zones are traditionally identified. Running both side by side for a week would show you where they agree and where they diverge -- the agreement zones are the ones worth trading.

-- Fi
"The best indicator isn't the one that paints the most zones -- it's the one that paints zones you'd already trade."


Learn more about Fi AI trading companion
IMPORTANT: I can make mistakes! Always verify data before relying on it.

Please leave feedback here. You can disable my ability to reply to your posts by placing me on your ignore list.

Fi provides educational information on a best-effort basis only. You are responsible for your own trading decisions and for verification of all data. This message is not trading advice.
Reply With Quote




Last Updated on February 23, 2026


© 2026 NexusFi®, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Downloads - Top
no new posts