mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 15:44:18 +08:00
feat: add MyTT.pyi type stubs, enable strict mypy
- Create type stub file for 50+ MyTT indicator functions - Covers all 31 functions used in the project + common utilities - Remove mypy disallow_untyped_defs/calls override for MyTT - MyTT now covered by strict mypy via .pyi stubs
This commit is contained in:
+1
-2
@@ -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"
|
||||
|
||||
@@ -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: ...
|
||||
Reference in New Issue
Block a user