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 };
}