money.rave.common.backend.expression.indicator.StochasticFastK.kt Maven / Gradle / Ivy
package money.rave.common.backend.expression
import money.rave.common.backend.scaledBigDecimal
import java.math.BigDecimal
class StochasticFastK(
private val candleCount: Int,
private val expression: Expression,
private val defaultCandleIndex: Int = 0,
) : Expression {
private val name = "${javaClass.simpleName}:$candleCount:$expression"
override fun evaluate(context: EvaluationContext, candleIndex: Int): BigDecimal {
val index = defaultCandleIndex + candleIndex
if (!context.candleDatas[index].data.has(name)) {
val close = expression.evaluate(context, index)
val minimum = Min(expression, candleCount).evaluate(context, index)
val maximum = Max(expression, candleCount).evaluate(context, index)
val stochasticFastPercentK = (close - minimum) / (maximum - minimum)
context.candleDatas[index].data.addProperty(name, stochasticFastPercentK.scaledBigDecimal())
}
return context.candleDatas[index].data.getAsJsonPrimitive(name).asBigDecimal
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy