diff --git a/pyproject.toml b/pyproject.toml index 60d4c53..c87342d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,7 @@ ignore_missing_imports = true [[tool.mypy.overrides]] module = "easy_tdx.MyTT" -disallow_untyped_defs = false -disallow_untyped_calls = false +# Type stubs provided via MyTT.pyi — keep strict checks enabled [tool.ruff] target-version = "py310" diff --git a/src/easy_tdx/MyTT.pyi b/src/easy_tdx/MyTT.pyi new file mode 100644 index 0000000..6b2925f --- /dev/null +++ b/src/easy_tdx/MyTT.pyi @@ -0,0 +1,105 @@ +"""Type stubs for MyTT technical indicator library. + +Provides type annotations for the MyTT functions used in easy_tdx. +All indicator functions accept numpy arrays and return numpy arrays. +""" +from __future__ import annotations + +import numpy as np +import numpy.typing as npt + +NDArray = npt.NDArray[np.float64] + +# ── Moving Averages ────────────────────────────────────────────────────────── + +def MA(S: npt.ArrayLike, N: int) -> NDArray: ... +def EMA(S: npt.ArrayLike, N: int) -> NDArray: ... +def SMA(S: npt.ArrayLike, N: int, M: int = ...) -> NDArray: ... +def WMA(S: npt.ArrayLike, N: int) -> NDArray: ... +def DMA(S: npt.ArrayLike, A: npt.ArrayLike) -> NDArray: ... + +# ── MACD / Momentum ───────────────────────────────────────────────────────── + +def MACD( + CLOSE: npt.ArrayLike, + LOW: npt.ArrayLike, + HIGH: npt.ArrayLike, + SHORT: int = ..., + LONG: int = ..., + M: int = ..., +) -> tuple[NDArray, NDArray, NDArray]: ... + +def RSI(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def MTM(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def ROC(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def OBV(CLOSE: npt.ArrayLike, VOL: npt.ArrayLike) -> NDArray: ... + +# ── Bollinger / Envelope ──────────────────────────────────────────────────── + +def BOLL( + CLOSE: npt.ArrayLike, + N: int = ..., + P: float = ..., +) -> tuple[NDArray, NDArray, NDArray]: ... + +# ── Trend Indicators ──────────────────────────────────────────────────────── + +def ATR(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ...) -> NDArray: ... +def DMI( + CLOSE: npt.ArrayLike, + HIGH: npt.ArrayLike, + LOW: npt.ArrayLike, + M: int = ..., + N: int = ..., +) -> tuple[NDArray, NDArray, NDArray, NDArray]: ... + +def KDJ( + CLOSE: npt.ArrayLike, + HIGH: npt.ArrayLike, + LOW: npt.ArrayLike, + N: int = ..., + M1: int = ..., + M2: int = ..., +) -> tuple[NDArray, NDArray, NDArray]: ... + +def WR(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ...) -> NDArray: ... +def CCI(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ...) -> NDArray: ... +def TRIX(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... + +# ── Volume Indicators ─────────────────────────────────────────────────────── + +def VR( + CLOSE: npt.ArrayLike, + VOL: npt.ArrayLike, + N: int = ..., +) -> NDArray: ... +def MFI(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, VOL: npt.ArrayLike, N: int = ...) -> NDArray: ... +def EMV(HIGH: npt.ArrayLike, LOW: npt.ArrayLike, VOL: npt.ArrayLike, N: int = ...) -> NDArray: ... + +# ── Other Indicators ──────────────────────────────────────────────────────── + +def ASI(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, OPEN: npt.ArrayLike, N: int = ...) -> NDArray: ... +def BBI(CLOSE: npt.ArrayLike, N1: int = ..., N2: int = ..., N3: int = ..., N4: int = ...) -> NDArray: ... +def BIAS(CLOSE: npt.ArrayLike, N1: int = ..., N2: int = ..., N3: int = ...) -> tuple[NDArray, NDArray, NDArray]: ... +def BIAS_SIGNAL(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def BRAR(OPEN: npt.ArrayLike, CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ...) -> tuple[NDArray, NDArray]: ... +def CR(HIGH: npt.ArrayLike, LOW: npt.ArrayLike, CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def DFMA(CLOSE: npt.ArrayLike, N1: int = ..., N2: int = ...) -> tuple[NDArray, NDArray]: ... +def DPO(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def EXPMA(CLOSE: npt.ArrayLike, N1: int = ..., N2: int = ...) -> tuple[NDArray, NDArray]: ... +def KTN(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ..., M: int = ...) -> tuple[NDArray, NDArray, NDArray]: ... +def MASS(HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N1: int = ..., N2: int = ...) -> NDArray: ... +def PSY(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def TAQ(CLOSE: npt.ArrayLike, N: int = ...) -> NDArray: ... +def XSII(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, N: int = ...) -> NDArray: ... +def ZHUOYAO(CLOSE: npt.ArrayLike, HIGH: npt.ArrayLike, LOW: npt.ArrayLike, VOL: npt.ArrayLike) -> NDArray: ... + +# ── Utility Functions ──────────────────────────────────────────────────────── + +def CROSS(A: npt.ArrayLike, B: npt.ArrayLike) -> NDArray: ... +def HHV(S: npt.ArrayLike, N: int) -> NDArray: ... +def LLV(S: npt.ArrayLike, N: int) -> NDArray: ... +def REF(S: npt.ArrayLike, N: int) -> NDArray: ... +def SUM(S: npt.ArrayLike, N: int) -> NDArray: ... +def COUNT(S: npt.ArrayLike, N: int) -> NDArray: ... +def STD(S: npt.ArrayLike, N: int) -> NDArray: ...