From 18694e337ec8355f40a15dc2f542e59eb6e77df0 Mon Sep 17 00:00:00 2001 From: Miha Kralj Date: Mon, 2 Mar 2026 10:00:29 -0800 Subject: [PATCH] feat: add length->period kwargs alias across all 168 indicator functions for pandas-ta compat --- python/quantalib/channels.py | 34 ++++++++++----------- python/quantalib/core.py | 4 +-- python/quantalib/cycles.py | 2 +- python/quantalib/dynamics.py | 28 ++++++++--------- python/quantalib/errors.py | 44 +++++++++++++-------------- python/quantalib/filters.py | 22 +++++++------- python/quantalib/momentum.py | 8 ++--- python/quantalib/numerics.py | 20 ++++++------ python/quantalib/oscillators.py | 16 +++++----- python/quantalib/reversals.py | 2 +- python/quantalib/statistics.py | 52 ++++++++++++++++---------------- python/quantalib/trends_fir.py | 26 ++++++++-------- python/quantalib/trends_iir.py | 40 ++++++++++++------------ python/quantalib/volatility.py | 28 ++++++++--------- python/quantalib/volume.py | 10 +++--- python/tools/add_length_alias.py | 43 ++++++++++++++++++++++++++ 16 files changed, 211 insertions(+), 168 deletions(-) create mode 100644 python/tools/add_length_alias.py diff --git a/python/quantalib/channels.py b/python/quantalib/channels.py index 71d5a1d8..b2725b5e 100644 --- a/python/quantalib/channels.py +++ b/python/quantalib/channels.py @@ -36,7 +36,7 @@ __all__ = [ def aberr(close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Aberration Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) src, idx = _arr(close) @@ -50,7 +50,7 @@ def aberr(close: object, period: int = 14, multiplier: float = 2.0, offset: int def accbands(high: object, low: object, close: object, period: int = 14, factor: float = 2.0, offset: int = 0, **kwargs) -> object: """Acceleration Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) factor = float(factor) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) @@ -64,7 +64,7 @@ def accbands(high: object, low: object, close: object, period: int = 14, factor: def apz(open: object, high: object, low: object, close: object, volume: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Adaptive Price Zone.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) @@ -79,7 +79,7 @@ def apz(open: object, high: object, low: object, close: object, volume: object, def dchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Donchian Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -92,7 +92,7 @@ def dchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwa def decaychannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Decay Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -105,7 +105,7 @@ def decaychannel(high: object, low: object, period: int = 14, offset: int = 0, * def fcb(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Fractal Chaos Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -118,7 +118,7 @@ def fcb(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) def jbands(close: object, period: int = 14, phase: int = 0, offset: int = 0, **kwargs) -> object: """J-Line Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) phase = int(phase) offset = int(offset) src, idx = _arr(close) @@ -132,7 +132,7 @@ def jbands(close: object, period: int = 14, phase: int = 0, offset: int = 0, **k def kchannel(high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Keltner Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) @@ -146,7 +146,7 @@ def kchannel(high: object, low: object, close: object, period: int = 14, multipl def maenv(close: object, period: int = 14, percentage: float = 2.5, maType: int = 0, offset: int = 0, **kwargs) -> object: """Moving Average Envelope.""" - period = int(period) + period = int(kwargs.get("length", period)) percentage = float(percentage) maType = int(maType) offset = int(offset) @@ -161,7 +161,7 @@ def maenv(close: object, period: int = 14, percentage: float = 2.5, maType: int def mmchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Min-Max Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -173,7 +173,7 @@ def mmchannel(high: object, low: object, period: int = 14, offset: int = 0, **kw def pchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Price Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -186,7 +186,7 @@ def pchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwa def regchannel(close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Regression Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) src, idx = _arr(close) @@ -200,7 +200,7 @@ def regchannel(close: object, period: int = 14, multiplier: float = 2.0, offset: def sdchannel(close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Standard Deviation Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) src, idx = _arr(close) @@ -214,7 +214,7 @@ def sdchannel(close: object, period: int = 14, multiplier: float = 2.0, offset: def starchannel(high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, atrPeriod: int = 22, offset: int = 0, **kwargs) -> object: """Stoller Average Range Channel (STARC).""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) atrPeriod = int(atrPeriod) offset = int(offset) @@ -229,7 +229,7 @@ def starchannel(high: object, low: object, close: object, period: int = 14, mult def stbands(high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """SuperTrend Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) @@ -243,7 +243,7 @@ def stbands(high: object, low: object, close: object, period: int = 14, multipli def ttm_lrc(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """TTM Linear Regression Channel.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -258,7 +258,7 @@ def ttm_lrc(close: object, period: int = 14, offset: int = 0, **kwargs) -> objec def ubands(close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Upper/Lower Bands.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) src, idx = _arr(close) diff --git a/python/quantalib/core.py b/python/quantalib/core.py index abebd065..2390cb26 100644 --- a/python/quantalib/core.py +++ b/python/quantalib/core.py @@ -34,7 +34,7 @@ def ha(open: object, high: object, low: object, close: object, offset: int = 0, def midpoint(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Midpoint = src[i] over period.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -45,7 +45,7 @@ def midpoint(close: object, period: int = 14, offset: int = 0, **kwargs) -> obje def midprice(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mid Price = (High+Low)/2 over period.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) diff --git a/python/quantalib/cycles.py b/python/quantalib/cycles.py index c4f6be5a..f040783d 100644 --- a/python/quantalib/cycles.py +++ b/python/quantalib/cycles.py @@ -100,7 +100,7 @@ def solar(close: object, offset: int = 0, **kwargs) -> object: def ssfdsp(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Supersmoother DSP.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) diff --git a/python/quantalib/dynamics.py b/python/quantalib/dynamics.py index 27c448e7..af81577e 100644 --- a/python/quantalib/dynamics.py +++ b/python/quantalib/dynamics.py @@ -34,7 +34,7 @@ __all__ = [ def adx(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Average Directional Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -45,7 +45,7 @@ def adx(high: object, low: object, close: object, period: int = 14, offset: int def adxr(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """ADX Rating.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -86,7 +86,7 @@ def amat(close: object, fastPeriod: int = 12, slowPeriod: int = 26, offset: int def aroon(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Aroon.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -97,7 +97,7 @@ def aroon(high: object, low: object, period: int = 14, offset: int = 0, **kwargs def aroonosc(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Aroon Oscillator.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low) n = len(h) @@ -108,7 +108,7 @@ def aroonosc(high: object, low: object, period: int = 14, offset: int = 0, **kwa def chop(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Choppiness Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -120,7 +120,7 @@ def chop(open: object, high: object, low: object, close: object, volume: object, def dmx(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Directional Movement Extended.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -131,7 +131,7 @@ def dmx(high: object, low: object, close: object, period: int = 14, offset: int def dx(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Directional Movement Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -142,7 +142,7 @@ def dx(high: object, low: object, close: object, period: int = 14, offset: int = def ghla(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Gann Hi-Lo Activator.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -196,7 +196,7 @@ def impulse(close: object, emaPeriod: int = 13, macdFast: int = 12, macdSlow: in def pfe(close: object, period: int = 14, smoothPeriod: int = 5, offset: int = 0, **kwargs) -> object: """Polarized Fractal Efficiency.""" - period = int(period) + period = int(kwargs.get("length", period)) smoothPeriod = int(smoothPeriod) offset = int(offset) src, idx = _arr(close) @@ -208,7 +208,7 @@ def pfe(close: object, period: int = 14, smoothPeriod: int = 5, offset: int = 0, def qstick(open: object, high: object, low: object, close: object, volume: object, period: int = 14, useEma: int = 0, offset: int = 0, **kwargs) -> object: """QStick.""" - period = int(period) + period = int(kwargs.get("length", period)) useEma = int(useEma) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) @@ -233,7 +233,7 @@ def ravi(close: object, shortPeriod: int = 12, longPeriod: int = 26, offset: int def supertrend(open: object, high: object, low: object, close: object, volume: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """SuperTrend.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) @@ -262,7 +262,7 @@ def ttm_squeeze(open: object, high: object, low: object, close: object, volume: def ttm_trend(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """TTM Trend.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -274,7 +274,7 @@ def ttm_trend(open: object, high: object, low: object, close: object, volume: ob def vhf(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Vertical Horizontal Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -285,7 +285,7 @@ def vhf(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def vortex(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Vortex Indicator.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) diff --git a/python/quantalib/errors.py b/python/quantalib/errors.py index b9ecde7a..e80c9acb 100644 --- a/python/quantalib/errors.py +++ b/python/quantalib/errors.py @@ -39,7 +39,7 @@ __all__ = [ def huber(actual: object, predicted: object, period: int = 14, delta: float = 1.35, offset: int = 0, **kwargs) -> object: """Huber Loss.""" - period = int(period) + period = int(kwargs.get("length", period)) delta = float(delta) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) @@ -51,7 +51,7 @@ def huber(actual: object, predicted: object, period: int = 14, delta: float = 1. def logcosh(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Log-Cosh Loss.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -62,7 +62,7 @@ def logcosh(actual: object, predicted: object, period: int = 14, offset: int = 0 def maape(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Arctangent Absolute Percentage Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -73,7 +73,7 @@ def maape(actual: object, predicted: object, period: int = 14, offset: int = 0, def mapd(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Absolute Percentage Deviation.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -84,7 +84,7 @@ def mapd(actual: object, predicted: object, period: int = 14, offset: int = 0, * def mase(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Absolute Scaled Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -95,7 +95,7 @@ def mase(actual: object, predicted: object, period: int = 14, offset: int = 0, * def mdae(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Median Absolute Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -106,7 +106,7 @@ def mdae(actual: object, predicted: object, period: int = 14, offset: int = 0, * def mdape(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Median Absolute Percentage Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -117,7 +117,7 @@ def mdape(actual: object, predicted: object, period: int = 14, offset: int = 0, def me(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -128,7 +128,7 @@ def me(actual: object, predicted: object, period: int = 14, offset: int = 0, **k def mpe(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Percentage Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -139,7 +139,7 @@ def mpe(actual: object, predicted: object, period: int = 14, offset: int = 0, ** def mrae(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Relative Absolute Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -150,7 +150,7 @@ def mrae(actual: object, predicted: object, period: int = 14, offset: int = 0, * def msle(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Squared Logarithmic Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -161,7 +161,7 @@ def msle(actual: object, predicted: object, period: int = 14, offset: int = 0, * def pseudohuber(actual: object, predicted: object, period: int = 14, delta: float = 1.35, offset: int = 0, **kwargs) -> object: """Pseudo-Huber Loss.""" - period = int(period) + period = int(kwargs.get("length", period)) delta = float(delta) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) @@ -173,7 +173,7 @@ def pseudohuber(actual: object, predicted: object, period: int = 14, delta: floa def quantileloss(actual: object, predicted: object, period: int = 14, quantile: float = 0.5, offset: int = 0, **kwargs) -> object: """Quantile Loss (Pinball Loss).""" - period = int(period) + period = int(kwargs.get("length", period)) quantile = float(quantile) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) @@ -185,7 +185,7 @@ def quantileloss(actual: object, predicted: object, period: int = 14, quantile: def rae(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Relative Absolute Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -196,7 +196,7 @@ def rae(actual: object, predicted: object, period: int = 14, offset: int = 0, ** def rmsle(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Root Mean Squared Logarithmic Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -207,7 +207,7 @@ def rmsle(actual: object, predicted: object, period: int = 14, offset: int = 0, def rse(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Relative Squared Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -218,7 +218,7 @@ def rse(actual: object, predicted: object, period: int = 14, offset: int = 0, ** def rsquared(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """R-Squared (Coefficient of Determination).""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -229,7 +229,7 @@ def rsquared(actual: object, predicted: object, period: int = 14, offset: int = def smape(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Symmetric Mean Absolute Percentage Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -240,7 +240,7 @@ def smape(actual: object, predicted: object, period: int = 14, offset: int = 0, def theilu(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Theil U Statistic (Error).""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -251,7 +251,7 @@ def theilu(actual: object, predicted: object, period: int = 14, offset: int = 0, def tukeybiweight(actual: object, predicted: object, period: int = 14, c: float = 4.685, offset: int = 0, **kwargs) -> object: """Tukey Biweight Loss.""" - period = int(period) + period = int(kwargs.get("length", period)) c = float(c) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) @@ -263,7 +263,7 @@ def tukeybiweight(actual: object, predicted: object, period: int = 14, c: float def wmape(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Weighted Mean Absolute Percentage Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) @@ -274,7 +274,7 @@ def wmape(actual: object, predicted: object, period: int = 14, offset: int = 0, def wrmse(actual: object, predicted: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Weighted Root Mean Squared Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) a, idx = _arr(actual); p, _ = _arr(predicted) n = len(a) diff --git a/python/quantalib/filters.py b/python/quantalib/filters.py index 138f3086..486d2e7f 100644 --- a/python/quantalib/filters.py +++ b/python/quantalib/filters.py @@ -127,7 +127,7 @@ def lms(close: object, order: int = 16, mu: float = 0.5, offset: int = 0, **kwar def loess(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """LOESS Smoother.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -138,7 +138,7 @@ def loess(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def modf(close: object, period: int = 14, beta: float = 0.8, feedback: int = 0, fbWeight: float = 0.5, offset: int = 0, **kwargs) -> object: """Modified Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) beta = float(beta) feedback = int(feedback) fbWeight = float(fbWeight) @@ -152,7 +152,7 @@ def modf(close: object, period: int = 14, beta: float = 0.8, feedback: int = 0, def notch(close: object, period: int = 14, q: float = 1.0, offset: int = 0, **kwargs) -> object: """Notch Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) q = float(q) offset = int(offset) src, idx = _arr(close) @@ -164,7 +164,7 @@ def notch(close: object, period: int = 14, q: float = 1.0, offset: int = 0, **kw def nw(close: object, period: int = 64, bandwidth: float = 8.0, offset: int = 0, **kwargs) -> object: """Nadaraya-Watson Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) bandwidth = float(bandwidth) offset = int(offset) src, idx = _arr(close) @@ -201,7 +201,7 @@ def rls(close: object, order: int = 16, lam: float = 0.99, offset: int = 0, **kw def rmed(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Running Median Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -224,7 +224,7 @@ def roofing(close: object, hpLength: int = 48, ssLength: int = 10, offset: int = def sgf(close: object, period: int = 14, polyOrder: int = 2, offset: int = 0, **kwargs) -> object: """Savitzky-Golay Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) polyOrder = int(polyOrder) offset = int(offset) src, idx = _arr(close) @@ -249,7 +249,7 @@ def spbf(close: object, shortPeriod: int = 40, longPeriod: int = 60, rmsPeriod: def ssf2(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Super Smoother (2-pole).""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -260,7 +260,7 @@ def ssf2(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def ssf3(close: object, period: int = 14, initialLast: float = 0.0, offset: int = 0, **kwargs) -> object: """Super Smoother (3-pole).""" - period = int(period) + period = int(kwargs.get("length", period)) initialLast = float(initialLast) offset = int(offset) src, idx = _arr(close) @@ -272,7 +272,7 @@ def ssf3(close: object, period: int = 14, initialLast: float = 0.0, offset: int def usf(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Universal Smoother Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -283,7 +283,7 @@ def usf(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def voss(close: object, period: int = 14, predict: int = 3, bandwidth: float = 0.25, offset: int = 0, **kwargs) -> object: """Voss Predictor.""" - period = int(period) + period = int(kwargs.get("length", period)) predict = int(predict) bandwidth = float(bandwidth) offset = int(offset) @@ -308,7 +308,7 @@ def wavelet(close: object, levels: int = 4, threshMult: float = 1.0, offset: int def wiener(close: object, period: int = 14, smoothPeriod: int = 10, offset: int = 0, **kwargs) -> object: """Wiener Filter.""" - period = int(period) + period = int(kwargs.get("length", period)) smoothPeriod = int(smoothPeriod) offset = int(offset) src, idx = _arr(close) diff --git a/python/quantalib/momentum.py b/python/quantalib/momentum.py index 801d984b..8aeafc07 100644 --- a/python/quantalib/momentum.py +++ b/python/quantalib/momentum.py @@ -43,7 +43,7 @@ def bop(open: object, high: object, low: object, close: object, offset: int = 0, def cci(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Commodity Channel Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -103,7 +103,7 @@ def prs(x: object, y: object, smoothPeriod: int = 5, offset: int = 0, **kwargs) def rocp(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rate of Change (Percentage).""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -114,7 +114,7 @@ def rocp(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def rocr(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rate of Change (Ratio).""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -137,7 +137,7 @@ def sam(close: object, alpha: float = 0.07, cutoff: int = 8, offset: int = 0, ** def vel(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Velocity.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) diff --git a/python/quantalib/numerics.py b/python/quantalib/numerics.py index 80aaafb8..d61d0627 100644 --- a/python/quantalib/numerics.py +++ b/python/quantalib/numerics.py @@ -52,7 +52,7 @@ def fdist(close: object, d1: int = 1, d2: int = 1, period: int = 14, offset: int """F-Distribution.""" d1 = int(d1) d2 = int(d2) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -78,7 +78,7 @@ def gammadist(close: object, alpha: float = 2.0, beta: float = 1.0, period: int """Gamma Distribution.""" alpha = float(alpha) beta = float(beta) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -89,7 +89,7 @@ def gammadist(close: object, alpha: float = 2.0, beta: float = 1.0, period: int def highest(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Highest Value.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -136,7 +136,7 @@ def lognormdist(close: object, mu: float = 0.0, sigma: float = 1.0, period: int """Log-Normal Distribution.""" mu = float(mu) sigma = float(sigma) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -157,7 +157,7 @@ def logtrans(close: object, offset: int = 0, **kwargs) -> object: def lowest(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Lowest Value.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -168,7 +168,7 @@ def lowest(close: object, period: int = 14, offset: int = 0, **kwargs) -> object def normalize(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Normalization.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -181,7 +181,7 @@ def normdist(close: object, mu: float = 0.0, sigma: float = 1.0, period: int = 1 """Normal Distribution.""" mu = float(mu) sigma = float(sigma) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -193,7 +193,7 @@ def normdist(close: object, mu: float = 0.0, sigma: float = 1.0, period: int = 1 def poissondist(close: object, lam: float = 1.0, period: int = 14, threshold: int = 5, offset: int = 0, **kwargs) -> object: """Poisson Distribution.""" lam = float(lam) - period = int(period) + period = int(kwargs.get("length", period)) threshold = int(threshold) offset = int(offset) src, idx = _arr(close) @@ -248,7 +248,7 @@ def sqrttrans(close: object, offset: int = 0, **kwargs) -> object: def tdist(close: object, nu: int = 10, period: int = 14, offset: int = 0, **kwargs) -> object: """Student's t-Distribution.""" nu = int(nu) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -261,7 +261,7 @@ def weibulldist(close: object, k: float = 1.5, lam: float = 1.0, period: int = 1 """Weibull Distribution.""" k = float(k) lam = float(lam) - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) diff --git a/python/quantalib/oscillators.py b/python/quantalib/oscillators.py index 55945662..687819d9 100644 --- a/python/quantalib/oscillators.py +++ b/python/quantalib/oscillators.py @@ -108,7 +108,7 @@ def coppock(close: object, longRoc: int = 14, shortRoc: int = 11, wmaPeriod: int def eri(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Elder Ray Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -119,7 +119,7 @@ def eri(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def fi(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Force Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -146,7 +146,7 @@ def gator(close: object, jawPeriod: int = 13, jawShift: int = 8, teethPeriod: in def imi(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Intraday Momentum Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -215,7 +215,7 @@ def mstoch(close: object, stochLength: int = 20, hpLength: int = 48, ssLength: i def pgo(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Pretty Good Oscillator.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -239,7 +239,7 @@ def qqe(close: object, rsiPeriod: int = 14, smoothFactor: int = 5, qqeFactor: fl def reverseema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Reverse EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -250,7 +250,7 @@ def reverseema(close: object, period: int = 14, offset: int = 0, **kwargs) -> ob def rvgi(open: object, high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Relative Vigor Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(o) @@ -277,7 +277,7 @@ def smi(high: object, low: object, close: object, kPeriod: int = 14, kSmooth: in def squeeze(high: object, low: object, close: object, period: int = 14, bbMult: float = 2.0, kcMult: float = 1.5, offset: int = 0, **kwargs) -> object: """Squeeze Momentum.""" - period = int(period) + period = int(kwargs.get("length", period)) bbMult = float(bbMult) kcMult = float(kcMult) offset = int(offset) @@ -369,7 +369,7 @@ def ultosc(high: object, low: object, close: object, period1: int = 14, period2: def willr(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Williams %R.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) diff --git a/python/quantalib/reversals.py b/python/quantalib/reversals.py index 47aabf0b..2fca8f0a 100644 --- a/python/quantalib/reversals.py +++ b/python/quantalib/reversals.py @@ -25,7 +25,7 @@ __all__ = [ def chandelier(open: object, high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object: """Chandelier Exit.""" - period = int(period) + period = int(kwargs.get("length", period)) multiplier = float(multiplier) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low); c, _ = _arr(close) diff --git a/python/quantalib/statistics.py b/python/quantalib/statistics.py index 02c279a6..236019fd 100644 --- a/python/quantalib/statistics.py +++ b/python/quantalib/statistics.py @@ -45,7 +45,7 @@ __all__ = [ def acf(close: object, period: int = 14, lag: int = 10, offset: int = 0, **kwargs) -> object: """Autocorrelation Function.""" - period = int(period) + period = int(kwargs.get("length", period)) lag = int(lag) offset = int(offset) src, idx = _arr(close) @@ -57,7 +57,7 @@ def acf(close: object, period: int = 14, lag: int = 10, offset: int = 0, **kwarg def geomean(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Geometric Mean.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -68,7 +68,7 @@ def geomean(close: object, period: int = 14, offset: int = 0, **kwargs) -> objec def granger(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Granger Causality.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) xarr, idx = _arr(x); yarr, _ = _arr(y) n = len(xarr) @@ -79,7 +79,7 @@ def granger(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) - def harmean(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Harmonic Mean.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -90,7 +90,7 @@ def harmean(close: object, period: int = 14, offset: int = 0, **kwargs) -> objec def hurst(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Hurst Exponent.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -101,7 +101,7 @@ def hurst(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def iqr(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Interquartile Range.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -112,7 +112,7 @@ def iqr(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def jb(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Jarque-Bera Test.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -123,7 +123,7 @@ def jb(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def kendall(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Kendall Rank Correlation.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) xarr, idx = _arr(x); yarr, _ = _arr(y) n = len(xarr) @@ -134,7 +134,7 @@ def kendall(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) - def kurtosis(close: object, period: int = 14, isPopulation: int = 0, offset: int = 0, **kwargs) -> object: """Kurtosis.""" - period = int(period) + period = int(kwargs.get("length", period)) isPopulation = int(isPopulation) offset = int(offset) src, idx = _arr(close) @@ -146,7 +146,7 @@ def kurtosis(close: object, period: int = 14, isPopulation: int = 0, offset: int def linreg(close: object, period: int = 14, initialLastValid: float = 0.0, offset: int = 0, **kwargs) -> object: """Linear Regression.""" - period = int(period) + period = int(kwargs.get("length", period)) initialLastValid = float(initialLastValid) offset = int(offset) src, idx = _arr(close) @@ -158,7 +158,7 @@ def linreg(close: object, period: int = 14, initialLastValid: float = 0.0, offse def meandev(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Mean Deviation.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -169,7 +169,7 @@ def meandev(close: object, period: int = 14, offset: int = 0, **kwargs) -> objec def median(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rolling Median.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -180,7 +180,7 @@ def median(close: object, period: int = 14, offset: int = 0, **kwargs) -> object def mode(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rolling Mode.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -191,7 +191,7 @@ def mode(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def pacf(close: object, period: int = 14, lag: int = 10, offset: int = 0, **kwargs) -> object: """Partial Autocorrelation Function.""" - period = int(period) + period = int(kwargs.get("length", period)) lag = int(lag) offset = int(offset) src, idx = _arr(close) @@ -203,7 +203,7 @@ def pacf(close: object, period: int = 14, lag: int = 10, offset: int = 0, **kwar def percentile(close: object, period: int = 14, percent: float = 50.0, offset: int = 0, **kwargs) -> object: """Rolling Percentile.""" - period = int(period) + period = int(kwargs.get("length", period)) percent = float(percent) offset = int(offset) src, idx = _arr(close) @@ -215,7 +215,7 @@ def percentile(close: object, period: int = 14, percent: float = 50.0, offset: i def polyfit(close: object, period: int = 14, degree: int = 2, initialLastValid: float = 0.0, offset: int = 0, **kwargs) -> object: """Polynomial Fit.""" - period = int(period) + period = int(kwargs.get("length", period)) degree = int(degree) initialLastValid = float(initialLastValid) offset = int(offset) @@ -228,7 +228,7 @@ def polyfit(close: object, period: int = 14, degree: int = 2, initialLastValid: def quantile(close: object, period: int = 14, quantileLevel: float = 0.5, offset: int = 0, **kwargs) -> object: """Rolling Quantile.""" - period = int(period) + period = int(kwargs.get("length", period)) quantileLevel = float(quantileLevel) offset = int(offset) src, idx = _arr(close) @@ -240,7 +240,7 @@ def quantile(close: object, period: int = 14, quantileLevel: float = 0.5, offset def skew(close: object, period: int = 14, isPopulation: int = 0, offset: int = 0, **kwargs) -> object: """Skewness.""" - period = int(period) + period = int(kwargs.get("length", period)) isPopulation = int(isPopulation) offset = int(offset) src, idx = _arr(close) @@ -252,7 +252,7 @@ def skew(close: object, period: int = 14, isPopulation: int = 0, offset: int = 0 def spearman(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Spearman Rank Correlation.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) xarr, idx = _arr(x); yarr, _ = _arr(y) n = len(xarr) @@ -263,7 +263,7 @@ def spearman(x: object, y: object, period: int = 14, offset: int = 0, **kwargs) def stderr(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Standard Error.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -274,7 +274,7 @@ def stderr(close: object, period: int = 14, offset: int = 0, **kwargs) -> object def sum(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rolling Sum.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -285,7 +285,7 @@ def sum(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def theil(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Theil U Statistic.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -296,7 +296,7 @@ def theil(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def trim(close: object, period: int = 14, trimPct: float = 0.1, offset: int = 0, **kwargs) -> object: """Trimmed Mean.""" - period = int(period) + period = int(kwargs.get("length", period)) trimPct = float(trimPct) offset = int(offset) src, idx = _arr(close) @@ -308,7 +308,7 @@ def trim(close: object, period: int = 14, trimPct: float = 0.1, offset: int = 0, def wavg(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Weighted Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -319,7 +319,7 @@ def wavg(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def wins(close: object, period: int = 14, winPct: float = 0.05, offset: int = 0, **kwargs) -> object: """Winsorized Mean.""" - period = int(period) + period = int(kwargs.get("length", period)) winPct = float(winPct) offset = int(offset) src, idx = _arr(close) @@ -331,7 +331,7 @@ def wins(close: object, period: int = 14, winPct: float = 0.05, offset: int = 0, def ztest(close: object, period: int = 14, mu0: float = 0.0, offset: int = 0, **kwargs) -> object: """Z-Test.""" - period = int(period) + period = int(kwargs.get("length", period)) mu0 = float(mu0) offset = int(offset) src, idx = _arr(close) diff --git a/python/quantalib/trends_fir.py b/python/quantalib/trends_fir.py index d9a0d99d..291df411 100644 --- a/python/quantalib/trends_fir.py +++ b/python/quantalib/trends_fir.py @@ -47,7 +47,7 @@ __all__ = [ def fwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Fibonacci Weighted Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -58,7 +58,7 @@ def fwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def gwma(close: object, period: int = 14, sigma: float = 0.4, offset: int = 0, **kwargs) -> object: """Gaussian Weighted Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) sigma = float(sigma) offset = int(offset) src, idx = _arr(close) @@ -70,7 +70,7 @@ def gwma(close: object, period: int = 14, sigma: float = 0.4, offset: int = 0, * def hamma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Hamming Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -81,7 +81,7 @@ def hamma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def hend(close: object, period: int = 14, nanValue: float = 0.0, offset: int = 0, **kwargs) -> object: """Henderson Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) nanValue = float(nanValue) offset = int(offset) src, idx = _arr(close) @@ -93,7 +93,7 @@ def hend(close: object, period: int = 14, nanValue: float = 0.0, offset: int = 0 def ilrs(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Integral of Linear Regression Slope.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -104,7 +104,7 @@ def ilrs(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def kaiser(close: object, period: int = 14, beta: float = 3.0, nanValue: float = 0.0, offset: int = 0, **kwargs) -> object: """Kaiser Window Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) beta = float(beta) nanValue = float(nanValue) offset = int(offset) @@ -117,7 +117,7 @@ def kaiser(close: object, period: int = 14, beta: float = 3.0, nanValue: float = def lanczos(close: object, period: int = 14, nanValue: float = 0.0, offset: int = 0, **kwargs) -> object: """Lanczos Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) nanValue = float(nanValue) offset = int(offset) src, idx = _arr(close) @@ -129,7 +129,7 @@ def lanczos(close: object, period: int = 14, nanValue: float = 0.0, offset: int def nlma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Non-Lag Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -140,7 +140,7 @@ def nlma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def nyqma(close: object, period: int = 14, nyquistPeriod: int = 2, offset: int = 0, **kwargs) -> object: """Nyquist Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) nyquistPeriod = int(nyquistPeriod) offset = int(offset) src, idx = _arr(close) @@ -152,7 +152,7 @@ def nyqma(close: object, period: int = 14, nyquistPeriod: int = 2, offset: int = def pma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Predictive Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -164,7 +164,7 @@ def pma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def pwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Pascal Weighted Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -175,7 +175,7 @@ def pwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def qrma(close: object, period: int = 14, initialLastValid: float = 0.0, offset: int = 0, **kwargs) -> object: """Quick Reaction Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) initialLastValid = float(initialLastValid) offset = int(offset) src, idx = _arr(close) @@ -187,7 +187,7 @@ def qrma(close: object, period: int = 14, initialLastValid: float = 0.0, offset: def rwma(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Range Weighted Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) diff --git a/python/quantalib/trends_iir.py b/python/quantalib/trends_iir.py index c2bcac24..89b76309 100644 --- a/python/quantalib/trends_iir.py +++ b/python/quantalib/trends_iir.py @@ -53,7 +53,7 @@ __all__ = [ def adxvma(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """ADX Variable Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -65,7 +65,7 @@ def adxvma(open: object, high: object, low: object, close: object, volume: objec def frama(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Fractal Adaptive Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -76,7 +76,7 @@ def frama(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def holt(close: object, period: int = 14, gamma: float = 0.0, offset: int = 0, **kwargs) -> object: """Holt Exponential Smoothing.""" - period = int(period) + period = int(kwargs.get("length", period)) gamma = float(gamma) offset = int(offset) src, idx = _arr(close) @@ -98,7 +98,7 @@ def htit(close: object, offset: int = 0, **kwargs) -> object: def hwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Holt-Winter Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -121,7 +121,7 @@ def jma(close: object, period: int = 14, phase: int = 0, offset: int = 0, **kwar def kama(close: object, period: int = 14, fastPeriod: int = 12, slowPeriod: int = 26, offset: int = 0, **kwargs) -> object: """Kaufman Adaptive Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) fastPeriod = int(fastPeriod) slowPeriod = int(slowPeriod) offset = int(offset) @@ -134,7 +134,7 @@ def kama(close: object, period: int = 14, fastPeriod: int = 12, slowPeriod: int def ltma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Low-Lag Triple Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -170,7 +170,7 @@ def mavp(x: object, periods: object, minPeriod: int = 6, maxPeriod: int = 48, of def mcnma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """McNicholl Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -181,7 +181,7 @@ def mcnma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def mgdi(close: object, period: int = 14, k: float = 0.6, offset: int = 0, **kwargs) -> object: """McGinley Dynamic.""" - period = int(period) + period = int(kwargs.get("length", period)) k = float(k) offset = int(offset) src, idx = _arr(close) @@ -193,7 +193,7 @@ def mgdi(close: object, period: int = 14, k: float = 0.6, offset: int = 0, **kwa def mma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Modified Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -204,7 +204,7 @@ def mma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def nma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Normalized Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -215,7 +215,7 @@ def nma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def qema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Quadruple EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -226,7 +226,7 @@ def qema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def rema(close: object, period: int = 14, lam: float = 0.5, offset: int = 0, **kwargs) -> object: """Regularized EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) lam = float(lam) offset = int(offset) src, idx = _arr(close) @@ -238,7 +238,7 @@ def rema(close: object, period: int = 14, lam: float = 0.5, offset: int = 0, **k def rgma(close: object, period: int = 14, passes: int = 3, offset: int = 0, **kwargs) -> object: """Recursive Gaussian Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) passes = int(passes) offset = int(offset) src, idx = _arr(close) @@ -250,7 +250,7 @@ def rgma(close: object, period: int = 14, passes: int = 3, offset: int = 0, **kw def rma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Rolling Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -261,7 +261,7 @@ def rma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def t3(close: object, period: int = 14, vfactor: float = 0.7, offset: int = 0, **kwargs) -> object: """Tillson T3.""" - period = int(period) + period = int(kwargs.get("length", period)) vfactor = float(vfactor) offset = int(offset) src, idx = _arr(close) @@ -273,7 +273,7 @@ def t3(close: object, period: int = 14, vfactor: float = 0.7, offset: int = 0, * def trama(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Triangular Adaptive Moving Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -300,7 +300,7 @@ def vama(open: object, high: object, low: object, close: object, volume: object, def vidya(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Variable Index Dynamic Average.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -327,7 +327,7 @@ def yzvama(open: object, high: object, low: object, close: object, volume: objec def zldema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Zero-Lag Double EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -338,7 +338,7 @@ def zldema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object def zlema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Zero-Lag EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -349,7 +349,7 @@ def zlema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: def zltema(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Zero-Lag Triple EMA.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) diff --git a/python/quantalib/volatility.py b/python/quantalib/volatility.py index 847df94e..dd894800 100644 --- a/python/quantalib/volatility.py +++ b/python/quantalib/volatility.py @@ -41,7 +41,7 @@ __all__ = [ def adr(open: object, high: object, low: object, close: object, volume: object, period: int = 14, method: int = 0, offset: int = 0, **kwargs) -> object: """Average Daily Range.""" - period = int(period) + period = int(kwargs.get("length", period)) method = int(method) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) @@ -54,7 +54,7 @@ def adr(open: object, high: object, low: object, close: object, volume: object, def atr(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Average True Range.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -66,7 +66,7 @@ def atr(open: object, high: object, low: object, close: object, volume: object, def atrn(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Normalized ATR.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -78,7 +78,7 @@ def atrn(open: object, high: object, low: object, close: object, volume: object, def gkv(open: object, high: object, low: object, close: object, period: int = 14, annualize: int = 1, annualPeriods: int = 252, offset: int = 0, **kwargs) -> object: """Garman-Klass Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) annualize = int(annualize) annualPeriods = int(annualPeriods) offset = int(offset) @@ -91,7 +91,7 @@ def gkv(open: object, high: object, low: object, close: object, period: int = 14 def hlv(high: object, low: object, period: int = 14, annualize: int = 1, annualPeriods: int = 252, offset: int = 0, **kwargs) -> object: """High-Low Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) annualize = int(annualize) annualPeriods = int(annualPeriods) offset = int(offset) @@ -104,7 +104,7 @@ def hlv(high: object, low: object, period: int = 14, annualize: int = 1, annualP def hv(close: object, period: int = 14, annualize: int = 1, annualPeriods: int = 252, offset: int = 0, **kwargs) -> object: """Historical Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) annualize = int(annualize) annualPeriods = int(annualPeriods) offset = int(offset) @@ -117,7 +117,7 @@ def hv(close: object, period: int = 14, annualize: int = 1, annualPeriods: int = def jvolty(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Jurik Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -128,7 +128,7 @@ def jvolty(close: object, period: int = 14, offset: int = 0, **kwargs) -> object def jvoltyn(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Jurik Volatility Normalized.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -151,7 +151,7 @@ def massi(close: object, emaLength: int = 9, sumLength: int = 25, offset: int = def natr(open: object, high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Normalized ATR.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low) c, _ = _arr(close); v, _ = _arr(volume) @@ -163,7 +163,7 @@ def natr(open: object, high: object, low: object, close: object, volume: object, def rsv(open: object, high: object, low: object, close: object, period: int = 14, annualize: int = 1, annualPeriods: int = 252, offset: int = 0, **kwargs) -> object: """Rogers-Satchell Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) annualize = int(annualize) annualPeriods = int(annualPeriods) offset = int(offset) @@ -176,7 +176,7 @@ def rsv(open: object, high: object, low: object, close: object, period: int = 14 def rv(close: object, period: int = 14, smoothingPeriod: int = 14, annualize: int = 1, annualPeriods: int = 252, offset: int = 0, **kwargs) -> object: """Realized Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) smoothingPeriod = int(smoothingPeriod) annualize = int(annualize) annualPeriods = int(annualPeriods) @@ -202,7 +202,7 @@ def rvi(close: object, stdevLength: int = 10, rmaLength: int = 14, offset: int = def ui(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Ulcer Index.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -225,7 +225,7 @@ def vov(close: object, volatilityPeriod: int = 20, vovPeriod: int = 20, offset: def vr(high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Volatility Ratio.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(h) @@ -236,7 +236,7 @@ def vr(high: object, low: object, close: object, period: int = 14, offset: int = def yzv(open: object, high: object, low: object, close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Yang-Zhang Volatility.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low); c, _ = _arr(close) n = len(o) diff --git a/python/quantalib/volume.py b/python/quantalib/volume.py index 4e000447..9021d7ae 100644 --- a/python/quantalib/volume.py +++ b/python/quantalib/volume.py @@ -62,7 +62,7 @@ def adosc(high: object, low: object, close: object, volume: object, fastPeriod: def iii(high: object, low: object, close: object, volume: object, period: int = 14, cumulative: int = 0, offset: int = 0, **kwargs) -> object: """Intraday Intensity Index.""" - period = int(period) + period = int(kwargs.get("length", period)) cumulative = int(cumulative) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close); v, _ = _arr(volume) @@ -88,7 +88,7 @@ def kvo(high: object, low: object, close: object, volume: object, fastPeriod: in def twap(close: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Time Weighted Average Price.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) src, idx = _arr(close) n = len(src) @@ -121,7 +121,7 @@ def vo(volume: object, shortPeriod: int = 12, longPeriod: int = 26, offset: int def vroc(volume: object, period: int = 14, usePercent: int = 1, offset: int = 0, **kwargs) -> object: """Volume Rate of Change.""" - period = int(period) + period = int(kwargs.get("length", period)) usePercent = int(usePercent) offset = int(offset) src, idx = _arr(volume) @@ -133,7 +133,7 @@ def vroc(volume: object, period: int = 14, usePercent: int = 1, offset: int = 0, def vwad(high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Volume Weighted Accumulation/Distribution.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close); v, _ = _arr(volume) n = len(h) @@ -144,7 +144,7 @@ def vwad(high: object, low: object, close: object, volume: object, period: int = def vwap(high: object, low: object, close: object, volume: object, period: int = 14, offset: int = 0, **kwargs) -> object: """Volume Weighted Average Price.""" - period = int(period) + period = int(kwargs.get("length", period)) offset = int(offset) h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close); v, _ = _arr(volume) n = len(h) diff --git a/python/tools/add_length_alias.py b/python/tools/add_length_alias.py new file mode 100644 index 00000000..1a0eeb8a --- /dev/null +++ b/python/tools/add_length_alias.py @@ -0,0 +1,43 @@ +"""Add length→period alias to all old-style Python wrapper functions. + +Replaces: period = int(period) +With: period = int(kwargs.get("length", period)) + +Only targets exact standalone `period = int(period)` lines (4-space indent). +Does NOT touch compound names like fastPeriod, slowPeriod, etc. +""" +import re +import os +import glob + +base = os.path.join(os.path.dirname(__file__), '..', 'quantalib') +base = os.path.normpath(base) +files = sorted(glob.glob(os.path.join(base, '*.py'))) +total = 0 + +for fpath in files: + fname = os.path.basename(fpath) + if fname.startswith('_'): + continue + with open(fpath, 'r', encoding='utf-8') as f: + content = f.read() + + # Match exactly ' period = int(period)' (4-space indent, standalone) + pattern = r'^( )period = int\(period\)$' + matches = re.findall(pattern, content, re.MULTILINE) + count = len(matches) + if count > 0: + new_content = re.sub( + pattern, + r'\1period = int(kwargs.get("length", period))', + content, + flags=re.MULTILINE, + ) + with open(fpath, 'w', encoding='utf-8') as f: + f.write(new_content) + print(f'{fname}: {count} replacements') + total += count + else: + print(f'{fname}: 0 (skipped)') + +print(f'\nTotal: {total} replacements across {len(files)} files')