You’ve probably heard this word tossed around in trading circles — VWAP.
But what does it really mean?
VWAP = Volume Weighted Average Price
It tells you the average price a stock has traded at throughout the day, but weighted by volume.
Institutions — like mutual funds and FIIs — often use VWAP as a benchmark. Many of their buy/sell orders are designed to execute around VWAP so they don’t disturb the market.
That’s why VWAP-based algo strategies can be very powerful.
Let’s break it down simply:
Imagine a stock trades like this during the day:
| Time | Price | Volume |
|---|---|---|
9:15 | ₹100 | 1,000 |
10:00 | ₹102 | 2,000 |
11:00 | ₹98 | 500 |
The simple average price would be ₹100.
But VWAP would be weighted based on volume. So, the ₹102 trade has more “weight” than the ₹98 trade.
This gives a more accurate picture of where actual money is flowing.
Buy below VWAP, Sell above VWAP
If the stock is trading below VWAP, it’s considered cheap — algo may trigger a buy.
If it’s trading above VWAP, it’s seen as expensive — algo may sell.
Reversion to VWAP
Some algos assume price will revert to VWAP — especially after a sharp move.
Buy when it dips way below, and sell when it comes close.
VWAP Crossover
Buy when price crosses above VWAP (bullish momentum).
Sell or short when it crosses below VWAP
Example
Stock ABC has VWAP of ₹150.
At 10:30 AM:
→ It enters long → Targets ₹149–₹150 → Tight stoploss at ₹143
Quick trade, using volume-backed logic.
import yfinance as yf import pandas as pd
def calculate_vwap(df: pd.DataFrame) -> pd.Series: """Session-reset VWAP using typical price ((H+L+C)/3).""" tp = (df['High'] + df['Low'] + df['Close']) / 3 session = df.index.date cum_pv = (tp * df['Volume']).groupby(session).cumsum() cum_v = df['Volume'].groupby(session).cumsum() return cum_pv / cum_v # <- returns a Series
#Download recent intraday data symbol = "AAPL" # use NSE tickers like "RELIANCE.NS" if needed df = yf.download(symbol, period="5d", interval="5m")
#Calculate VWAP df['VWAP'] = calculate_vwap(df)
#Strategy parameters (mean-reversion toward VWAP) deviation_threshold = 3.0 #enter if price is >3% below VWAP stop_loss_points = 2.0 #fixed SL below entry target_offset_points = 0.5 #target slightly under VWAP
signals = [] for ts, row in df.iterrows(): vwap = row['VWAP'] price = row['Close'] if pd.notna(vwap) and price < vwap * (1 - deviation_threshold / 100.0): entry = price target = vwap - target_offset_points stop = entry - stop_loss_points signals.append({ 'Time': ts, 'Entry Price': round(entry, 2), 'VWAP': round(vwap, 2), 'Target': round(target, 2), 'Stop Loss': round(stop, 2), 'Comment': 'Long: far below VWAP, expecting bounce' })
signals_df = pd.DataFrame(signals) print(signals_df) signals_df.to_csv("vwap_mean_reversion_signals.csv", index=False)
Many algos also use multiple VWAPs:
VWAP strategies bring you closer to how smart money thinks. And with algos, you can act as fast as them.
Next, we’ll wrap this module with a cool, futuristic strategy — Sentiment-Driven Algos.
Disclaimer: This article is for informational purposes only and does not constitute financial advice. It is not produced by the desk of the Kotak Securities Research Team, nor is it a report published by the Kotak Securities Research Team. The information presented is compiled from several secondary sources available on the internet and may change over time. Investors should conduct their own research and consult with financial professionals before making any investment decisions. Read the full disclaimer here.
Investments in securities market are subject to market risks, read all the related documents carefully before investing. Brokerage will not exceed SEBI prescribed limit. The securities are quoted as an example and not as a recommendation. SEBI Registration No-INZ000200137 Member Id NSE-08081; BSE-673; MSE-1024, MCX-56285, NCDEX-1262.
Disclaimer: This article is for informational purposes only and does not constitute financial advice. It is not produced by the desk of the Kotak Securities Research Team, nor is it a report published by the Kotak Securities Research Team. The information presented is compiled from several secondary sources available on the internet and may change over time. Investors should conduct their own research and consult with financial professionals before making any investment decisions. Read the full disclaimer here.
Investments in securities market are subject to market risks, read all the related documents carefully before investing. Brokerage will not exceed SEBI prescribed limit. The securities are quoted as an example and not as a recommendation. SEBI Registration No-INZ000200137 Member Id NSE-08081; BSE-673; MSE-1024, MCX-56285, NCDEX-1262.
Explore our comprehensive video library that blends expert market insights with Kotak's innovative financial solutions to support your goals.