# how signals work

## The Signal Pipeline

Every bar, the indicator runs through the following pipeline to determine whether to plot a long (green dot) or short (red dot):

1. Calculate each pillar independently
2. Compute the confluence score (how many agree)
3. Apply filters (chop zone, regime, curl protection, Volatility gate)
4. Resolve conflicts (if long + short both qualify)
5. Apply position state machine (cooldown, flip logic)
6. Plot the dot

{% stepper %}
{% step %}

### Step 1: Individual Pillar Conditions

Each pillar produces a true/false output:

| Pillar         | Long True When                                         | Short True When                                         |
| -------------- | ------------------------------------------------------ | ------------------------------------------------------- |
| Expansion Wave | Bullish expansion active (`bullOK`)                    | Bearish expansion active (`bearOK`)                     |
| Momentum       | Recovering from Oversold zone, rising, above its MA    | Rejecting from Overbought zone, falling, below its MA   |
| Order Flow     | Order Flow slope is positive (rising over last 5 bars) | Order Flow slope is negative (falling over last 5 bars) |
| Divergence     | Valid bullish divergence detected recently             | Valid bearish divergence detected recently              |

The **Volatility line** does not add to the score — it acts as a binary gate that can block an otherwise valid signal.
{% endstep %}

{% step %}

### Step 2: Confluence Score

The scores are summed:

```
Long Score  = Expansion Wave(long)  + Momentum(long)  + Order Flow(long)  + Divergence score (0–3)
Short Score = Expansion Wave(short) + Momentum(short) + Order Flow(short) + Divergence score (0–3)
```

The **Divergence pillar** is "soft" — it can contribute 1, 2, or 3 points depending on how many divergence types are detected (Momentum div, Expansion div, Order Flow div). Its absence never blocks an entry.

The **Base Min Score** setting determines how many points are required. With **Score Pillars** (auto-scale) enabled, the minimum is automatically capped to the number of available pillars.
{% endstep %}

{% step %}

### Step 3: Filters Applied

Even if the score threshold is met, these filters can block the signal:

#### Chop Zone Block

If the Momentum line is between Chop Zone Low (35) and Chop Zone High (65) → **signal blocked**.

#### Regime Filter

If the Regime Filter is enabled (Noise Filter section):

* Long requires `bullOK` (Expansion Wave is bullish)
* Short requires `bearOK` (Expansion Wave is bearish)

#### Curl Protection

* If Momentum is rising for 2 bars AND above its MA AND Order Flow is rising → **shorts blocked**
* If Momentum is falling for 2 bars AND below its MA AND Order Flow is falling → **longs blocked**

#### Volatility Gate

* Long requires Volatility line is not overbought (≥80) and is rising or was recently oversold
* Short requires Volatility line is not oversold (≤20) and is falling or was recently overbought

#### Momentum Trend Filter (optional)

If the **Momentum Trend Filter** is enabled (Momentum Filter (Pivots) section), signals are gated to only fire in the direction the smoothed Momentum derivative is pointing.
{% endstep %}

{% step %}

### Step 4: Conflict Resolution

On rare occasions, both long and short conditions are true on the same bar. The indicator resolves this:

1. **Higher score wins.** Long score > short score → take long. Short score > long score → take short.
2. **On a tie:** If Momentum ≥ 50, prefer long. If Momentum < 50, prefer short.

Only one dot can fire per bar.
{% endstep %}

{% step %}

### Step 5: Position State Machine

The indicator tracks a virtual position state:

* `pos = 1` → currently long
* `pos = -1` → currently short
* `pos = 0` → flat (starting state)

Rules:

* A **long entry** can only fire if currently flat or short
* A **short entry** can only fire if currently flat or long
* After any flip, a **cooldown timer** starts. No new signal fires until the set number of bars has elapsed.
  {% endstep %}

{% step %}

### Step 6: Plot Mode

Two modes are available via **Only plot on state change** (Signals section):

| Mode           | When Dot Appears                                 |
| -------------- | ------------------------------------------------ |
| ✅ On (default) | Only on the bar where the signal flips direction |
| ❌ Off          | Every bar the signal condition is true           |

The default "on flip only" mode produces cleaner charts with discrete entry markers. The "every bar" mode is useful for understanding how long a condition persists or for debugging settings.
{% endstep %}
{% endstepper %}

## Visual Summary

```
GREEN DOT at the bottom of the panel = Long entry signal
RED DOT at the top of the panel      = Short entry signal
```

Each dot represents a moment when all active filters aligned and the score threshold was met in that direction. The dot marks the **first bar** of that condition (when using state-change mode).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.synergysignal.io/how-signals-work.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
