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
filteredand 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.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"]
}
}jsonUse 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"]
}
}jsonUse 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
Config schema
{
"type": "filter.action_allowlist",
"enabled": true,
"config": {
"actions": ["buy", "sell"]
}
}jsonUse 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" }
]
}
}jsonUse 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"
}
}
}jsonUse 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
}
}jsonUse 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"
}
}jsonThe 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.