I like my indicators to be easy on the eyes and intuitive just by a quick look. So, here is a volume pressure indicator that not only measures the chart asset, but it calculates the Magnificent 7, QQQ, and SPY. When the colors are all the same enter the trade! Can be used on any time frame.
SQL:
declare lower;
# ──────────────────────────────────────────────────────────────────
# Inputs
# ──────────────────────────────────────────────────────────────────
input PaintBars = yes;
# Volume Pressure Inputs
input Volume_AvgType = AverageType.EXPONENTIAL;
input Volume_Length = 14;
input Volume_AvgLength = 200;
# Moving Average Inputs
input MovAvg_AvgType = AverageType.EXPONENTIAL;
input MovAvg_Price = close;
input MovAvg_Length = 20;
# ───────────────────────────────────────────────────────────────────────
# Raw Data
# ───────────────────────────────────────────────────────────────────────
def vol = volume;
def selling = vol * (high - close) / (high - low);
def buying = vol * (close - low) / (high - low);
def buyV_ma = MovingAverage(Volume_AvgType, buying, Volume_Length);
def sellV_ma = MovingAverage(Volume_AvgType, selling, Volume_Length);
def MA = MovingAverage(MovAvg_AvgType, MovAvg_Price, MovAvg_Length);
addlabel(yes, GetSymbol() +": " + round(buyV_ma - sellV_ma,0), if buyV_ma > sellV_ma then color.cyan else color.red);
plot Dot_Cyan = if buyV_ma > sellV_ma and close > MA then 1 else Double.NaN;
Dot_Cyan.SetPaintingStrategy(PaintingStrategy.Histogram);
Dot_Cyan.SetLineWeight(3);
Dot_Cyan.AssignValueColor(Color.CYAN);
plot Dot_Red = if buyV_ma < sellV_ma and close < MA then 1 else Double.NaN;
Dot_Red.SetPaintingStrategy(PaintingStrategy.Histogram);
Dot_Red.SetLineWeight(3);
Dot_Red.AssignValueColor(Color.RED);
plot pos2Line = 2;
plot pos1Line = 1;
plot ZeroLine = 0;
plot neg1Line = -1;
plot neg2Line = -2;
AssignPriceColor(
if PaintBars and !IsNaN(Dot_Cyan) then Color.CYAN
else if PaintBars and !IsNaN(Dot_Red) then Color.RED
else Color.GRAY
);
# ────────────────────────────────────────────────────────────────────────
# 4) Magnificent Seven aggregate dots at 0/100
# ────────────────────────────────────────────────────────────────────────
script VolumePressure {
input sym = "AAPL";
def o = open(sym);
def h = high(sym);
def l = low(sym);
def c = close(sym);
def v = volume(sym);
def uw = if c>o then h-c else h-o;
def lw = if c>o then o-l else c-l;
def sp = h - l;
def bd = sp - (uw + lw);
def pctB= bd / sp;
def pctW= (uw + lw) / sp;
def buyR = if c>o then (pctB + pctW/2) * v else (pctW/2) * v;
def sellR = if c<o then (pctB + pctW/2) * v else (pctW/2) * v;
plot Buy = MovingAverage(AverageType.EXPONENTIAL, buyR, 14);
plot Sell = MovingAverage(AverageType.EXPONENTIAL, sellR, 14);
}
def avgBuy = ( VolumePressure("AAPL").Buy +
VolumePressure("MSFT").Buy +
VolumePressure("GOOGL").Buy +
VolumePressure("AMZN").Buy +
VolumePressure("META").Buy +
VolumePressure("TSLA").Buy +
VolumePressure("NVDA").Buy ) / 7;
def avgSell = ( VolumePressure("AAPL").Sell +
VolumePressure("MSFT").Sell +
VolumePressure("GOOGL").Sell +
VolumePressure("AMZN").Sell +
VolumePressure("META").Sell +
VolumePressure("TSLA").Sell +
VolumePressure("NVDA").Sell ) / 7;
addlabel(yes, "Mag 7: " + round(avgBuy - avgSell,0), if avgBuy > avgSell then color.cyan else color.red);
plot Cyan_M7 = if avgBuy > avgSell then -1 else Double.NaN;
Cyan_M7.SetPaintingStrategy(PaintingStrategy.Histogram);
Cyan_M7.SetLineWeight(3);
Cyan_M7.AssignValueColor(Color.CYAN);
plot Red_M7 = if avgBuy < avgSell then -1 else Double.NaN;
Red_M7.SetPaintingStrategy(PaintingStrategy.Histogram);
Red_M7.SetLineWeight(3);
Red_M7.AssignValueColor(Color.RED);
def qqqBuy = VolumePressure("QQQ").Buy;
def qqqSell = VolumePressure("QQQ").Sell;
addlabel(yes, "QQQ: " + round(qqqBuy - qqqSell,0), if qqqBuy > qqqSell then color.cyan else color.red);
plot Cyan_QQQ = if qqqBuy > qqqSell then -2 else Double.NaN;
Cyan_QQQ.SetPaintingStrategy(PaintingStrategy.Histogram);
Cyan_QQQ.SetLineWeight(3);
Cyan_QQQ.AssignValueColor(Color.CYAN);
plot Red_QQQ = if qqqBuy < qqqSell then -2 else Double.NaN;
Red_QQQ.SetPaintingStrategy(PaintingStrategy.Histogram);
Red_QQQ.SetLineWeight(3);
Red_QQQ.AssignValueColor(Color.RED);
def spyBuy = VolumePressure("SPY").Buy;
def spySell = VolumePressure("SPY").Sell;
addlabel(yes, "SPY: " + round(spyBuy - spySell,0), if spyBuy > spySell then color.cyan else color.red);
plot Cyan_SPY = if spyBuy > spySell then -3 else Double.NaN;
Cyan_SPY.SetPaintingStrategy(PaintingStrategy.Histogram);
Cyan_SPY.SetLineWeight(3);
Cyan_SPY.AssignValueColor(Color.CYAN);
plot Red_SPY = if spyBuy < spySell then -3 else Double.NaN;
Red_SPY.SetPaintingStrategy(PaintingStrategy.Histogram);
Red_SPY.SetLineWeight(3);
Red_SPY.AssignValueColor(Color.RED);
Last edited: