fawp_index.market — Rolling FAWP Market Scanner
Scan a price (and optionally volume) DataFrame for FAWP regimes — windows
where directional forecastability persists while market-impact effectiveness
has already collapsed.
Financial interpretation
| Channel |
Signal |
Meaning |
| pred |
I(returnₜ ; returnₜ₊Δ) |
Is the market still forecastable? |
| steer |
I(signed_flowₜ ; returnₜ₊τ) |
Do your orders still move price? |
A FAWP window means you can still forecast direction, but your orders
no longer move price the way they used to.
Quick start
import pandas as pd
from fawp_index.market import scan_fawp_market
df = pd.read_csv("SPY.csv", parse_dates=["Date"], index_col="Date")
# Fast scan (no null correction):
scan = scan_fawp_market(df, ticker="SPY", close_col="Close", volume_col="Volume")
# Rigorous (shuffle + shift null at every tau):
scan = scan_fawp_market(df, ticker="SPY", n_null=50)
print(scan.summary())
scan.plot(prices=df["Close"])
scan.to_html("spy_fawp.html")
scan.to_csv("spy_fawp.csv")
scan.to_json("spy_fawp.json")
CLI
fawp-index market SPY.csv --close Close --volume Volume --out report.html
fawp-index market BTC.csv --window 180 --tau-max 30 --out btc_fawp.json
Key parameters
| Parameter |
Default |
Description |
window |
252 |
Rolling window in bars (≈1 year of daily data) |
step |
5 |
Bars to advance between scans (weekly cadence) |
delta_pred |
20 |
Forecast horizon Δ (≈1 month) |
tau_max |
40 |
Maximum steering lag to test |
epsilon |
0.01 |
MI threshold for FAWP condition |
n_null |
0 |
Null permutations. 0 = fast; 50+ = rigorous |
beta_null |
0.99 |
Conservative null quantile |
Works without volume
# Steer channel falls back to lagged-return autocorrelation
scan = scan_fawp_market(df, close_col="Close", volume_col=None)
Custom signal columns
# Supply your own predictor and steering signals
scan = scan_fawp_market(
df,
pred_col = "my_forecast_signal",
steer_col = "my_impact_signal",
)
MarketScanSeries properties
| Property |
Description |
.windows |
List of MarketWindowResult (one per scan step) |
.dates |
DatetimeIndex of window end dates |
.regime_scores |
Continuous FAWP signal 0–1 per window |
.fawp_flags |
Boolean array |
.fawp_fraction |
Fraction of windows flagged |
.latest |
Most recent window |
.peak |
Window with highest regime score |
.fawp_windows |
All flagged windows |
Exports
| Method |
Output |
.to_html(path) |
Self-contained HTML report with embedded chart |
.to_csv(path) |
Tidy per-window DataFrame as CSV |
.to_json(path) |
Full result with metadata as JSON |
.plot(prices=...) |
Two-panel matplotlib figure |