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_allow so the filter sees the broker-side symbol, not the source symbol.

filter.symbol_allow

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

Config schema

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

Use it when

Your Source receives signals for many instruments but a specific Destination (e.g. 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_block

Drop signals whose symbol is in the block list. The inverse of filter.symbol_allow, every symbol passes except those you explicitly block.

Config schema

{
  "type": "filter.symbol_block",
  "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_allow

Drop signals whose action is not in the allow list. Valid action values include buy, sell, buylimit, selllimit, buystop, sellstop, close, and closeall.

Config schema

{
  "type": "filter.action_allow",
  "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 any buylimit or close signals 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. Times are evaluated in the configured timezone. Multiple windows can be defined for the same or different days.

Config schema

{
  "type": "filter.time_window",
  "enabled": true,
  "config": {
    "tz": "America/New_York",
    "windows": [
      { "day": "Monday",    "from": "09:30", "to": "16:00" },
      { "day": "Tuesday",   "from": "09:30", "to": "16:00" },
      { "day": "Wednesday", "from": "09:30", "to": "16:00" },
      { "day": "Thursday",  "from": "09:30", "to": "16:00" },
      { "day": "Friday",    "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 signal.Symbol to the broker-side name before any downstream filter or Destination receives it. Replaces the old per-connection SymbolMaps table.

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 (e.g. 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. Values below 1 reduce the position size; values above 1 increase it. The result is passed directly to the Destination, ensure it is within the 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 (or notification message body) 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}}-{{comment}}"
  }
}
json

Available placeholders: {{symbol}}, {{action}}, {{volume}}, {{comment}} (original comment from the signal, if any), and {{source}} (Source name).

Use it when

You manage multiple strategies or accounts and want every MT5 order labelled with the symbol, direction, and source so you can filter the order history later. Also useful for Telegram and Discord notification Flows where the message body should follow a consistent format.