Rule catalog

All seven v1 Rules you can add to a Flow. Filter rules drop signals; transform rules modify them.

Overview

Rules are the processing units inside a Flow's pipeline. They run in array order, top to bottom, on a per-Destination clone of the canonical signal. Two families:

  • Filter, evaluates the signal and either lets it continue or drops it. When a signal is dropped, a Delivery row is written with status filtered and the rule name recorded. No further rules run and no dispatch occurs for that Destination.
  • Transform, mutates the signal clone (symbol, volume, comment, etc.) and always continues. The original Signal row is never touched.

Rule ordering matters

Transform rules must come before any filter or Destination that depends on the transformed value. For example, place transform.symbol_map before filter.symbol_allowlist so the filter sees the broker-side symbol, not the source symbol.

filter.symbol_allowlist

Drop signals whose symbol is not in the allow list. Only signals whose symbol matches one of the listed values will continue to the next rule or Destination. Matching is case-insensitive.

Config schema

{
  "type": "filter.symbol_allowlist",
  "enabled": true,
  "config": {
    "symbols": ["EURUSD", "GBPUSD", "XAUUSD"]
  }
}
json

Use it when

Your Source receives signals for many instruments but a specific Destination (for example, a conservative MT5 account) should only trade a curated list. Add this rule at the top of the pipeline so signals for unlisted symbols are dropped before any transform runs.

filter.symbol_blocklist

Drop signals whose symbol is in the block list. The inverse of filter.symbol_allowlist: every symbol passes except those you explicitly block. Matching is case-insensitive.

Config schema

{
  "type": "filter.symbol_blocklist",
  "enabled": true,
  "config": {
    "symbols": ["BTCUSD", "ETHUSD"]
  }
}
json

Use it when

Most signals from your Source are fine to pass through, but a small set of instruments is off-limits for a particular account, for example, blocking crypto pairs on a broker that charges high swap fees for them.

filter.action_allowlist

Drop signals whose action is not in the allow list. Matching is case-insensitive. Common values: buy, sell, closeall, buylimit, selllimit, buystop, sellstop.

See the signal format reference for the full list of supported actions.

Advanced actions on MT5

Pending-order and other advanced actions are accepted by the platform and can be filtered like any other action, but the MT5 connector does not execute them yet. Support is coming soon.

Config schema

{
  "type": "filter.action_allowlist",
  "enabled": true,
  "config": {
    "actions": ["buy", "sell"]
  }
}
json

Use it when

A Destination should only receive market orders, not pending orders or close signals. For example, an MT5 account managed by a specific risk strategy can be restricted to buy and sell only, ignoring pending-order and close actions from the Source.

filter.time_window

Drop signals received outside a weekly schedule. Each window specifies a day of the week, an opening time, and a closing time in 24-hour HH:MM format. Times are evaluated in the configured timezone, which defaults to UTC. Multiple windows can be defined for the same or different days, and a window may cross midnight.

Days use lowercase three-letter codes: mon, tue, wed, thu, fri, sat, sun.

Config schema

{
  "type": "filter.time_window",
  "enabled": true,
  "config": {
    "tz": "America/New_York",
    "windows": [
      { "day": "mon", "from": "09:30", "to": "16:00" },
      { "day": "tue", "from": "09:30", "to": "16:00" },
      { "day": "wed", "from": "09:30", "to": "16:00" },
      { "day": "thu", "from": "09:30", "to": "16:00" },
      { "day": "fri", "from": "09:30", "to": "16:00" }
    ]
  }
}
json

Use it when

You only want trades placed during active market hours for a given region, or when your strategy is known to perform poorly around news events outside regular hours. The example above restricts signals to US equity session hours, Monday through Friday.

transform.symbol_map

Rename a signal's symbol using a lookup map. The rule rewrites the symbol to the broker-side name before any downstream filter or Destination receives it. The original symbol is preserved on the signal as the originalSymbol parameter.

Config schema

{
  "type": "transform.symbol_map",
  "enabled": true,
  "config": {
    "map": {
      "GOLD":  "XAUUSD",
      "US30":  "DJ30",
      "OIL":   "USOIL"
    }
  }
}
json

Use it when

Your signal source uses generic or exchange-standard symbol names (for example GOLD) but your broker uses a different ticker (XAUUSD). Map as many symbols as you need. Symbols not in the map are left unchanged. Place this rule before any filter that checks symbol names.

transform.volume_scaler

Multiply the signal's volume by a constant factor before dispatch. The factor must be greater than zero: values below 1 reduce the position size, values above 1 increase it. The result is passed directly to the Destination, so make sure it stays within your broker's lot size constraints.

Config schema

{
  "type": "transform.volume_scaler",
  "enabled": true,
  "config": {
    "factor": 0.5
  }
}
json

Use it when

You want to run the same strategy at a different risk level on a second account. Set up a separate Flow with a factor of 0.5 to halve the position size automatically, without changing the original signal or the primary Flow.

transform.comment_template

Set the trade comment using a template with placeholders. The rendered comment is attached to every MT5 order placed by this Flow, making it easy to trace the source of a trade in your broker's order history.

Config schema

{
  "type": "transform.comment_template",
  "enabled": true,
  "config": {
    "template": "{symbol}-{action}-signalync"
  }
}
json

The template supports these placeholders, each replaced with the signal's value: {symbol}, {action}, {volume}.

Use it when

You manage multiple strategies or accounts and want every MT5 order labelled with the symbol and direction so you can filter the order history later.

When the Telegram channel and Discord Destinations launch, the same template will drive the notification message body.