CoreXTrader Platform

TDSL Documentation

The complete reference for the Trading Domain Specific Language — build professional indicators and automated strategies with native performance.

BollingerBands.tbc
about {
  author: "CoreXTrader";
  version: "1.0.0";
}

parameters {
  int    period     = 20;
  double multiplier = 2.0;
}

struct BollingerSignal {
  double upper;
  double middle;
  double lower;
}

display {
  outputs: 3
  BollingerSignal.upper  { type: "line"; color: "#c42626ff"; name: "Upper"; width: 1; };
  BollingerSignal.middle { type: "line"; color: "#b0aaaaff"; name: "Middle"; width: 0.5; };
  BollingerSignal.lower  { type: "line"; color: "#50c426ff"; name: "Lower"; width: 1; };
  fill { buffer_a: 2; buffer_b: 0; color: "rgba(19, 75, 228, 0.15)"; };
}

series double middle[];
series double upper[];
series double lower[];

calculate() {
  double closes[] = close();
  int len   = length(closes);
  int start = Chart.resume_index > 0 ? Chart.resume_index - 1 : period - 1;

  middle[] = create_array(len);
  upper[]  = create_array(len);
  lower[]  = create_array(len);

  for (int i = start; i < len; i = i + 1) {
    double sum = 0.0;
    for (int j = 0; j < period; j = j + 1) {
      sum = sum + closes[i - j];
    }
    double mean = sum / period;
    middle[i] = mean;

    double sq = 0.0;
    for (int j = 0; j < period; j = j + 1) {
      double d = closes[i - j] - mean;
      sq = sq + (d * d);
    }
    double std_dev = Math.Sqrt(sq / period);
    upper[i] = mean + (multiplier * std_dev);
    lower[i] = mean - (multiplier * std_dev);
  }

  return BollingerSignal { upper: upper, middle: middle, lower: lower };
}