// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Acum08 //@version=6 strategy("Institutional Flow Volume Block Analyzer", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=3) // Inputs lookbackPeriod = input.int(20, "Volume Lookback Period") volumeThreshold = input.float(2.0, "Volume Spike Multiplier") minVolumeFilter = input.float(0, "Minimum Volume Filter (0 = Off)") impactDecayFactor = input.float(0.9, "Impact Decay Factor") signalThreshold = input.float(0.5, "Signal Threshold for Entries") useTrailingStop = input.bool(true, "Use Trailing Stop") stopPercent = input.float(1.5, "Trailing Stop %") // Calculate average volume avgVolume = ta.sma(volume, lookbackPeriod) // Identify high volume block trades isHighVolume = volume > avgVolume * volumeThreshold and (minVolumeFilter == 0 or volume >= minVolumeFilter) blockDirection = close > open ? 1 : close < open ? -1 : 0 // Calculate impact with decay for cumulative flow var float cumulativeImpact = 0.0 cumulativeImpact := cumulativeImpact * impactDecayFactor + (isHighVolume ? blockDirection : 0) // Entry conditions based on institutional flow momentum longEntry = ta.crossover(cumulativeImpact, signalThreshold) shortEntry = ta.crossunder(cumulativeImpact, -signalThreshold) // Strategy entries if (longEntry) strategy.entry("Long", strategy.long) if (shortEntry) strategy.entry("Short", strategy.short) // Exit condition: close opposite position if flow reverses if (cumulativeImpact < -signalThreshold) strategy.close("Long") if (cumulativeImpact > signalThreshold) strategy.close("Short") // Trailing stop management if useTrailingStop trailValue = stopPercent / 100 * close if strategy.position_size > 0 strategy.exit("Stop Long", "Long", trail_offset=trailValue, trail_points=trailValue) if strategy.position_size < 0 strategy.exit("Stop Short", "Short", trail_offset=trailValue, trail_points=trailValue) // Visuals: color the bars based on cumulative impact barcolor( cumulativeImpact > 0.5 ? color.new(color.green, 0) : cumulativeImpact > 0.1 ? color.new(color.lime, 50) : cumulativeImpact > 0 ? color.new(color.yellow, 80) : cumulativeImpact == 0 ? color.gray : cumulativeImpact > -0.1? color.new(color.orange, 80): cumulativeImpact > -0.5? color.new(color.red, 50) : color.new(color.red, 0)) // Plot cumulative impact line plot(cumulativeImpact, color=color.blue, title="Institutional Buying/Selling Momentum") // Plot volume spikes markers plotshape(isHighVolume and blockDirection == 1, title="Buy Spike", location=location.abovebar, style=shape.triangleup, size=size.tiny, color=color.green) plotshape(isHighVolume and blockDirection == -1, title="Sell Spike", location=location.belowbar, style=shape.triangledown, size=size.tiny, color=color.red)