
Capital-flow proxy combining price change with volume conviction — EMA-cascade cross or threshold detection.
CapFlow Proxy synthesizes a capital-flow signal from price + volume on BTC. The core idea: not every price move is meaningful — moves backed by high relative volume carry more directional conviction.
Calculation:
Mode crossover (default): Buy when Fast EMA crosses above Slow EMA, Sell when it crosses below.
Mode threshold: Buy when Fast EMA > +multiplier × stdDev, Sell when Fast EMA < −multiplier × stdDev. Different trade-off — fewer signals, higher per-trade conviction.
BTC-only because the parameters are calibrated to Bitcoin's volume profile (Binance spot). Altcoins have very different volume / price relationships (wash trading, lower liquidity) — the proxy doesn't transfer cleanly.
| Name | Default | Range | Description |
|---|---|---|---|
| Length (EMA period) | 14 | 5–50 | Fast EMA period applied to the smoothed weighted-flow series. |
| Multiplier | 1.5 | 0.5–5 | Threshold-mode: how many standard deviations above/below 0 to trigger entry/exit. Crossover mode: ignored. |
| Smoothing | 3 | 1–20 | Pre-smoothing window on the raw weighted-flow before EMA cascade. |
| Mode | crossover | – | `crossover`: Fast-vs-Slow MA cross. `threshold`: Fast-EMA vs ±multiplier × stdDev. |
The pre-baked mini-backtest is refreshed daily — check back soon or start a live run in the Arena.
Run in Arena →// Weighted capital flow per bar
for each bar:
priceChange = (close - prevClose) / prevClose
volRatio = min(volume / avgVolume(20), 3.0) // cap extreme spikes
flow[i] = priceChange * volRatio
// Smoothing + EMA cascade
flowSmooth = SMA(flow, smooth) // default 3
emaFast = EMA(flowSmooth, length) // default 14
emaSlow = EMA(flowSmooth, length * 2)
for each bar:
if mode == 'crossover':
if position.is_flat and crossover(emaFast, emaSlow): BUY
if position.is_long and crossunder(emaFast, emaSlow): SELL
if mode == 'threshold':
upper = +multiplier * stdDev(emaFast, 20)
lower = -multiplier * stdDev(emaFast, 20)
if position.is_flat and emaFast > upper: BUY
if position.is_long and emaFast < lower: SELLOBV (On-Balance Volume) sums signed volume but treats every direction-day equally — a 0.1% move on big volume contributes the same direction-vote as a 5% move. CapFlow weights the contribution by both relative volume AND magnitude of price change, so significant moves dominate the signal.
Capitulation / euphoria proxy from rolling 155-day price extremes — STH/LTH wave behavior without on-chain data.
Apply MACD logic to On-Balance Volume — combining volume confirmation with trend signals. Volume tells you the truth that price hides.
Check out our Strategy Insights Reports — pre-baked deep-dives with historical results, comparisons, and market context.