Files
ferro-ta/python/ferro_ta/__init__.pyi
T
2026-03-24 11:19:48 +05:30

766 lines
25 KiB
Python

"""
type stubs for ferro_ta.
Generated for IDE auto-completion and static type checking.
"""
import logging
from collections.abc import Callable
from contextlib import AbstractContextManager
from typing import Any, TypeVar
import numpy as np
from numpy.typing import ArrayLike, NDArray
_F = TypeVar("_F", bound=Callable[..., Any])
__version__: str
# ---------------------------------------------------------------------------
# Overlap Studies
# ---------------------------------------------------------------------------
def SMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def EMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def WMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def DEMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def TEMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def TRIMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def KAMA(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def T3(
real: ArrayLike, timeperiod: int = 5, vfactor: float = 0.7
) -> NDArray[np.float64]: ...
def BBANDS(
real: ArrayLike,
timeperiod: int = 5,
nbdevup: float = 2.0,
nbdevdn: float = 2.0,
matype: int = 0,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def MACD(
real: ArrayLike,
fastperiod: int = 12,
slowperiod: int = 26,
signalperiod: int = 9,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def MACDFIX(
real: ArrayLike,
signalperiod: int = 9,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def MACDEXT(
real: ArrayLike,
fastperiod: int = 12,
fastmatype: int = 0,
slowperiod: int = 26,
slowmatype: int = 0,
signalperiod: int = 9,
signalmatype: int = 0,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def SAR(
high: ArrayLike,
low: ArrayLike,
acceleration: float = 0.02,
maximum: float = 0.2,
) -> NDArray[np.float64]: ...
def SAREXT(
high: ArrayLike,
low: ArrayLike,
startvalue: float = 0.0,
offsetonreverse: float = 0.0,
accelerationinitlong: float = 0.02,
accelerationlong: float = 0.02,
accelerationmaxlong: float = 0.2,
accelerationinitshort: float = 0.02,
accelerationshort: float = 0.02,
accelerationmaxshort: float = 0.2,
) -> NDArray[np.float64]: ...
def MA(
real: ArrayLike, timeperiod: int = 30, matype: int = 0
) -> NDArray[np.float64]: ...
def MAVP(
real: ArrayLike,
periods: ArrayLike,
minperiod: int = 2,
maxperiod: int = 30,
matype: int = 0,
) -> NDArray[np.float64]: ...
def MAMA(
real: ArrayLike,
fastlimit: float = 0.5,
slowlimit: float = 0.05,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def MIDPOINT(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def MIDPRICE(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Momentum Indicators
# ---------------------------------------------------------------------------
def RSI(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def MOM(real: ArrayLike, timeperiod: int = 10) -> NDArray[np.float64]: ...
def ROC(real: ArrayLike, timeperiod: int = 10) -> NDArray[np.float64]: ...
def ROCP(real: ArrayLike, timeperiod: int = 10) -> NDArray[np.float64]: ...
def ROCR(real: ArrayLike, timeperiod: int = 10) -> NDArray[np.float64]: ...
def ROCR100(real: ArrayLike, timeperiod: int = 10) -> NDArray[np.float64]: ...
def WILLR(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def AROON(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 14,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def AROONOSC(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def CCI(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def MFI(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
volume: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def BOP(
open: ArrayLike,
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
) -> NDArray[np.float64]: ...
def STOCHF(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
fastk_period: int = 5,
fastd_period: int = 3,
fastd_matype: int = 0,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def STOCH(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
fastk_period: int = 5,
slowk_period: int = 3,
slowk_matype: int = 0,
slowd_period: int = 3,
slowd_matype: int = 0,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def STOCHRSI(
real: ArrayLike,
timeperiod: int = 14,
fastk_period: int = 5,
fastd_period: int = 3,
fastd_matype: int = 0,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def APO(
real: ArrayLike,
fastperiod: int = 12,
slowperiod: int = 26,
matype: int = 0,
) -> NDArray[np.float64]: ...
def PPO(
real: ArrayLike,
fastperiod: int = 12,
slowperiod: int = 26,
matype: int = 0,
) -> NDArray[np.float64]: ...
def CMO(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def PLUS_DM(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def MINUS_DM(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def PLUS_DI(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def MINUS_DI(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def DX(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def ADX(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def ADXR(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def TRIX(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def ULTOSC(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod1: int = 7,
timeperiod2: int = 14,
timeperiod3: int = 28,
) -> NDArray[np.float64]: ...
def TRANGE(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Volume Indicators
# ---------------------------------------------------------------------------
def AD(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
volume: ArrayLike,
) -> NDArray[np.float64]: ...
def ADOSC(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
volume: ArrayLike,
fastperiod: int = 3,
slowperiod: int = 10,
) -> NDArray[np.float64]: ...
def OBV(
real: ArrayLike,
volume: ArrayLike,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Volatility Indicators
# ---------------------------------------------------------------------------
def ATR(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
def NATR(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Statistic Functions
# ---------------------------------------------------------------------------
def STDDEV(
real: ArrayLike,
timeperiod: int = 5,
nbdev: float = 1.0,
) -> NDArray[np.float64]: ...
def VAR(
real: ArrayLike,
timeperiod: int = 5,
nbdev: float = 1.0,
) -> NDArray[np.float64]: ...
def LINEARREG(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def LINEARREG_SLOPE(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def LINEARREG_INTERCEPT(
real: ArrayLike, timeperiod: int = 14
) -> NDArray[np.float64]: ...
def LINEARREG_ANGLE(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def TSF(real: ArrayLike, timeperiod: int = 14) -> NDArray[np.float64]: ...
def BETA(
real0: ArrayLike,
real1: ArrayLike,
timeperiod: int = 5,
) -> NDArray[np.float64]: ...
def CORREL(
real0: ArrayLike,
real1: ArrayLike,
timeperiod: int = 30,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Price Transforms
# ---------------------------------------------------------------------------
def AVGPRICE(
open: ArrayLike,
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
) -> NDArray[np.float64]: ...
def MEDPRICE(high: ArrayLike, low: ArrayLike) -> NDArray[np.float64]: ...
def TYPPRICE(
high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.float64]: ...
def WCLPRICE(
high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Cycle Indicators
# ---------------------------------------------------------------------------
def HT_TRENDLINE(real: ArrayLike) -> NDArray[np.float64]: ...
def HT_DCPERIOD(real: ArrayLike) -> NDArray[np.float64]: ...
def HT_DCPHASE(real: ArrayLike) -> NDArray[np.float64]: ...
def HT_PHASOR(real: ArrayLike) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def HT_SINE(real: ArrayLike) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def HT_TRENDMODE(real: ArrayLike) -> NDArray[np.int32]: ...
# ---------------------------------------------------------------------------
# Math Operators
# ---------------------------------------------------------------------------
def ADD(real0: ArrayLike, real1: ArrayLike) -> NDArray[np.float64]: ...
def SUB(real0: ArrayLike, real1: ArrayLike) -> NDArray[np.float64]: ...
def MULT(real0: ArrayLike, real1: ArrayLike) -> NDArray[np.float64]: ...
def DIV(real0: ArrayLike, real1: ArrayLike) -> NDArray[np.float64]: ...
def SUM(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def MAX(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def MIN(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.float64]: ...
def MAXINDEX(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.int32]: ...
def MININDEX(real: ArrayLike, timeperiod: int = 30) -> NDArray[np.int32]: ...
# Math Transforms
def ACOS(real: ArrayLike) -> NDArray[np.float64]: ...
def ASIN(real: ArrayLike) -> NDArray[np.float64]: ...
def ATAN(real: ArrayLike) -> NDArray[np.float64]: ...
def CEIL(real: ArrayLike) -> NDArray[np.float64]: ...
def COS(real: ArrayLike) -> NDArray[np.float64]: ...
def COSH(real: ArrayLike) -> NDArray[np.float64]: ...
def EXP(real: ArrayLike) -> NDArray[np.float64]: ...
def FLOOR(real: ArrayLike) -> NDArray[np.float64]: ...
def LN(real: ArrayLike) -> NDArray[np.float64]: ...
def LOG10(real: ArrayLike) -> NDArray[np.float64]: ...
def SIN(real: ArrayLike) -> NDArray[np.float64]: ...
def SINH(real: ArrayLike) -> NDArray[np.float64]: ...
def SQRT(real: ArrayLike) -> NDArray[np.float64]: ...
def TAN(real: ArrayLike) -> NDArray[np.float64]: ...
def TANH(real: ArrayLike) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Extended Indicators (Phase 8 + 9)
# ---------------------------------------------------------------------------
def VWAP(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
volume: ArrayLike,
timeperiod: int = 0,
) -> NDArray[np.float64]: ...
def SUPERTREND(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 7,
multiplier: float = 3.0,
) -> tuple[NDArray[np.float64], NDArray[np.int8]]: ...
def ICHIMOKU(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
tenkan_period: int = 9,
kijun_period: int = 26,
senkou_b_period: int = 52,
displacement: int = 26,
) -> tuple[
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
]: ...
def DONCHIAN(
high: ArrayLike,
low: ArrayLike,
timeperiod: int = 20,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def PIVOT_POINTS(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
method: str = "classic",
) -> tuple[
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
NDArray[np.float64],
]: ...
def KELTNER_CHANNELS(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 20,
atr_period: int = 10,
multiplier: float = 2.0,
) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: ...
def HULL_MA(
close: ArrayLike,
timeperiod: int = 16,
) -> NDArray[np.float64]: ...
def CHANDELIER_EXIT(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 22,
multiplier: float = 3.0,
) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
def VWMA(
close: ArrayLike,
volume: ArrayLike,
timeperiod: int = 20,
) -> NDArray[np.float64]: ...
def CHOPPINESS_INDEX(
high: ArrayLike,
low: ArrayLike,
close: ArrayLike,
timeperiod: int = 14,
) -> NDArray[np.float64]: ...
# ---------------------------------------------------------------------------
# Streaming / Incremental API (Phase 3)
# ---------------------------------------------------------------------------
class StreamingSMA:
period: int
def __init__(self, period: int) -> None: ...
def update(self, value: float) -> float: ...
def reset(self) -> None: ...
class StreamingEMA:
period: int
def __init__(self, period: int) -> None: ...
def update(self, value: float) -> float: ...
def reset(self) -> None: ...
class StreamingRSI:
period: int
def __init__(self, period: int = 14) -> None: ...
def update(self, value: float) -> float: ...
def reset(self) -> None: ...
class StreamingATR:
period: int
def __init__(self, period: int = 14) -> None: ...
def update(self, high: float, low: float, close: float) -> float: ...
def reset(self) -> None: ...
class StreamingBBands:
period: int
def __init__(
self,
period: int = 20,
nbdevup: float = 2.0,
nbdevdn: float = 2.0,
) -> None: ...
def update(self, value: float) -> tuple[float, float, float]: ...
def reset(self) -> None: ...
class StreamingMACD:
def __init__(
self,
fastperiod: int = 12,
slowperiod: int = 26,
signalperiod: int = 9,
) -> None: ...
def update(self, value: float) -> tuple[float, float, float]: ...
def reset(self) -> None: ...
class StreamingStoch:
def __init__(
self,
fastk_period: int = 5,
slowk_period: int = 3,
slowd_period: int = 3,
) -> None: ...
def update(self, high: float, low: float, close: float) -> tuple[float, float]: ...
def reset(self) -> None: ...
class StreamingVWAP:
def __init__(self) -> None: ...
def update(self, high: float, low: float, close: float, volume: float) -> float: ...
def reset(self) -> None: ...
class StreamingSupertrend:
period: int
def __init__(self, period: int = 7, multiplier: float = 3.0) -> None: ...
def update(self, high: float, low: float, close: float) -> tuple[float, int]: ...
def reset(self) -> None: ...
# ---------------------------------------------------------------------------
# Candlestick Patterns
# ---------------------------------------------------------------------------
def CDL2CROWS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3BLACKCROWS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3INSIDE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3LINESTRIKE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3OUTSIDE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3STARSINSOUTH(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDL3WHITESOLDIERS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLABANDONEDBABY(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLADVANCEBLOCK(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLBELTHOLD(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLBREAKAWAY(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLCLOSINGMARUBOZU(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLCONCEALBABYSWALL(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLCOUNTERATTACK(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLDARKCLOUDCOVER(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLDOJI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLDOJISTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLDRAGONFLYDOJI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLENGULFING(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLEVENINGDOJISTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLEVENINGSTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLGAPSIDESIDEWHITE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLGRAVESTONEDOJI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHAMMER(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHANGINGMAN(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHARAMI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHARAMICROSS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHIGHWAVE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHIKKAKE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHIKKAKEMOD(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLHOMINGPIGEON(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLIDENTICAL3CROWS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLINNECK(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLINVERTEDHAMMER(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLKICKING(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLKICKINGBYLENGTH(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLLADDERBOTTOM(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLLONGLEGGEDDOJI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLLONGLINE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLMARUBOZU(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLMATCHINGLOW(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLMATHOLD(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLMORNINGDOJISTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLMORNINGSTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLONNECK(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLPIERCING(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLRICKSHAWMAN(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLRISEFALL3METHODS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSEPARATINGLINES(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSHOOTINGSTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSHORTLINE(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSPINNINGTOP(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSTALLEDPATTERN(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLSTICKSANDWICH(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLTAKURI(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLTASUKIGAP(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLTHRUSTING(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLTRISTAR(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLUNIQUE3RIVER(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLUPSIDEGAP2CROWS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
def CDLXSIDEGAP3METHODS(
open: ArrayLike, high: ArrayLike, low: ArrayLike, close: ArrayLike
) -> NDArray[np.int32]: ...
# ---------------------------------------------------------------------------
# Batch API
# ---------------------------------------------------------------------------
from ferro_ta.batch import batch_apply as batch_apply
from ferro_ta.batch import batch_ema as batch_ema
from ferro_ta.batch import batch_rsi as batch_rsi
from ferro_ta.batch import batch_sma as batch_sma
from ferro_ta.batch import compute_many as compute_many
# ---------------------------------------------------------------------------
# Exception hierarchy (re-exported from ferro_ta.exceptions)
# ---------------------------------------------------------------------------
class FerroTAError(Exception):
code: str
suggestion: str | None
def __init__(
self,
message: str,
*,
code: str | None = None,
suggestion: str | None = None,
) -> None: ...
class FerroTAValueError(FerroTAError, ValueError):
code: str
suggestion: str | None
class FerroTAInputError(FerroTAError, ValueError):
code: str
suggestion: str | None
# ---------------------------------------------------------------------------
# API discovery (ferro_ta.api_info)
# ---------------------------------------------------------------------------
def about() -> dict[str, Any]: ...
def indicators(category: str | None = None) -> list[dict[str, Any]]: ...
def info(func_or_name: Callable[..., Any] | str) -> dict[str, Any]: ...
def methods(category: str | None = None) -> list[dict[str, Any]]: ...
# ---------------------------------------------------------------------------
# Logging utilities (ferro_ta.logging_utils)
# ---------------------------------------------------------------------------
def get_logger() -> logging.Logger: ...
def enable_debug(fmt: str = ...) -> None: ...
def disable_debug() -> None: ...
def debug_mode(fmt: str = ...) -> AbstractContextManager[logging.Logger]: ...
def log_call(func: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ...
def benchmark(
func: Callable[..., Any],
*args: Any,
n: int = 100,
warmup: int = 5,
**kwargs: Any,
) -> dict[str, float]: ...
def traced(func: _F) -> _F: ...