Has anyone tried to code VSA in python ?
Need help for creating a dashboard
Hi @Shailesh_Sharma ,
You can refer the below code:
import pandas as pd
def classify_vsa(df):
df = df.copy()
df['spread'] = df['high'] - df['low']
df['avg_volume'] = df['volume'].rolling(window=5, min_periods=1).mean()
df['close_pos'] = (df['close'] - df['low']) / df['spread'].replace(0, 1e-9)
def classify(row):
spread = row['spread']
volume = row['volume']
avg_vol = row['avg_volume']
close_pos = row['close_pos']
# WIDE SPREAD + HIGH VOLUME
if spread > df['spread'].mean() and volume > avg_vol * 1.5:
if close_pos > 0.8:
return 'Buying Climax'
elif close_pos < 0.2:
return 'Stopping Volume'
# NARROW SPREAD + LOW VOLUME
if spread < df['spread'].mean() * 0.5 and volume < avg_vol * 0.7:
if close_pos > 0.7:
return 'No Demand'
elif close_pos < 0.3:
return 'No Supply'
# Wide spread, high close, low volume → Hidden Buying
if spread > df['spread'].mean() and close_pos > 0.8 and volume < avg_vol:
return 'Hidden Buying'
return 'Normal'
df['vsa_signal'] = df.apply(classify, axis=1)
return df