Volume Impetus Index (VI%)

Remove from Favorite Scripts Add to Favorite Scripts
// Created by @pequet ( April 4 2016 
// Inspired by a concept by @CRInvestor (
// MIT License
// @version=2
// This Index is related to my Volume Impetus Indicator (The VIMP) available here: 
// The Volume Impetus Index (VI%) is simply the bullish percentage of the running 
// total of the past bullish and bearish volumes. An exponential moving average is 
// then calculated, because everybody loves exponential moving averages.  
// The sample length, normal or weighted average, EMA length, upper and lower 
// bands are all adjustable.  
// As a visual clue the background colour of the indicator represents the relative 
// positions of the VI% in relation to its moving average, and of the moving 
// average relative to the "50%" point (also adjustable).

study(title="Volume Impetus Index (VI%)", shorttitle="VI% v1.0") 

// 1. Indicator 
// inputs
vixSampleLength = input(14, title="Sample Length", minval=1)
vixWeighted = input(true, title="Weighted Average") 
vixEMALength = input(21, title="EMA", minval=1)
vixLowerBand = input(0.2, type=float, title="Lower Band", minval=0, maxval=1)
vixMiddleBand = input(0.5, type=float, title="Middle Band", minval=0, maxval=1)
vixUpperBand = input(0.8, type=float, title="Upper Band", minval=0, maxval=1)
// our two protagonists
vimpBullVolume = iff(close > open, volume, na) 
vimpBearVolume = iff(close < open, volume, na)  
// for confirmations we need to fill in the n/a values with the trailing volume
vixBullVolumeFill = iff(vimpBullVolume, vimpBullVolume, vixBullVolumeFill[1])
vixBearVolumeFill = iff(vimpBearVolume, vimpBearVolume, vixBearVolumeFill[1])
// add the volumes 
vixBullsTotal = 0, vixBearsTotal = 0, vixMultiplierTotal = 0
for i = 1 to vixSampleLength  
    multiplier = 1 + iff(vixWeighted, vixSampleLength-i, 0) 
    vixBullsTotal := nz(vixBullsTotal + multiplier * nz(vimpBullVolume[vixSampleLength-i]))  
    vixBearsTotal := nz(vixBearsTotal + multiplier * nz(vimpBearVolume[vixSampleLength-i]))  
    vixMultiplierTotal := vixMultiplierTotal + multiplier
vixBullsTotal := vixBullsTotal / vixMultiplierTotal
vixBearsTotal := vixBearsTotal / vixMultiplierTotal
// if there is no volume at all we repeat the previous bar value 
vix = iff(vixBullsTotal+vixBearsTotal>0, vixBullsTotal/(vixBullsTotal+vixBearsTotal), vix[1])
vixPlotObj = plot(vix, style=line, color=#999999, transp=0, linewidth=1, title="VI%") 
// ema 
vixEMA = ema(vix, vixEMALength)
vixEMAPlotObj = plot(vixEMA, color=#ff0000, transp=10, linewidth=2, title="VI% EMA")  
// bands
hLower = hline(vixLowerBand, title="Lower Band")
hMiddle = hline(vixMiddleBand, title="Middle Band")
hUpper = hline(vixUpperBand, title="Upper Band")

// 2. Conditions 
// vix above ema
vixOnTop = vix > vixEMA
// bull market
vixEMABull = vixEMA > vixMiddleBand

// 3. Background 
bgcolor(color=vixEMABull ? vixOnTop ? lime : yellow : vixOnTop ? orange: red, transp=80, offset=0, title="VI%/EMA/50%")

// stay tuned for more
EN English
EN English (UK)
EN English (IN)
DE Deutsch
FR Français
ES Español
IT Italiano
PL Polski
SV Svenska
TR Türkçe
RU Русский
PT Português
ID Bahasa Indonesia
MS Bahasa Melayu
TH ภาษาไทย
VI Tiếng Việt
JA 日本語
KO 한국어
ZH 简体中文
ZH 繁體中文
AR العربية
Home Stock Screener Forex Signal Finder Cryptocurrency Signal Finder Economic Calendar How It Works Chart Features House Rules Moderators Website & Broker Solutions Widgets Stock Charting Library Feature Request Blog & News FAQ Help & Wiki Twitter
Profile Profile Settings Account and Billing My Support Tickets Contact Support Ideas Published Followers Following Private Messages Chat Sign Out