Warning: session_start(): open(/var/lib/php/sessions/sess_onms8la56mqettrhife2vvjvrd, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
persistable sclass ATR extends CandleBasedIndicator {
// For first phase
new Average initialAverage;
// For second phase
settable SmoothedMovingAverage sma;
// TR value
settable double tr = Double.NaN;
// ATR value
settable double atr = Double.NaN;
// ATR values collected as ticker
gettable TickerSequence atrHistory = new TickerSequence("ATR");
Double value() { ret atr(); }
*(double *length) {}
{
length = 14;
onCandleAdded((IVF1) candle -> {
var x = candle.move();
var u = max(x, 0.0);
var d = neg(min(x, 0.0));
// Calculate TR
if (candles().size() >= 2)
tr(trueRange(ll(candles().nextToLast(), candles().last())));
if (initialAverage.count() < length())
initialAverage.add(tr);
else if (sma == null) {
sma(new SmoothedMovingAverage(length()));
sma().add(initialAverage!);
} else
sma().add(tr);
atr(sma()!);
long time = candle.endTime().toLong();
atrHistory?.addIfPriceChanged(atr, time);
});
}
TickerSequence asTicker(L candles) {
feed(candles);
ret atrHistory;
}
void reset :: after {
resetFields(this, "initialAverage sma tr atr atrHistory");
}
}