Bollinger Bands (BBANDS)
API StratForge C++23 vérifiée, calcul et période initiale.
Route: /indicators/bbands/
Moyenne mobile simple fixe et écart-type de population (division par n, pas n - 1). Les trois bandes ont la même unité que les prix. Ce constructeur ne propose pas movav.
mid = SMA(period)
top = mid + devfactor * sqrt(sum((price - mid)^2) / period)
bottom = mid - devfactor * sqrt(sum((price - mid)^2) / period)
Paramètres
period = 20devfactor = 2.0
Exemple de calcul
Avec period = 4 et les prix [2, 4, 6, 8] : moyenne 5, écarts au carré [9, 1, 1, 9], variance 5, écart-type sqrt(5). Pour devfactor = 2 : mid = 5, top = 9.472136, bottom = 0.527864 (six décimales). Les trois premières barres donnent NaN ; la quatrième est valide. Par défaut, il faut 20 barres.
Utiliser des prix finis et des period/lookback positifs. Cette version remplace zéro par 1, sans valider les valeurs de sécurité personnalisées ni garantir un résultat pertinent pour des prix non finis. Les exemples ne sont ni des signaux de trading ni des preuves de rendement.
C++23 API — StratForge
#include <stratforge/indicators/bollinger.hpp>
#include <cassert>
#include <cmath>
#include <iomanip>
#include <iostream>
int main() {
stratforge::Line<double> close;
stratforge::BollingerBands bands(close, 4, 2.0);
assert(bands.minimum_period() == 4);
for (double price : {2.0, 4.0, 6.0, 8.0}) {
close.forward(price);
bands.next();
if (close.size() < 4) {
assert(std::isnan(bands.mid()[0]));
assert(std::isnan(bands.top()[0]));
assert(std::isnan(bands.bottom()[0]));
}
}
assert(std::abs(bands.mid()[0] - 5.0) < 1e-9);
assert(std::abs(bands.top()[0] - 9.472135955) < 1e-9);
assert(std::abs(bands.bottom()[0] - 0.527864045) < 1e-9);
std::cout << std::fixed << std::setprecision(6)
<< bands.mid()[0] << " " << bands.top()[0] << " "
<< bands.bottom()[0] << "\n";
}
Reproduire
StratForge d25404dcf2c3842ba304ddc60ac19cfec1f8aa37 (2026-08-28); GCC 14, C++23; scalar build, no xsimd dependency.
git clone https://github.com/StratCraftsAI/StratForge.git StratForge
git -C StratForge checkout --detach d25404dcf2c3842ba304ddc60ac19cfec1f8aa37
g++-14 -std=c++23 -O2 -Wall -Wextra -pedantic -IStratForge/include example.cpp -o example
./example
example.cpp: C++23 API. stdout:
5.000000 9.472136 0.527864
