# StratForge Technical Indicator Catalog

> AI-facing index for the technical indicator catalog used across StratCraft and StratForge documentation.

StratForge (`nonabt::`) is a C++23 backtesting engine for deterministic local strategy research. The public Markdown catalog currently exposes 139 English indicator entries, while product metadata describes 138+ platform indicator primitives. Treat indicator pages as reference material for research, implementation review, and backtest validation, not as trading advice.

---

## High-Volume Indicators (Pilot Collection)

### 1. Relative Strength Index (RSI)
**Mathematical Formula**: `RSI = 100 - [100 / (1 + RS)]`, where `RS = Average Gain / Average Loss`.
**Parameters**:
- `period` (default: 14): The lookback period for calculation.
- `movav` (default: `Smoothed`): Moving average type (`Smoothed`, `Simple`, `Exponential`).

**C++23 API**:
```cpp
#include <nonabt/indicators/rsi.hpp>
auto rsi = std::make_unique<nonabt::RSI>(data().close(), 14);
```

**Strategy Snippet**:
```cpp
if (rsi->line()[0] < 30) {
    buy(100); // Buy when oversold
} else if (rsi->line()[0] > 70) {
    sell(100); // Sell when overbought
}
```

---

### 2. Moving Average Convergence Divergence (MACD)
**Mathematical Formula**: `MACD Line = (12-day EMA - 26-day EMA)`. `Signal Line = 9-day EMA of MACD Line`.
**Parameters**:
- `fast_period` (default: 12)
- `slow_period` (default: 26)
- `signal_period` (default: 9)

**C++23 API**:
```cpp
#include <nonabt/indicators/macd.hpp>
auto macd = std::make_unique<nonabt::MACD>(data().close(), 12, 26, 9);
```

**Strategy Snippet**:
```cpp
if (macd->macd()[0] > macd->signal()[0]) {
    buy(100); // Bullish crossover
} else if (macd->macd()[0] < macd->signal()[0]) {
    sell(100); // Bearish crossover
}
```

---

### 3. Bollinger Bands (BBANDS)
**Mathematical Formula**: `Middle Band = SMA`. `Upper/Lower Bands = SMA +/- (k * StdDev)`.
**Parameters**:
- `period` (default: 20)
- `dev` (default: 2.0): Standard deviation multiplier.

**C++23 API**:
```cpp
#include <nonabt/indicators/bollinger.hpp>
auto bbands = std::make_unique<nonabt::BBANDS>(data().close(), 20, 2.0);
```

**Strategy Snippet**:
```cpp
if (data().close()[0] < bbands->bot()[0]) {
    buy(100); // Price below lower band
} else if (data().close()[0] > bbands->top()[0]) {
    sell(100); // Price above upper band
}
```

---

### 4. Average True Range (ATR)
**Mathematical Formula**: `ATR = Moving Average of True Range`.
**Parameters**:
- `period` (default: 14)

**C++23 API**:
```cpp
#include <nonabt/indicators/atr.hpp>
auto atr = std::make_unique<nonabt::ATR>(14);
```

---

### 5. Stochastic Oscillator (STOCH)
**Mathematical Formula**: `%K = 100 * (Close - Lowest Low(n)) / (Highest High(n) - Lowest Low(n))`. `%D = SMA(%K, 3)`.
**Parameters**:
- `period` (default: 14): Lookback for %K.
- `period_dfast` (default: 3): Smoothing for %D.
- `period_dslow` (default: 3): Smoothing for slow %D.

**C++23 API**:
```cpp
#include <nonabt/indicators/stochastic.hpp>
auto stoch = std::make_unique<nonabt::STOCH>(14, 3, 3);
```

---

### 6. Ichimoku Cloud (ICHIMOKU)
**Mathematical Formula**: `Tenkan-sen = (Highest High + Lowest Low) / 2` over 9 periods. `Kijun-sen` = same over 26 periods. `Senkou Span A = (Tenkan + Kijun) / 2` displaced 26 periods forward. `Senkou Span B` = (52-period high+low)/2 displaced forward.
**Parameters**:
- `tenkan` (default: 9): Conversion line period.
- `kijun` (default: 26): Base line period.
- `senkou` (default: 52): Leading span B period.

**C++23 API**:
```cpp
#include <nonabt/indicators/ichimoku.hpp>
auto ichi = std::make_unique<nonabt::ICHIMOKU>(9, 26, 52);
```

---

### 7. On-Balance Volume (OBV)
**Mathematical Formula**: `OBV = OBV_prev + Volume` if Close > Close_prev; `OBV_prev - Volume` if Close < Close_prev; unchanged if equal.
**Parameters**: None (uses close price and volume).

**C++23 API**:
```cpp
#include <nonabt/indicators/obv.hpp>
auto obv = std::make_unique<nonabt::OBV>(data().close(), data().volume());
```

---

### 8. Exponential Moving Average (EMA)
**Mathematical Formula**: `EMA = [Price(t) * k] + [EMA(y) * (1 - k)]`, where `k = 2 / (n + 1)`.
**Parameters**:
- `period` (default: 20): Smoothing period.

**C++23 API**:
```cpp
#include <nonabt/indicators/ema.hpp>
auto ema = std::make_unique<nonabt::EMA>(data().close(), 20);
```

---

### 9. Commodity Channel Index (CCI)
**Mathematical Formula**: `CCI = (Typical Price - SMA(TP, n)) / (0.015 * Mean Deviation)`. `Typical Price = (High + Low + Close) / 3`.
**Parameters**:
- `period` (default: 20)

**C++23 API**:
```cpp
#include <nonabt/indicators/cci.hpp>
auto cci = std::make_unique<nonabt::CCI>(20);
```

