Stochastic Oscillator (stoch)
[[stoch]] shows where the current close sits inside the recent range defined by highs and lows. It helps you read market pace when price moves toward the edges of its calculation window.
The block exposes two numeric series on a 0 to 100 scale. %K is the main oscillator line. %D is a simple moving average of %K, which smooths the reading.
Overbought and oversold zones are not fixed. You define these thresholds in your strategy, then explore them with grid search. The 80 and 20 levels are common starting references, but they remain parameters you can tune to your own logic.
Block declaration
A strategy can contain multiple [[stoch]] blocks. Each block outputs two numeric series, %K and %D.
The [[stoch]] block does not accept a source key and always uses the standard high, low, and close price series.
Examples
Minimal setup
[[stoch]]
k_id = "stoch_k"
d_id = "stoch_d"
# k_length = 14
# d_length = 3Custom fixed lengths
This block uses custom k_length and d_length values.
[[stoch]]
k_id = "stoch_k"
d_id = "stoch_d"
k_length = 12
d_length = 4Search for the optimal lengths
This block explores the possible combinations of k_length and d_length to identify the best-performing configuration.
[[stoch]]
k_id = "stoch_k"
d_id = "stoch_d"
k_length.start = 10
k_length.stop = 20
d_length.start = 2
d_length.stop = 6Searching overbought and oversold zones
This example combines [[stoch]] with two [[constant]] blocks to optimize overbought and oversold thresholds.
The oversold < overbought constraint keeps combinations consistent, and the conditions use both %K and %D to reduce noise.
[[constant]]
id = "overbought"
start = 70
stop = 90
step = 5
[[constant]]
id = "oversold"
start = 10
stop = 30
step = 5
[[stoch]]
k_id = "stoch_k"
d_id = "stoch_d"
# k_length = 14
# d_length = 3
[constraints]
condition = "oversold < overbought"
[[condition]]
id = "stoch_overbought"
condition = "stoch_k > overbought and stoch_d > overbought"
next_block_id = "..."
[[condition]]
id = "stoch_oversold"
condition = "stoch_k < oversold and stoch_d < oversold"
next_block_id = "..."Parameters
| Parameter | Description |
|---|---|
k_idd_idString Required | Unique identifiers for the %K and %D series. |
k_lengthInteger or Table Optional | Window used to compute %K (number of candles); must be ≥ 1 when specified. If k_length is omitted, the default value is 14.Usage: • Fixed: k_length = 14• Grid search: – k_length.start = min_value– k_length.stop = max_value– k_length.step = value (optional, default 1) |
d_lengthInteger or Table Optional | Window length for the moving average of %K (number of candles); must be ≥ 1 when specified. If d_length is omitted, the default value is 3.Usage: • Fixed: d_length = 3• Grid search: – d_length.start = min_value– d_length.stop = max_value– d_length.step = value (optional, default 1) |
symbolString or Array Optional | Market symbol(s) from which this block reads its candles (high, low, close). If symbol is omitted, the block inherits the primary symbol from [backtest]. For symbol format, arrays, and alignment rules, see Exchanges, Symbols and Timeframes. |
timeframeString or Array Optional | Timeframe on which this indicator is computed. If timeframe is omitted, the computation uses the grid’s main timeframe defined in [backtest].For accepted formats and timeframe alignment rules, see Exchanges, Symbols and Timeframes. |
The source key is not accepted by the [[stoch]] block.
The oscillator always relies on the high, low, and close series of the selected market and timeframe.
Available variables
The stoch block exposes two numeric series (%K and %D), the lengths used in the calculation, and the symbol and timeframe context.
Assume the block is configured as:
[[stoch]]
k_id = "stoch_k"
d_id = "stoch_d"Then:
| Variable | Description |
|---|---|
stoch_k orstoch_k[0]Decimal | Current %K value. |
stoch_d orstoch_d[0]Decimal | Current %D value. |
stoch_k[n]Decimal | %K value from n candles ago. |
stoch_d[n]Decimal | %D value from n candles ago. |
stoch_k.k_lengthDecimal | Length used to compute %K (stochastic window). |
stoch_k.d_lengthDecimal | Length used to smooth %K and produce %D. |
stoch_k.symbolString | Market symbol used for %K. |
stoch_d.symbolString | Market symbol used for %D. |
stoch_k.timeframeString | Timeframe used for %K. |
stoch_d.timeframeString | Timeframe used for %D. |
Notes:
- Numeric variables combine freely in expressions (arithmetic, comparisons, and logical operators).
- Text variables are strings intended for equality and inequality checks.