Skip to main content

Coefficient Of Variation

Quick Reference

PropertyValue
Dimensionquality
Categorystatistics
Versionv1.0
Output Columncoefficient_of_variation

Coefficient of variation: rolling_std(signal) / abs(rolling_mean(signal)) 鈥?relative dispersion

Formula

rolling_std(signal, window) / abs(rolling_mean(signal, window))

CDM Inputs

ColumnCDM TableDescription
signalcdm_*CDM source table

Parameters

ParameterTypeDefaultDescription
windowinteger10000Window for CV estimation

Output

Column: coefficient_of_variation

Relative standard deviation of the signal

Market Intuition & Trading Rationale

Coefficient of Variation (CV) measures relative dispersion: rolling_std / |rolling_mean|. It's the inverse of SNR 鈥?CV = 1/SNR. Low CV means the signal's mean dominates its variability (clean, reliable). High CV means the signal's variability dominates its mean (noisy, unreliable). CV is more intuitive than SNR for some applications because higher CV = worse quality (unlike SNR where higher = better).

CV is scale-free 鈥?it normalizes dispersion by the mean, making it comparable across signals with different units and magnitudes. A momentum signal measured in basis points and a volume signal measured in shares can be directly compared via CV. This makes CV the natural quality metric for cross-signal ranking within a feature set.

CV approaches infinity as the signal mean approaches zero 鈥?this is a feature, not a bug. A signal with near-zero mean and non-zero std has essentially no predictive content (it fluctuates around zero), and CV correctly identifies this as extremely poor quality.

Usage Cases

  • Cross-signal quality ranking: Rank all features in a feature set by CV. Lower CV = better quality. This provides a single, comparable quality score across signal, execution, and regime features.
  • Signal stability monitoring: Rising CV over time means the signal is deteriorating 鈥?either its mean is shrinking (edge decaying) or its variance is growing (increasing noise). Trigger investigation when CV crosses above its historical 90th percentile.
  • quality context: Used in depth_imbalance pack 鈥?CV of the depth ratio tells you whether the book imbalance is stable (low CV, deliberate positioning) or erratic (high CV, noise/spoofing).

YAML Definition

name: coefficient_of_variation
description: 'Coefficient of variation: rolling_std(signal) / abs(rolling_mean(signal))
?relative dispersion'
category: statistics
dimension: quality
version: v0.9.0 (Beta)
required_inputs:
- signal
output_column: coefficient_of_variation
output_description: Relative standard deviation of the signal
tags:
- quality
- stability
- statistics
parameters:
window:
type: integer
description: Window for CV estimation
required: false
default: 10000
formula: rolling_std(signal, window) / abs(rolling_mean(signal, window))