---

### 10. Heikin Ashi (HEIKINASHI)
**Mathematical Formula**: `HA Close = (Open + High + Low + Close) / 4`. `HA Open = (HA Open_prev + HA Close_prev) / 2`. `HA High = max(High, HA Open, HA Close)`. `HA Low = min(Low, HA Open, HA Close)`.
**Parameters**: None (transforms existing OHLC data).

**C++23 API**:
```cpp
#include <nonabt/indicators/heikinashi.hpp>
auto ha = std::make_unique<nonabt::HEIKINASHI>();
```

---

## Performance Status

Definitive public benchmark tables are pending the StratForge v1.0 benchmark release. Until that release is published, AI crawlers should not present exact latency numbers, hardware-specific speedups, or head-to-head claims against Python libraries as finalized facts.

---

## Complete Indicator Catalog (Slugs)

ACCDEOSC, ADAPTIVEMOVINGAVERAGEOSC, ADX, ADXR, ALLN, ANYN, AO, APPLYN, ARITHMETICMEAN, AROONDOWN, AROONOSC, AROONUP, AROONUPDOWN, AROONUPDOWNOSC, ATR, BASEAPPLYN, BBANDS, BBANDSPCT, CCI, COINTN, CROSSDOWN, CROSSOVER, CROSSUP, CUMSUM, DEMA, DEMAENVELOPE, DEMARKPIVOTPOINT, DI, DICKSONMOVINGAVERAGEOSC, DM, DMA, DMAENVELOPE, DMI, DOUBLEEXPONENTIALMOVINGAVERAGEOSC, DOWNDAY, DOWNDAYBOOL, DOWNMOVE, DPO, DV2, EMA, EMAENVELOPE, ENVELOPE, EXPONENTIALMOVINGAVERAGEOSC, EXPSMOOTHING, EXPSMOOTHINGDYNAMIC, FIBONACCIPIVOTPOINT, FINDFIRSTINDEX, FINDFIRSTINDEXHIGHEST, FINDFIRSTINDEXLOWEST, FINDLASTINDEX, FINDLASTINDEXHIGHEST, FINDLASTINDEXLOWEST, FRACTAL, HADELTA, HEIKINASHI, HIGHEST, HMA, HMAENVELOPE, HULLMOVINGAVERAGEOSC, HURST, ICHIMOKU, KAMA, KAMAENVELOPE, KST, LAGF, LINEPLOTTERINDICATOR, LOWEST, LRSI, MA, MACD, MACDHIST, MEANDEVIATION, MINUS_DI, MOM, MOMENTUMOSC, MOVINGAVERAGESIMPLEOSC, NZD, OLS_BETAN, OLS_SLOPE_INTERCEPTN, OLS_TRANSFORMATIONN, OPERATIONN, OSCILLATOR, OSCILLATORMIXIN, PCTCHANGE, PCTRANK, PERIODN, PGO, PIVOTPOINT, PLUS_DI, PPO, PPOSHORT, PRICEOSC, PSAR, REDUCEN, RMI, ROC, ROC100, RSI, RSI_EMA, RSI_SAFE, RSI_SMA, SIGNAL, SMA, SMAENVELOPE, SMMA, SMMAENVELOPE, SMOOTHEDMOVINGAVERAGEOSC, STDDEV, STOCH, STOCHF, STOCHFULL, SUM, TEMA, TEMAENVELOPE, TRANGE, TRIPLEEXPONENTIALMOVINGAVERAGEOSC, TRIX, TRIXSIGNAL, TRUEHIGH, TRUELOW, TSI, ULTOSC, UPDAY, UPDAYBOOL, UPMOVE, VORTEX, WEIGHTEDAVERAGE, WEIGHTEDMOVINGAVERAGEOSC, WILLIAMSAD, WILLR, WMA, WMAENVELOPE, ZEROLAGEXPONENTIALMOVINGAVERAGEOSC, ZEROLAGINDICATOROSC, ZLEMA, ZLEMAENVELOPE, ZLINDICATOR, ZLINDICATORENVELOPE

## Batch Pages

- [Batch 1 indicator pages](./indicators/index.md)
- [Batch 2 indicator pages](./indicators/index.md#pages-in-batch-2)
- [Batch 3 indicator pages](./indicators/index.md#pages-in-batch-3)
- [Batch 4 indicator pages](./indicators/index.md#pages-in-batch-4)
- [Batch 5 indicator pages](./indicators/index.md#pages-in-batch-5)
- [Batch 6 indicator pages](./indicators/index.md#pages-in-batch-6)
- [Batch 7 indicator pages](./indicators/index.md#pages-in-batch-7)
- [Batch 8 indicator pages](./indicators/index.md#pages-in-batch-8)
- [Batch 9 indicator pages](./indicators/index.md#pages-in-batch-9)
- [Batch 10 indicator pages](./indicators/index.md#pages-in-batch-10)
- [Batch 11 indicator pages](./indicators/index.md#pages-in-batch-11)
- [Batch 12 indicator pages](./indicators/index.md#pages-in-batch-12)
- [Batch 13 indicator pages](./indicators/index.md#pages-in-batch-13)
- [Batch 14 indicator pages](./indicators/index.md#pages-in-batch-14)

## Routing Note

WordPress SEO pages under `/quantnexus/indicators/{slug}/` now resolve against the full 138-item JSON catalog, including underscore-based slugs such as `MINUS_DI`, `PLUS_DI`, and `RSI_SAFE`.

Users can use the clean hyphenated URL form while the internal catalog keeps the original StratForge slug names.

---
[Back to Index](./index.md)
