Excess Volume Analysis (EVA) Indicator
https://tos.mx/H1GND3KTHEORY
The idea that the market buys in when it thinks that the price will move higher and sells when it thinks the price will move lower is fundamental to this indicator making sense. We assume that there is always a seller at a given transaction price and ignore asks beyond the movement of a candle.
We have a plethora of good volume indicators which consider up and down candle volumes as sums, as ratios, as totals, as just about anything you can think of. There is an excellent new indicator (VPN -- Volume Positive Negative) here: https://usethinkscript.com/threads/volume-positive-negative-vpn-indicator.6101/ and many, many more. My own Psychology of Volume indicator: https://usethinkscript.com/threads/the-psychology-of-volume.5189/ among them.
While the idea of volume analysis is well rehashed, I hope to have found a new angle on it. If we could quantify the pressure that exists on the market at some point in time by looking at the driver (force) that pushes higher or lower (volume), we might be able to discern a direction (or moreover a change of direction) that the market would like to make. That predictive aspect is what intrigued me about this idea. Perhaps, as the driver of price action, volume might be persuaded to give some insights into what traders think is going to happen next.
I have worked with candle wicks before in attempts to tease out market sentiment from the extraneous movement that price action takes. Some have been more successful than others. I am also fascinated with the idea of the information contained in volume and the force it applies to the market's movements.
PRACTICE
The premise behind this indicator is that the volume for any candle can be divided into three pieces: The first is the volume that took the price from the open to the close -- This is the Active Volume. The rest of the volume is divisible between volume at prices that were too high, and volume at prices that were too low. While we can't get at data easily using ThinkOrSwim to look at exactly where volume and sales were made inside a given candle, we can divide the candle into body and wicks (upper and lower) and divide the Volume into bins by the percentage of the total movement (High - Low) each of the three portions of the candle represent.
Having divided each candle into 3 pieces, and each candle's volume proportionately as well, we create an oscillator from the data and watch the interplay of the lines. By the nature of volume where sometime things can be zero, this indicator is not really bound by 0 and 100, though most of the time it will be.
EYE CANDY and EXPLANATIONS
EVA Indicator on /ES 3m
A. Upside Unused Volume (Green Line) is above Active Volume (blue line) and the Downside Unused Volume Line (Red) indicating that there is a desire to move higher. Both mirror the 50 line though, and there is little actual movement in the approach to B.
B. The Downside Unused Volume (Red Line) has moved above the Upside Unused Volume line (Green), though the Active Volume Line is higher than the 50 line indicating that there is volume energy in the movement in the price.
C. DANGER! The Downside line has spiked higher and is flirting with the 50 line, indicating that a lot of traders or algos think that there may not be upward pressure (volume) to sustain the price levels. The drop during box C is then reinforced as Active Volume comes in and the price plunges until the Upside Unused Volume line crosses above the Downside Line just at the end of the box.
EVA Indicator on TSLA 3m with Used Volume Line
A. Upside Unused is above Active Volume, showing a desire to move upward, but no energy to do so until B.
B. Active Volume takes over, and both Upside and Downside Unused are indeterminate around the 25 line until C.
C. The Downside Unused Volume has started to outweigh the Upside Unused Volume, indicative of a coming fall as traders feel the price should be pulled back down.
D. Fight over future direction with BOTH Used and Unused above the Active Volume Line. Upside is in control when the Active Volume line crosses above to take the market somewhere out of chop.
EVA Indicator on TSLA 3m without Used Volume Line
A. Without the Active Volume (Blue line) showing, the interplay of Upside and Downside can sometimes be clearer. Here we see a period of indecision as both Upside and Downside vie for control and influence.
B. Downside Unused Volume has taken over and is fairly constant as we move through this period.
C. After a brief period of indecision once again, Downside Unused Volume is again clearly in control, and the price moves downward.
CODE
Code:
###############################
#
# EVA
# Excess Volume Analysis V1
#
# Released to the UseThinkScript Community
# 2021-07-12
# by @mashume
#
# Released under GPLv2
#
###############################
declare lower;
input length = 14;
input average_type = AverageType.WEIGHTED;
def o = open;
def c = close;
def h = high;
def l = low;
def candle_range = h - l;
def candle_body_top = max(o, c);
def candle_body_bottom = min(o, c);
def upper_wick = h - candle_body_top;
def lower_wick = candle_body_bottom - l;
def upper_wick_percentage = upper_wick / candle_range;
def lower_wick_percentage = lower_wick / candle_range;
def overshoot_volume = upper_wick_percentage * volume;
def undershoot_volume = lower_wick_percentage * volume;
plot upper_bound = 50;
upper_bound.SetDefaultColor(GetColor(7));
upper_bound.SetStyle(CURve.MEDIUM_DASH);
plot lower_bound = 25;
lower_bound.SetDefaultColor(GetColor(7));
lower_bound.SetStyle(CURve.MEDIUM_DASH);
def used_volume = VOLUME - (undershoot_volume + overshoot_volume);
plot up_ratio = (sum(overshoot_volume, length) / MovingAverage(data = VOLUME, length = length, averageType = Average_Type)) / length * 100;
up_ratio.SetDefaultColor(GetColor(1));
up_ratio.SetLineWeight(2);
plot down_ratio = (sum(undershoot_volume, length) / MovingAverage(data = VOLUME, length = length, averageType = Average_Type)) / length * 100;
down_ratio.SetDefaultColor(GetColor(5));
down_ratio.SetLineWeight(2);
plot used_ratio = (sum(used_volume, length) / simpleMovingAvg(VOLUME, length)) / length * 100;
used_ratio.SetDefaultColor(GetColor(3));
As always, happy trading.
-mashume
Last edited: