Liquidity composition / quantifytools

- Overview

Liquidity composition divides each candle into sections that are used to display transaction activity at price. In simple terms, an X-ray through candle is formed, revealing the orderflow that built the candle in greater detail. Liquidity composition consists of two main components, lots and columns. Lots and columns can be used to visualize user specified volume types, currently supporting net volume and volume delta. Lots and columns can be used to visualize same or different volume types, allowing a combination of volume footprint, volume delta footprint and volume profile in one single view. Liquidity composition principally works on any chart, whether that is equities, currencies, cryptocurrencies or commodities, even charts with no volume data (in which case volatility is used to approximate transaction activity). The script also works on any timeframe, from minute charts to monthly charts. Orderflow can be observed in real-time as it develops and none of the indications are repainted.

Example: Displaying same volume types on lots and columns

Example: Displaying different volume types on lots and columns

Liquidity composition supports user specified derivative data, such as point of control(s) and net activity coloring. Derivative data can be calculated based on either net volume or volume delta, resulting in different highlights.

With net volume, volume delta and derivative data in one view, key orderflow events such as delta imbalances, high volume nodes, low volume nodes and point of controls can be used to quickly identify accumulation/distribution, imbalances, unfinished/finished auctions and trapped traders.

Accessing script 🔑
See "Author's instructions" section, found at bottom of the script page.

Key takeaways
- Liquidity composition breaks down transaction activity at price, measured in net volume or volume delta
- Developing activity can be observed real-time, none of the indications are repainted
- Transaction activity is calculated using volumes accrued in lower timeframe price movements
- Lots and columns can be used to display same or different volume types (e.g. volume delta lots and net volume columns) in single view
- Users can specify derivative data such as volume delta POCs, net volume POC and net activity coloring
- For practical guide with practical examples, see last section

Orderflow data is estimated using lower timeframe price movement. While accurate and useful, it's important to note the calculations are estimations and are not based on orderbook data. Estimates are calculated by allotting volume developing on lower timeframe chart to its respective section based on closing price. Volume delta (difference between buyers/sellers) is calculated by subtracting down move volumes (sell volume) from up move volumes (buy volume). Accuracy of the orderflow estimations largely depends on quality of lower timeframe chart used for calculations, which is why this tool cannot be expected to work accurately on illiquid charts with broken data.

Liquidity composition does not provide a standalone trading strategy or financial advice. It also does not substitute knowing how to trade. Example charts and ideas shown for use cases are textbook examples under ideal conditions, not guaranteed to repeat as they are presented. Liquidity composition should be viewed as one tool providing one kind of evidence, to be used in conjunction with other means of analysis.

- Example charts

Chart #1: BTCUSDT

Chart #2: EURUSD

Chart #3: ES futures

- Calculations

By default, size of sections and lower timeframe accuracy are automatically determined for all charts and timeframes. Number of lower timeframe price moves used for calculating orderflow is kept at fixed value, by default set to 350. Accuracy value dictates how many lower timeframe candles are included in the calculation of volume at price. At 350, the script will always use 350 lower timeframe price movements in calculations (when possible). When calculated dynamic timeframe is less than 1 minute, the script switches to available seconds based timeframes. Minimum dynamic timeframe can be capped to 1 minute (as seconds based timeframes are not available for all plans) or dynamic timeframe can be overridden using an user specified timeframe.

Example: Calculating dynamic lower timeframe

Main chart: 4H / 240 minutes
Accuracy value: 100
Formula: 240 minutes / 100 = 2.4 minutes
Timeframe used for calculations = 2 minutes

Section size is automatically determined based on typical historical candle range, the bigger it is, the bigger the section size as well. Like dynamic timeframe, automatic section size can be manually overridden by user specified size expressed in ticks (minimum price unit). Users can also adjust sensitivity of automatic sizing by setting it higher (smaller sections, more detail and more noise) or lower (less sections, less detail and less noise). Section size and dynamic timeframe can be monitored via metric table.

