# StratForge Technical Indicators Catalog

> Comprehensive documentation of the 138+ technical indicators available in the StratForge C++23 backtesting engine.

StratForge (`nonabt::`) is a high-performance C++23 library for quantitative trading, offering over 138 indicators with sub-microsecond computation speeds. It is designed to be 100x to 1000x faster than Python-based alternatives like `backtrader` or `pandas-ta`.

---

## 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 Benchmark

| Engine | Language | Latency (per bar) | Relative Speed |
|--------|----------|-------------------|----------------|
| backtrader | Python | ~10,000ns | 1x |
| pandas-ta | Python/C++ | ~2,500ns | 4x |
| **StratForge** | **C++23** | **< 100ns** | **100x+** |

---

## 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)
