Files
easy_tdx_max/src/easy_tdx/MyTT.pyi
T
GitHub 052119e6ae feat(backtest): v4.2 新增 FSL 分水岭指标策略(单标的/组合/寻优)
- MyTT.py: 新增 FSL(CLOSE, VOL, CAPITAL) 分水岭指标
  - SWL = (EMA(C,5)*7 + EMA(C,10)*3) / 10
  - SWS = DMA(EMA(C,12), MAX(1, 100*SUM(VOL,5)/(3*CAPITAL)))
    MIN(A,1.0) 模拟通达信 DMA(X,A) 内部钳制 A<=1 的语义
- MyTT.pyi: 补 FSL 类型 stub(CI mypy 用 .pyi 校验)
- strategies/builtin.py: 注册 FslStrategy(SWL/SWS 金叉死叉)
  capital 作为 Param 暴露流通股本输入
- strategies/presets.py: fsl 寻优网格(4 档 capital)
- tests: 注册表断言加 fsl,阈值 18→19
2026-07-09 18:42:00 +08:00

123 lines
5.7 KiB
Python

"""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,
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: ...
def SAR(HIGH: npt.ArrayLike, LOW: npt.ArrayLike, AF_STEP: float = ..., AF_MAX: float = ...) -> NDArray: ...
def VWAP(
CLOSE: npt.ArrayLike,
HIGH: npt.ArrayLike,
LOW: npt.ArrayLike,
VOL: npt.ArrayLike,
N: int = ...,
) -> NDArray: ...
def AROON(
HIGH: npt.ArrayLike,
LOW: npt.ArrayLike,
N: int = ...,
) -> tuple[NDArray, NDArray, NDArray]: ...
def FK(CLOSE: npt.ArrayLike) -> NDArray: ...
def FSL(
CLOSE: npt.ArrayLike,
VOL: npt.ArrayLike,
CAPITAL: float,
) -> tuple[NDArray, 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: ...