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!
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 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 by a moderator: