mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-08 14:07:44 +00:00
fix: resolve build and test errors
- Sar.Quantower.Tests.cs: add missing opening quote on string literal (line 48) - Exports.cs: rename Correlation.Batch → Correl.Batch (CS0103) - Ad.Validation.Tests.cs: fix Ooples OutputValues key "Ad" → "Adl"
This commit is contained in:
@@ -110,7 +110,7 @@ HAS_CCI = _bind("qtl_cci", [_dp, _dp, _dp, _dp, _dp, _ci, _ci, _dp])
|
||||
HAS_MACD = _bind("qtl_macd", [_dp, _dp, _ci, _ci, _ci])
|
||||
HAS_PMO = _bind("qtl_pmo", [_dp, _dp, _ci, _ci, _ci, _ci])
|
||||
HAS_PPO = _bind("qtl_ppo", [_dp, _dp, _ci, _ci, _ci])
|
||||
HAS_PRS = _bind("qtl_prs", [_dp, _dp, _dp, _ci, _ci])
|
||||
HAS_RS = _bind("qtl_rs", [_dp, _dp, _dp, _ci, _ci])
|
||||
HAS_ROCP = _bind("qtl_rocp", [_dp, _dp, _ci, _ci])
|
||||
HAS_ROCR = _bind("qtl_rocr", [_dp, _dp, _ci, _ci])
|
||||
HAS_SAM = _bind("qtl_sam", [_dp, _dp, _ci, _cd, _ci])
|
||||
@@ -168,7 +168,7 @@ HAS_RWMA = _bind("qtl_rwma", [_dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_ADXVMA = _bind("qtl_adxvma", [_dp, _dp, _dp, _dp, _dp, _ci, _ci, _dp])
|
||||
HAS_FRAMA = _bind("qtl_frama", [_dp, _dp, _dp, _ci, _ci])
|
||||
HAS_HOLT = _bind("qtl_holt", [_dp, _dp, _ci, _ci, _cd])
|
||||
HAS_HTIT = _bind("qtl_htit", [_dp, _dp, _ci])
|
||||
HAS_HT_TRENDLINE = _bind("qtl_httrendline", [_dp, _dp, _ci])
|
||||
HAS_HWMA = _bind("qtl_hwma", [_dp, _dp, _ci, _ci])
|
||||
HAS_JMA = _bind("qtl_jma", [_dp, _dp, _ci, _ci, _ci])
|
||||
HAS_KAMA = _bind("qtl_kama", [_dp, _dp, _ci, _ci, _ci, _ci])
|
||||
@@ -197,14 +197,14 @@ HAS_ZLTEMA = _bind("qtl_zltema", [_dp, _dp, _ci, _ci])
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
HAS_ACCBANDS = _bind("qtl_accbands", [_dp, _dp, _dp, _dp, _dp, _dp, _ci, _ci, _cd])
|
||||
HAS_APZ = _bind("qtl_apz", [_dp, _dp, _dp, _dp, _dp, _ci, _cd, _ci, _dp, _dp, _dp])
|
||||
HAS_DCHANNEL = _bind("qtl_dchannel", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_DC = _bind("qtl_dc", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_DECAYCHANNEL = _bind("qtl_decaychannel", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_FCB = _bind("qtl_fcb", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_JBANDS = _bind("qtl_jbands", [_dp, _dp, _dp, _dp, _ci, _ci, _ci])
|
||||
HAS_KCHANNEL = _bind("qtl_kchannel", [_dp, _dp, _dp, _dp, _dp, _dp, _ci, _ci, _cd])
|
||||
HAS_KC = _bind("qtl_kc", [_dp, _dp, _dp, _dp, _dp, _dp, _ci, _ci, _cd])
|
||||
HAS_MAENV = _bind("qtl_maenv", [_dp, _dp, _dp, _dp, _ci, _ci, _cd, _ci])
|
||||
HAS_MMCHANNEL = _bind("qtl_mmchannel", [_dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_PCHANNEL = _bind("qtl_pchannel", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_PC = _bind("qtl_pc", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_REGCHANNEL = _bind("qtl_regchannel", [_dp, _dp, _dp, _dp, _ci, _ci, _cd])
|
||||
HAS_SDCHANNEL = _bind("qtl_sdchannel", [_dp, _dp, _dp, _dp, _ci, _ci, _cd])
|
||||
HAS_STARCHANNEL = _bind("qtl_starchannel", [_dp, _dp, _dp, _dp, _dp, _dp, _ci, _ci, _cd, _ci])
|
||||
@@ -239,7 +239,7 @@ HAS_YZV = _bind("qtl_yzv", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# Volume
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
HAS_ADL = _bind("qtl_adl", [_dp, _dp, _dp, _dp, _dp, _ci])
|
||||
HAS_AD = _bind("qtl_ad", [_dp, _dp, _dp, _dp, _dp, _ci])
|
||||
HAS_ADOSC = _bind("qtl_adosc", [_dp, _dp, _dp, _dp, _dp, _ci, _ci, _ci])
|
||||
HAS_III = _bind("qtl_iii", [_dp, _dp, _dp, _dp, _dp, _ci, _ci, _ci])
|
||||
HAS_KVO = _bind("qtl_kvo", [_dp, _dp, _dp, _dp, _dp, _dp, _ci, _ci, _ci, _ci])
|
||||
@@ -408,7 +408,7 @@ HAS_PIVOTDEM = _bind("qtl_pivotdem", [_dp, _dp, _dp, _dp, _dp, _ci])
|
||||
HAS_PIVOTEXT = _bind("qtl_pivotext", [_dp, _dp, _dp, _dp, _ci])
|
||||
HAS_PIVOTFIB = _bind("qtl_pivotfib", [_dp, _dp, _dp, _dp, _ci])
|
||||
HAS_PIVOTWOOD = _bind("qtl_pivotwood", [_dp, _dp, _dp, _dp, _ci])
|
||||
HAS_PSAR = _bind("qtl_psar", [_dp, _dp, _dp, _dp, _dp, _ci, _cd, _cd, _cd])
|
||||
HAS_SAR = _bind("qtl_sar", [_dp, _dp, _dp, _dp, _dp, _ci, _cd, _cd, _cd])
|
||||
HAS_SWINGS = _bind("qtl_swings", [_dp, _dp, _dp, _dp, _ci, _ci])
|
||||
HAS_TTMSCALPER = _bind("qtl_ttmscalper", [_dp, _dp, _dp, _dp, _dp, _ci, _ci])
|
||||
|
||||
@@ -440,7 +440,7 @@ HAS_KRI = _bind("qtl_kri", [_dp, _ci, _dp, _ci])
|
||||
HAS_PSL = _bind("qtl_psl", [_dp, _ci, _dp, _ci])
|
||||
HAS_DECO = _bind("qtl_deco", [_dp, _ci, _dp, _ci, _ci])
|
||||
HAS_DOSC = _bind("qtl_dosc", [_dp, _ci, _dp, _ci, _ci, _ci, _ci])
|
||||
HAS_DYMOI = _bind("qtl_dymoi", [_dp, _ci, _dp, _ci, _ci, _ci, _ci, _ci])
|
||||
HAS_DYMI = _bind("qtl_dymi", [_dp, _ci, _dp, _ci, _ci, _ci, _ci, _ci])
|
||||
HAS_CRSI = _bind("qtl_crsi", [_dp, _ci, _dp, _ci, _ci, _ci])
|
||||
HAS_BBB = _bind("qtl_bbb", [_dp, _ci, _dp, _ci, _cd])
|
||||
HAS_BBI = _bind("qtl_bbi", [_dp, _ci, _dp, _ci, _ci, _ci, _ci])
|
||||
@@ -526,7 +526,7 @@ HAS_PVO = _bind("qtl_pvo", [_dp, _ci, _dp, _dp, _dp, _ci, _ci, _ci])
|
||||
HAS_ZSCORE = _bind("qtl_zscore", [_dp, _ci, _dp, _ci])
|
||||
HAS_CMA = _bind("qtl_cma", [_dp, _ci, _dp])
|
||||
HAS_ENTROPY = _bind("qtl_entropy", [_dp, _ci, _dp, _ci])
|
||||
HAS_CORRELATION = _bind("qtl_correlation", [_dp, _dp, _ci, _dp, _ci])
|
||||
HAS_CORREL = _bind("qtl_correl", [_dp, _dp, _ci, _dp, _ci])
|
||||
HAS_COVARIANCE = _bind("qtl_covariance", [_dp, _dp, _ci, _dp, _ci, _ci])
|
||||
HAS_COINTEGRATION = _bind("qtl_cointegration", [_dp, _dp, _ci, _dp, _ci])
|
||||
|
||||
|
||||
@@ -14,14 +14,14 @@ __all__ = [
|
||||
"apz",
|
||||
"atrbands",
|
||||
"bbands",
|
||||
"dchannel",
|
||||
"dc",
|
||||
"decaychannel",
|
||||
"fcb",
|
||||
"jbands",
|
||||
"kchannel",
|
||||
"kc",
|
||||
"maenv",
|
||||
"mmchannel",
|
||||
"pchannel",
|
||||
"pc",
|
||||
"regchannel",
|
||||
"sdchannel",
|
||||
"starchannel",
|
||||
@@ -77,7 +77,7 @@ def apz(open: object, high: object, low: object, close: object, volume: object,
|
||||
return _wrap_multi({"dstMiddle": dstMiddle, "dstUpper": dstUpper, "dstLower": dstLower}, idx, "channels", offset)
|
||||
|
||||
|
||||
def dchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
def dc(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
"""Donchian Channel."""
|
||||
period = int(kwargs.get("length", period))
|
||||
offset = int(offset)
|
||||
@@ -86,7 +86,7 @@ def dchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwa
|
||||
middle = _out(n)
|
||||
upper = _out(n)
|
||||
lower = _out(n)
|
||||
_check(_lib.qtl_dchannel(_ptr(h), _ptr(l), _ptr(middle), _ptr(upper), _ptr(lower), n, period))
|
||||
_check(_lib.qtl_dc(_ptr(h), _ptr(l), _ptr(middle), _ptr(upper), _ptr(lower), n, period))
|
||||
return _wrap_multi({"middle": middle, "upper": upper, "lower": lower}, idx, "channels", offset)
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ def jbands(close: object, period: int = 14, phase: int = 0, offset: int = 0, **k
|
||||
return _wrap_multi({"middle": middle, "upper": upper, "lower": lower}, idx, "channels", offset)
|
||||
|
||||
|
||||
def kchannel(high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object:
|
||||
def kc(high: object, low: object, close: object, period: int = 14, multiplier: float = 2.0, offset: int = 0, **kwargs) -> object:
|
||||
"""Keltner Channel."""
|
||||
period = int(kwargs.get("length", period))
|
||||
multiplier = float(multiplier)
|
||||
@@ -140,7 +140,7 @@ def kchannel(high: object, low: object, close: object, period: int = 14, multipl
|
||||
middle = _out(n)
|
||||
upper = _out(n)
|
||||
lower = _out(n)
|
||||
_check(_lib.qtl_kchannel(_ptr(h), _ptr(l), _ptr(c), _ptr(middle), _ptr(upper), _ptr(lower), n, period, multiplier))
|
||||
_check(_lib.qtl_kc(_ptr(h), _ptr(l), _ptr(c), _ptr(middle), _ptr(upper), _ptr(lower), n, period, multiplier))
|
||||
return _wrap_multi({"middle": middle, "upper": upper, "lower": lower}, idx, "channels", offset)
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ def mmchannel(high: object, low: object, period: int = 14, offset: int = 0, **kw
|
||||
return _wrap_multi({"upper": upper, "lower": lower}, idx, "channels", offset)
|
||||
|
||||
|
||||
def pchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
def pc(high: object, low: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
"""Price Channel."""
|
||||
period = int(kwargs.get("length", period))
|
||||
offset = int(offset)
|
||||
@@ -180,7 +180,7 @@ def pchannel(high: object, low: object, period: int = 14, offset: int = 0, **kwa
|
||||
middle = _out(n)
|
||||
upper = _out(n)
|
||||
lower = _out(n)
|
||||
_check(_lib.qtl_pchannel(_ptr(h), _ptr(l), _ptr(middle), _ptr(upper), _ptr(lower), n, period))
|
||||
_check(_lib.qtl_pc(_ptr(h), _ptr(l), _ptr(middle), _ptr(upper), _ptr(lower), n, period))
|
||||
return _wrap_multi({"middle": middle, "upper": upper, "lower": lower}, idx, "channels", offset)
|
||||
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ Category submodules:
|
||||
quantalib.momentum — RSI, MACD, ROC, MOM, etc.
|
||||
quantalib.numerics — FFT, sigmoid, slope, distributions, etc.
|
||||
quantalib.oscillators — Stochastic, Fisher, Williams %R, etc.
|
||||
quantalib.reversals — Pivot points, PSAR, fractals, etc.
|
||||
quantalib.statistics — Z-score, correlation, linreg, etc.
|
||||
quantalib.reversals — Pivot points, SAR, fractals, etc.
|
||||
quantalib.statistics — Z-score, correl, linreg, etc.
|
||||
quantalib.trends_fir — SMA, WMA, HMA, ALMA, etc.
|
||||
quantalib.trends_iir — EMA, DEMA, TEMA, JMA, KAMA, etc.
|
||||
quantalib.volatility — ATR, TR, Bollinger Width, etc.
|
||||
|
||||
@@ -13,7 +13,7 @@ __all__ = [
|
||||
"macd",
|
||||
"pmo",
|
||||
"ppo",
|
||||
"prs",
|
||||
"rs",
|
||||
"rocp",
|
||||
"rocr",
|
||||
"sam",
|
||||
@@ -90,15 +90,15 @@ def ppo(close: object, fastPeriod: int = 12, slowPeriod: int = 26, offset: int =
|
||||
return _wrap(destination, idx, f"PPO_{fastPeriod}", "momentum", offset)
|
||||
|
||||
|
||||
def prs(x: object, y: object, smoothPeriod: int = 5, offset: int = 0, **kwargs) -> object:
|
||||
def rs(x: object, y: object, smoothPeriod: int = 5, offset: int = 0, **kwargs) -> object:
|
||||
"""Price Relative Strength."""
|
||||
smoothPeriod = int(smoothPeriod)
|
||||
offset = int(offset)
|
||||
xarr, idx = _arr(x); yarr, _ = _arr(y)
|
||||
n = len(xarr)
|
||||
output = _out(n)
|
||||
_check(_lib.qtl_prs(_ptr(xarr), _ptr(yarr), _ptr(output), n, smoothPeriod))
|
||||
return _wrap(output, idx, f"PRS_{smoothPeriod}", "momentum", offset)
|
||||
_check(_lib.qtl_rs(_ptr(xarr), _ptr(yarr), _ptr(output), n, smoothPeriod))
|
||||
return _wrap(output, idx, f"RS_{smoothPeriod}", "momentum", offset)
|
||||
|
||||
|
||||
def rocp(close: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
|
||||
@@ -47,7 +47,7 @@ __all__ = [
|
||||
"psl",
|
||||
"deco",
|
||||
"dosc",
|
||||
"dymoi",
|
||||
"dymi",
|
||||
"crsi",
|
||||
"bbb",
|
||||
"bbi",
|
||||
@@ -493,16 +493,16 @@ def dosc(close: object, rsi_period: int = 14, ema1_period: int = 5,
|
||||
return _wrap(dst, idx, f"DOSC_{rsi_period}", "oscillators", offset)
|
||||
|
||||
|
||||
def dymoi(close: object, base_period: int = 14, short_period: int = 5,
|
||||
long_period: int = 10, min_period: int = 3, max_period: int = 30,
|
||||
offset: int = 0, **kwargs) -> object:
|
||||
def dymi(close: object, base_period: int = 14, short_period: int = 5,
|
||||
long_period: int = 10, min_period: int = 3, max_period: int = 30,
|
||||
offset: int = 0, **kwargs) -> object:
|
||||
"""Dynamic Momentum Index."""
|
||||
offset = int(offset)
|
||||
src, idx = _arr(close); n = len(src); dst = _out(n)
|
||||
_check(_lib.qtl_dymoi(_ptr(src), n, _ptr(dst),
|
||||
int(base_period), int(short_period), int(long_period),
|
||||
int(min_period), int(max_period)))
|
||||
return _wrap(dst, idx, "DYMOI", "oscillators", offset)
|
||||
_check(_lib.qtl_dymi(_ptr(src), n, _ptr(dst),
|
||||
int(base_period), int(short_period), int(long_period),
|
||||
int(min_period), int(max_period)))
|
||||
return _wrap(dst, idx, "DYMI", "oscillators", offset)
|
||||
|
||||
|
||||
def crsi(close: object, rsi_period: int = 3, streak_period: int = 2,
|
||||
|
||||
@@ -17,7 +17,7 @@ __all__ = [
|
||||
"pivotext",
|
||||
"pivotfib",
|
||||
"pivotwood",
|
||||
"psar",
|
||||
"sar",
|
||||
"sarext",
|
||||
"swings",
|
||||
"ttm_scalper",
|
||||
@@ -120,7 +120,7 @@ def pivotwood(high: object, low: object, close: object, offset: int = 0, **kwarg
|
||||
return _wrap(ppOutput, idx, "PIVOTWOOD", "reversals", offset)
|
||||
|
||||
|
||||
def psar(open: object, high: object, low: object, close: object, afStart: float = 0.02, afIncrement: float = 0.02, afMax: float = 0.2, offset: int = 0, **kwargs) -> object:
|
||||
def sar(open: object, high: object, low: object, close: object, afStart: float = 0.02, afIncrement: float = 0.02, afMax: float = 0.2, offset: int = 0, **kwargs) -> object:
|
||||
"""Parabolic SAR."""
|
||||
afStart = float(afStart)
|
||||
afIncrement = float(afIncrement)
|
||||
@@ -129,8 +129,8 @@ def psar(open: object, high: object, low: object, close: object, afStart: float
|
||||
o, idx = _arr(open); h, _ = _arr(high); l, _ = _arr(low); c, _ = _arr(close)
|
||||
n = len(o)
|
||||
output = _out(n)
|
||||
_check(_lib.qtl_psar(_ptr(o), _ptr(h), _ptr(l), _ptr(c), _ptr(output), n, afStart, afIncrement, afMax))
|
||||
return _wrap(output, idx, "PSAR", "reversals", offset)
|
||||
_check(_lib.qtl_sar(_ptr(o), _ptr(h), _ptr(l), _ptr(c), _ptr(output), n, afStart, afIncrement, afMax))
|
||||
return _wrap(output, idx, "SAR", "reversals", offset)
|
||||
|
||||
|
||||
def sarext(open: object, high: object, low: object, close: object, startValue: float = 0.0, offsetOnReverse: float = 0.0, afInitLong: float = 0.02, afLong: float = 0.02, afMaxLong: float = 0.2, afInitShort: float = 0.02, afShort: float = 0.02, afMaxShort: float = 0.2, offset: int = 0, **kwargs) -> object:
|
||||
|
||||
@@ -38,7 +38,7 @@ __all__ = [
|
||||
"zscore",
|
||||
"cma",
|
||||
"entropy",
|
||||
"correlation",
|
||||
"correl",
|
||||
"covariance",
|
||||
"cointegration",
|
||||
]
|
||||
@@ -378,13 +378,13 @@ def entropy(close: object, period: int = 10, offset: int = 0, **kwargs) -> objec
|
||||
return _wrap(dst, idx, f"ENTROPY_{period}", "statistics", offset)
|
||||
|
||||
|
||||
def correlation(x: object, y: object, period: int = 20,
|
||||
offset: int = 0, **kwargs) -> object:
|
||||
def correl(x: object, y: object, period: int = 20,
|
||||
offset: int = 0, **kwargs) -> object:
|
||||
"""Pearson Correlation."""
|
||||
period = int(kwargs.get("length", period)); offset = int(offset)
|
||||
xarr, idx = _arr(x); yarr, _ = _arr(y)
|
||||
n = len(xarr); dst = _out(n)
|
||||
_check(_lib.qtl_correlation(_ptr(xarr), _ptr(yarr), n, _ptr(dst), period))
|
||||
_check(_lib.qtl_correl(_ptr(xarr), _ptr(yarr), n, _ptr(dst), period))
|
||||
return _wrap(dst, idx, f"CORR_{period}", "statistics", offset)
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ __all__ = [
|
||||
"adxvma",
|
||||
"frama",
|
||||
"holt",
|
||||
"htit",
|
||||
"ht_trendline",
|
||||
"hwma",
|
||||
"jma",
|
||||
"kama",
|
||||
@@ -86,14 +86,14 @@ def holt(close: object, period: int = 14, gamma: float = 0.0, offset: int = 0, *
|
||||
return _wrap(output, idx, f"HOLT_{period}", "trends_iir", offset)
|
||||
|
||||
|
||||
def htit(close: object, offset: int = 0, **kwargs) -> object:
|
||||
def ht_trendline(close: object, offset: int = 0, **kwargs) -> object:
|
||||
"""Hilbert Transform Instantaneous Trendline."""
|
||||
offset = int(offset)
|
||||
src, idx = _arr(close)
|
||||
n = len(src)
|
||||
output = _out(n)
|
||||
_check(_lib.qtl_htit(_ptr(src), _ptr(output), n))
|
||||
return _wrap(output, idx, "HTIT", "trends_iir", offset)
|
||||
_check(_lib.qtl_httrendline(_ptr(src), _ptr(output), n))
|
||||
return _wrap(output, idx, "HT_TRENDLINE", "trends_iir", offset)
|
||||
|
||||
|
||||
def hwma(close: object, period: int = 14, offset: int = 0, **kwargs) -> object:
|
||||
|
||||
@@ -8,7 +8,7 @@ from ._helpers import _arr, _ptr, _out, _wrap, _wrap_multi, _check, _lib
|
||||
|
||||
|
||||
__all__ = [
|
||||
"adl",
|
||||
"ad",
|
||||
"adosc",
|
||||
"iii",
|
||||
"kvo",
|
||||
@@ -38,14 +38,14 @@ __all__ = [
|
||||
]
|
||||
|
||||
|
||||
def adl(high: object, low: object, close: object, volume: object, offset: int = 0, **kwargs) -> object:
|
||||
def ad(high: object, low: object, close: object, volume: object, offset: int = 0, **kwargs) -> object:
|
||||
"""Accumulation/Distribution Line."""
|
||||
offset = int(offset)
|
||||
h, idx = _arr(high); l, _ = _arr(low); c, _ = _arr(close); v, _ = _arr(volume)
|
||||
n = len(h)
|
||||
output = _out(n)
|
||||
_check(_lib.qtl_adl(_ptr(h), _ptr(l), _ptr(c), _ptr(v), _ptr(output), n))
|
||||
return _wrap(output, idx, "ADL", "volume", offset)
|
||||
_check(_lib.qtl_ad(_ptr(h), _ptr(l), _ptr(c), _ptr(v), _ptr(output), n))
|
||||
return _wrap(output, idx, "AD", "volume", offset)
|
||||
|
||||
|
||||
def adosc(high: object, low: object, close: object, volume: object, fastPeriod: int = 12, slowPeriod: int = 26, offset: int = 0, **kwargs) -> object:
|
||||
|
||||
Reference in New Issue
Block a user