VPA, VSA Volume Price/Spread Analysis

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