# Know Sure Thing (`ta.kst`)



<a id="ta-kst"></a>

Combine and smooth rates of change at different periods, providing a main line and signal line.

[Indicator catalog](https://docs.openbacktesting.com/reference/indicators/index.md) · [How to use indicators](https://docs.openbacktesting.com/reference/indicator-api/index.md)

## Run this example

This complete script uses bundled data. It observes the selected output without placing trades.

```python
import numpy as np
from openbacktesting import Backtest, Strategy
from openbacktesting.test import GOOG

data = GOOG.copy()

class Example(Strategy):
    def init(self):
        self.value = self.ta.kst(self.close)
        self.latest_value = None

    def next(self):
        channel = self.value.kst
        if channel.valid[-1]:
            self.latest_value = float(channel[-1])

result = Backtest(data, Example).run()
print(result["_strategy"].latest_value)
```

## Call and parameters

```python
self.ta.kst(
    source=None,
    *,
    roc1=10,
    roc2=15,
    roc3=20,
    roc4=30,
    sma1=10,
    sma2=10,
    sma3=10,
    sma4=15,
    signal=9,
    inputs=None,
    backend=None,
    required_outputs=None,
)
```

Register in `init()`. Read the returned channel in `next()` after checking `valid[-1]`.

| Parameter | Meaning | Type | Default | Allowed values |
| --- | --- | --- | --- | --- |
| `roc1` | Lookback for rate-of-change component 1. | `int` | `10` | Minimum: `1` |
| `roc2` | Lookback for rate-of-change component 2. | `int` | `15` | Minimum: `1` |
| `roc3` | Lookback for rate-of-change component 3. | `int` | `20` | Minimum: `1` |
| `roc4` | Lookback for rate-of-change component 4. | `int` | `30` | Minimum: `1` |
| `sma1` | Smoothing window for rate-of-change component 1. | `int` | `10` | Minimum: `1` |
| `sma2` | Smoothing window for rate-of-change component 2. | `int` | `10` | Minimum: `1` |
| `sma3` | Smoothing window for rate-of-change component 3. | `int` | `10` | Minimum: `1` |
| `sma4` | Smoothing window for rate-of-change component 4. | `int` | `15` | Minimum: `1` |
| `signal` | Signal-line smoothing period in bars. | `int` | `9` | Minimum: `1` |

`source`/named source arguments accept a column name or same-run single-channel handle. Alternatively, `inputs` maps each input below to a column or handle. `backend` selects a supported implementation; `required_outputs` selects channels for readiness diagnostics. See [shared arguments and handles](https://docs.openbacktesting.com/reference/indicator-api/index.md#bind-inputs-and-read-outputs).

## Inputs and outputs

Required inputs: `close`.

| Channel | Meaning |
| --- | --- |
| `kst` | Kst output |
| `signal` | Signal line |

## Reading values safely

Insufficient history or missing inputs can make a channel invalid. Check that channel's `valid` mask; `ready` is diagnostic and never suppresses `next()`. Multi-output results may have different valid channels on the same bar.

[Indicator catalog](https://docs.openbacktesting.com/reference/indicators/index.md) · [Custom calculations](https://docs.openbacktesting.com/reference/strategy/index.md#register-custom-calculations)
