feat(dynamics): add PTA - Ehlers Precision Trend Analysis

TASC Sep 2024. Dual 2-pole Butterworth highpass bandpass for
near-zero-lag trend extraction. HP(long) - HP(short) preserves
cycles between shortPeriod and longPeriod.

- Core: Pta.cs with O(1) streaming, Span batch, state rollback
- Quantower: PtaIndicator adapter with LineSeries + SetValue
- Tests: 31 lib + 11 Quantower (all passing)
- Pine: pta.pine PineScript v6 reference
- Docs: Pta.md canonical template v3
- Python: Exports.Generated.cs + _bridge.py + dynamics.py
- Indexes: _sidebar.md, lib/_index.md, dynamics/_index.md,
  docs/indicators.md, docs/pinescript.md
This commit is contained in:
Miha Kralj
2026-03-17 17:25:17 -07:00
parent 84d12e5706
commit aec3a64e4e
14 changed files with 1023 additions and 1 deletions
+12
View File
@@ -266,6 +266,18 @@ def plus_dm(high: object, low: object, close: object, period: int = 14, offset:
return _wrap(destination, idx, f"PLUS_DM_{period}", "dynamics", offset)
def pta(close: object, longPeriod: int = 250, shortPeriod: int = 40, offset: int = 0, **kwargs) -> object:
"""Ehlers Precision Trend Analysis."""
longPeriod = int(kwargs.get("long_period", longPeriod))
shortPeriod = int(kwargs.get("short_period", shortPeriod))
offset = int(offset)
src, idx = _arr(close)
n = len(src)
output = _out(n)
_check(_lib.qtl_pta(_ptr(src), _ptr(output), n, longPeriod, shortPeriod))
return _wrap(output, idx, f"PTA_{longPeriod}_{shortPeriod}", "dynamics", offset)
def qstick(open: object, high: object, low: object, close: object, volume: object, period: int = 14, useEma: int = 0, offset: int = 0, **kwargs) -> object:
"""QStick."""
period = int(kwargs.get("length", period))