Warning: session_start(): open(/var/lib/php/sessions/sess_l8i0qvdnb3fnketu6erqa6se8l, 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
// A is the value type we get for each candle
asclass CandleBasedIndicator {
replace Candle with TradingCandle.
// Number of candles we need to look back to
settable int length = 20;
event candleAdded(Candle candle);
event candleRemoved(Candle candle);
// get current indicator value
abstract A value aka get();
simplyCached SimpleCircularBuffer candles() {
ret new SimpleCircularBuffer(candlesNeeded());
}
int candlesNeeded() { ret length; }
Candle lastCandle() { ret candles().last(); }
void feed(TradingCandleMaker candleMaker) {
if (candleMaker != null)
for (candle : candleMaker.candles())
add(candle);
}
void add aka feed(Iterable candles) {
fOr (candle : candles)
add(candle);
}
void add aka feed(TradingCandle candle) {
if (candle.ongoing()) ret;
if (lastCandle() != null && lessOrEq(candle.startTime, lastCandle().startTime))
ret;
while (candles().size() > max(length-1, 0))
candleRemoved(candles().remove());
candles().add(candle);
candleAdded(candle);
}
void reset {
resetFields(this, "candles_cache");
}
}