Volume at price is calculated by allotting volume associated with a lower timeframe price movement to its respective section based on closing price (volume is stored to the section that covers closing price). When used on a chart with no volume data, volatility is used instead to determine likely magnitude of participation. Volume delta (difference between buyers/sellers) is calculated by subtracting down move volumes (sell volume) from up move volumes (buy volume). Volumes accrued in sections are monitored over a longer period of time to determine a "normal" amount of activity, which is then used to normalize accrued volumes by benchmarking them against historical values.

Volume values displayed on the left side represent how close or far volume traded at given section is to an extreme, represented by value of 10. The more value exceeds 10, the more extreme transaction activity is historically. The lesser the value, the less extreme (and therefore more typical) transaction activity is. Users can adjust sensitivity of volume extreme threshold, either by increasing it (more transaction activity is needed to constitute an extreme) or decreasing it (less transaction activity is needed to constitute an extreme).

Example: Interpreting volume scale

0 = Very little to no transaction activity compared to historical values
5 = Transaction activity equal to average historical values
10 = Transaction activity equal to an extreme in historical values
10+ = The more transaction activity exceeds value of 10, the more extreme it is historically

Accuracy of orderflow data largely depends on quality of lower timeframe data used in calculations. Sometimes quality of underlying lower timeframe data is insufficient due to suboptimal accuracy or broken lower timeframe data, usually caused by illiquid charts with gaps and inconsistent values. Therefore, one should always ensure the usage of most liquid chart available with no gaps in lower timeframe data. To combat poor orderflow data, a simple data quality check is conducted by calculating percentage of sections with volume data out of all available sections. Idea behind the test is to capture instances where unusual amount of sections are completely empty, most likely due to data gaps in LTF chart. E.g. 90% of sections hold some volume data, 10% are completely empty = 90% data quality score.

Data quality score should be viewed as a metric alerting when detail of underlying data is insufficient to consider accurate. When data quality score is slightly below threshold, lower timeframe chart used for calculations is likely fine, but accuracy value is too low. In this case, one should increase accuracy value or manually override used timeframe with a smaller one. When data quality score is well below threshold, lower timeframe chart used for calculations is likely broken and cannot be fixed. In this case, one should look for alternative charts with more reliable data (e.g. ES1! -> SPY, BITSTAMP:BTCUSD -> BINANCE:BTCUSDT).

Example: When insufficient data quality scores can/cannot be fixed

- Derivative data

Point of control
Point of control, referring to point in price where transaction activity is highest, can be calculated based on the volume type of lots or columns (based on net volume or volume delta). Depending on the calculation basis, displayed point of controls will vary. POC calculated based on net volume is no different from traditional POC, it is simply the section with highest amount of transaction activity, marked with an X. When calculating POC based on volume delta, the script will highlight two point of controls, named leading and losing point of control. Leading POC refers to lot with highest amount of volume delta, marked with an X. If leading POC was net buy volume, losing POC is marked on section with highest net sell volume, marked with S respectfully. Same logic applies in vice versa, if leading POC is net sell volume, losing POC is marked on highest buy volume section, using the letter B.

Net activity
Similarly to point of control calculation, net activity can be calculated based on either volume types, lots or columns. When calculating net activity based on net volume, candles will be colorized according to magnitude of total volume traded. When calculating net activity based on volume delta, candles will be colorized according to side with most volume traded (buyers or sellers). Net activity color can be applied on borders or body of a candle.

- Visuals

Lots, columns, candles and POCs can be colorized using a fixed color or a volume based dynamic color, with separate color options for buy side volume, sell side volume and net volume.

Metric table can be offsetted horizontally or vertically from any four corners of the chart, allowing space for tables from other scripts.

Table sizes, label sizes and offsets for visuals are fully customizable using settings menu.

- Practical guide

