feat(dynamics): add PlusDI, MinusDI, PlusDM, MinusDM indicators

Complete thin Dx-composition wrapper indicators with full test coverage:

- PlusDi/MinusDi: Directional Indicator wrappers (DiPlus/DiMinus from Dx)
- PlusDm/MinusDm: Directional Movement wrappers (DmPlus/DmMinus from Dx)
- Individual validation tests per indicator directory (TALib, Skender, bounds)
- Combined unit tests (DiDm.Tests.cs) and validation tests (DiDm.Validation.Tests.cs)
- Quantower wrappers + tests for all 4 indicators
- PineScript v6 implementations with compensated RMA
- Normalized .md documentation for all indicators and categories
- 182 tests passing, 0 failures
This commit is contained in:
Miha Kralj
2026-03-11 20:21:52 -07:00
parent 56b86bebfb
commit 33d20f2a18
437 changed files with 4589 additions and 2792 deletions
+2 -21
View File
@@ -1,5 +1,7 @@
# FCB: Fractal Chaos Bands
> *Fractal chaos bands connect swing pivots into a channel, letting the market's own geometry define containment.*
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
@@ -74,27 +76,6 @@ Fractal detection is $O(1)$ (3 comparisons). Deque maintenance is $O(1)$ amortiz
|-----------|-------------|---------|------------|
| `period` | Lookback window for highest/lowest fractal values | 20 | $> 0$ |
### Pseudo-code
```
function FCB(high, low, period):
validate: period > 0
// 3-bar fractal detection (confirmed at current bar)
is_fractal_high = high[1] > high[2] AND high[1] > high[0]
is_fractal_low = low[1] < low[2] AND low[1] < low[0]
// Update persistent fractal values
if is_fractal_high: hi_fractal = high[1]
if is_fractal_low: lo_fractal = low[1]
// Sliding window max/min via monotonic deques
upper = max(hi_fractal over period) // deque-based
lower = min(lo_fractal over period) // deque-based
return [upper, lower]
```
### Output Interpretation
| Output | Description |