OHLC data (candles) is a simple condensed visualization of an auction market process. Candles show where price was in the beginning of an auction period (timeframe), the highest/lowest point and where price was at the end of an auction. The core utility of Liquidity composition is being able to view the same auction market process in much greater detail, revealing likely intention, effort and magnitude driving the process. All basic orderflow concepts, such as ones presented by auction market theory can be applied to Liquidity composition as well.

The most obvious and easy to spot use case for orderflow tools is identifying trapped traders/absorption, seen in high transaction activity at the very highs/lows of a candle or even better, at wicks. High participation at wicks can be used to identify forced orders absorbed into limit orders, idea behind being that when high transaction activity is placed at a wick, price went one direction with a lot of participation (high effort) and came right back up (low impact) within the same time period.

Absorption can show itself in many ways:

- Extreme buy volume sections at wick highs or buy side POC at wick highs
- Multiple, clustered high buy volume sections (but not extreme) at wick highs
- Positive net volume delta into a reversal down

- Extreme sell volume sections at wick lows or sell side POC at wick lows
- Multiple, clustered high sell volume sections (but not extreme) at wick lows
- Negative net volume delta into a reversal up

- Extreme net volume sections at or net volume POC at wick highs/lows
- Extreme net volume into a reversal up/down

For accurate analysis, orderflow based events should be viewed in the context of price action. To identify absorption, it's best to look for opportunities where an opposing trend is clearly in place, e.g. absorption into highs on an uptrend, absorption into lows on a downtrend. When price is ranging without a clear trend or there's no opposing trend, extreme activity at an extreme end of a candle might be aggressive participants attempting to initiate a new trend, rather than getting absorbed in the same sense. With enough effort put into pushing price to the opposite direction at overextended price, a shift in trend direction might be near.

Price action based levels are a great way to get context around orderflow events. Simple range highs/lows as a single data point serve as a high probability regimes for reversals, making them a great point of confluence for identifying trapped traders.

Low to zero volume sections can be used to identify points in price with little to no trading, leaving a volume null/void behind. Typically sections like these represent gaps on a lower timeframe chart, which can be used as reference levels for targets and support/resistance.

Net volume can be used for same purposes as above, but for determining general intention of market participants it's a much more suitable tool than volume delta. According to auction market theory, low/no participation is considered to reject prices and high participation is considered to accept prices. With this concept in mind, unfinished auctions occur when participation is high at highs or high at lows, idea behind being that participants are showing willingness and interest to trade at higher or lower prices. Auction is considered finished when the opposite is true, i.e. when participants are not showing willingness to trade at higher/lower prices. In general, direction of unfinished auctions can be expected to continue shortly and direction of unfinished auctions can be expected to hold.

While shape of volume delta and net volume are usually similar, they're not the same thing and do not represent the same event under the hood. Volume delta at 0 does not necessarily mean participation is 0, but can also mean high participation with equal amount of buying and selling. With this distinction in mind, using volume delta and net volume in tandem has the benefit of being able to identify points in price with a lot of up and down price movement packed into a small area, i.e. consolidation. Points in price where price hangs around for an extended period of time can be used to identify levels of interest for re-tests and breakout opportunities.

Release Notes:

Minor revisions to layout and default settings
Release Notes:

Minor changes to UI

✨ Get instant access to Premium toolstack for free: Liquidity prints, Price based concepts and Liquidity composition

✨ Start 14-day free trial: www.quantify.tools

Watch video tutorials covering our tools on Youtube ↓
Invite-only script

Access to this script is restricted to users authorized by the author and usually requires payment. You can add it to your favorites, but you will only be able to use it after requesting permission and obtaining it from its author. Contact quantifytools for more information, or follow the author's instructions below.

TradingView does not suggest paying for a script and using it unless you 100% trust its author and understand how the script works. In many cases you can find a good open-source alternative for free in our Community Scripts.


The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.

Author's instructions

Visit website: www.quantify.tools

Want to use this script on a chart?

Warning: please read before requesting access.