Quick Create — NLP Expression Reference

Type natural language or structured dot-notation to instantly build trading signal expressions.

Contents
  1. Basic Syntax
  2. Canonical Generation Rules
  3. Indicators (200+)
  4. Candle Patterns (60+)
  5. Price & Market Data
  6. Price Patterns (40)
  7. Trend, Channel, Fibonacci, Pivot
  8. Date & Time
  9. Operators
  10. Timeframes
  11. Dot-Notation Mode
  12. Complete Examples
  13. Unary Expressions
  14. History (Previous Bars)

1. Basic Syntax

Expressions follow the pattern: LEFT   OPERATOR   RIGHT with optional symbol and timeframe.

bullish engulfing > 0                 // unary — candle / pattern flag (compare > 0)
doji > 0 on EURUSD 15min
RSI(14) < 30
SMA(50) > SMA(200)
Close > SMA(200) on EURUSD 5min
You can omit parameters — defaults from the native GTS indicator registry are used.

2. Canonical Generation Rules

When an AI/model generates expression JSON or dot-notation from this page, use these rules first.

CaseCanonical Output
Regular indicators: RSI, SMA, EMA, MACD, ATR, BBANDS, STOCH, ADX, SAR...Use GTSIndicators for every regular indicator.
Extended/subsystem indicators: InertialRsi, AdaptiveCentricMa, AdaptiveMacdR2, BreakOfStructure...Use ExtendedIndicators.
Decimal parameters such as SAR(0.02,0.2)Use function syntax. Do not encode decimal params in dot notation because dots are separators.
Single value on a multi-param extended indicatorThe value fills the first configured parameter; remaining parameters use defaults.
Subfields with spacesPrefer compact aliases in text/dot notation: Upper, Lower, SenkouA, AroonUp. JSON may use the runtime field name.
Subfield caseUse the documented convention in generated dot notation: regular GTSIndicators subfields are capitalized (.Signal, .SlowK); ExtendedIndicators outputs are lowercase (.signal, .value).
Candle patternsCanonical natural order is trend pattern, e.g. bullish engulfing. Dot notation is TA_CandlePatterns.PATTERN.Trend.Frame.
Negative fixed valuesUse natural/formula syntax: openpnl < -500. Dot notation may use FixedVal.-500 for integers.
Strict NLP generation rules (read before generating)
  1. Every expression must resolve to LEFT OPERATOR RIGHT. Arithmetic (+ - * /) is not supported — use an indicator, field, or saved expression directly, not a calculation.
  2. LEFT and RIGHT must each be a single numeric field, fixed value, indicator, pattern, account field, or date/time value.
  3. Pattern and event flags (candle patterns, price patterns, structure events) are compared to 0 — use > 0 or != 0, never == 100.
  4. Use only the subfields listed for each indicator (e.g. .signal, .value); do not invent subfields.
  5. Candle-pattern trend defaults to Bullish when unspecified; write bearish <pattern> or both <pattern> to change it.
  6. If the timeframe is omitted, the strategy/alert's configured frame is used. If the symbol is omitted, the configured symbol(s) are used.

3. Indicators

Two different element types. Regular indicators use GTSIndicators (RSI, SMA, EMA, MACD, ATR, BBANDS, STOCH...). Extended Indicators use ExtendedIndicators: advanced / subsystem indicators (adaptive smoothers, SMC-ICT structure, ML/regime).

Regular Indicators — GTSIndicators (RSI · SMA · MACD · ...)

Use NAME(param) or NAME(p1,p2,p3) syntax. Subfields use .SubField.

IndicatorSyntaxDefault ParamsSubfields
RSIRSI(14)14
SMASMA(200)20
EMAEMA(50)30
MACDMACD(12,26,9)12, 26, 9Macd, Signal, Hist
BBANDSBBANDS(20,2)20, 2Upper Band (Upper), Middle Band (Middle), Lower Band (Lower)
STOCHSTOCH(14,3,3)14, 3, 3SlowK, SlowD
ATRATR(14)14
ADXADX(14)14
CCICCI(20)14
WILLRWILLR(14)14
SUPERTRENDSUPERTREND(10,3)10, 3Trend, Direction, Long, Short
ICHIMOKUICHIMOKUTenkan, Kijun, Senkou A (SenkouA), Senkou B (SenkouB), Chikou
AROONAROON(25)25Aroon Up (AroonUp), Aroon Down (AroonDown)
SARSAR(0.02,0.2)0.02, 0.2
MFIMFI(14)14
OBVOBV
MACD(12,26,9).Signal > 0         // MACD signal line
BBANDS(20,2).Upper > Close        // Bollinger upper band
STOCH(14,3,3).SlowK < 20        // Stochastic %K
ICHIMOKU.Tenkan > ICHIMOKU.Kijun  // Ichimoku crossover

Timeframes — how to add one

Append a timeframe token at the end of the expression. With no timeframe, the expression runs on whatever frame the alert/strategy is configured for. (Full token list in §10 Timeframes.)

RSI(14) < 30 5min            // 5-minute RSI
EMA(50) > EMA(200) 1h        // hourly EMA cross
SMA(200) > Close Daily        // daily SMA
MACD(12,26,9).Signal > 0 15min    // 15-minute MACD signal
ATR(14) > 5 4h               // 4-hour ATR

Symbols — with vs without

Omit the symbol and the expression runs on the symbol(s) the alert or strategy is configured for. For alerts you usually name the market explicitly with on SYMBOL.

// WITHOUT a symbol — runs on the configured symbol(s)
RSI(14) < 30
RSI(14) < 30 5min

// WITH a symbol (typical for alerts) — name the market, then the frame
RSI(14) < 30 on EURUSD 5min
Close > SMA(200) on BTCUSDT 1h

Different notations

The same signal can be written in plain formula or in structured dot-notation.

NotationExample
Natural / formulaRSI(14) < 30 on EURUSD 5min
Dot-notationGTSIndicators.RSI.14.5Min < FixedVal.30
Multi-param + frameGTSIndicators.MACD.12.26.9.15Min.Signal > FixedVal.0
In dot-notation the frame goes after the params: GTSIndicators.NAME.param(s).FRAME.subfield. See §11 Dot-Notation.

All GTS Indicator Categories

CategoryIndicators
Overlap / Moving AvgALMA, DEMA, EMA, FWMA, HMA, JMA, KAMA, RMA, SMA, TEMA, TRIMA, VWAP, VWMA, WMA, ZLMA, T3, SUPERTREND, ...
MomentumRSI, MACD, STOCH, STOCHRSI, CCI, MOM, ROC, WILLR, TSI, KDJ, QQE, SQUEEZE, TD_SEQ, AO, BOP, ...
VolatilityATR, BBANDS, KC, DONCHIAN, NATR, TRUE_RANGE, RVI, SQUEEZE_PRO, ...
VolumeOBV, MFI, AD, ADOSC, CMF, EFI, KVO, NVI, PVI, VPT, ...
TrendADX, AROON, ICHIMOKU, SAR, VORTEX, CHOP, DPO, LINREG, CKS, ...
StatisticsSTDDEV, VARIANCE, ZSCORE, SKEW, KURTOSIS, ENTROPY, MAD, ...
Smart Money (SMC)BOS, CHOCH, FVG, ORDER_BLOCK, SWING_HIGH, SWING_LOW, MSB, ...

Extended Indicators (200+) — ExtendedIndicators

Advanced / subsystem indicators (adaptive smoothers, SMC-ICT structure, ML / regime). Use NAME(param) syntax in natural/formula input; use ExtendedIndicators.NAME... in dot notation. Each indicator exposes named subfields such as .signal, .value, .trend, .upper — use only the subfields listed for that indicator.

IndicatorSyntaxDefault ParamsSubfields
InertialRsiInertialRsi(14).signal5, 21, 3, 9signal, rsi
AdaptiveCentricMaAdaptiveCentricMa(200).value14, 2, 2, 0.01, 0.5value
AdaptiveEmaSlopeBandAdaptiveEmaSlopeBand(50).trend20, 80, 2trend, upper, lower
AdaptiveMacdR2AdaptiveMacdR2(20,12,26,9).signal20, 12, 26, 9macd, signal, histogram
QuantileVolatilityBandsQuantileVolatilityBands(100,2).upper100, 2upper, mid, lower
InertialStochasticInertialStochastic(5,34,3,3).signal5, 34, 3, 3signal, k, d
TrueRangePercentileTrueRangePercentile.percentiledefaultpercentile
BreakOfStructureBreakOfStructure(5,5).signal5, 5signal
ChangeOfCharacterChangeOfCharacter(5,5).signal5, 5signal
SuperTrendAiClusteringSuperTrendAiClustering.signaldefaulttrend, signal
KalmanTrendFilterKalmanTrendFilter.trenddefaulttrend, value
VolumeZscoreImpulseVolumeZscoreImpulse.signaldefaultsignal, zscore
AdaptiveMacdR2(20,12,26,9).signal > 0       // native MACD-style signal
QuantileVolatilityBands(100,2).upper > Close // upper volatility band
InertialStochastic(5,34,3,3).signal < 20 // native stochastic-style signal
BreakOfStructure(5,5).signal != 0       // structure break event

Extended Indicator Categories

CategoryIndicators
Adaptive SmoothersAdaptiveCentricMa, AdaptiveEmaSlopeBand, KalmanTrendFilter, Trama, TrendRegularityAdaptiveMa, ...
OscillatorsInertialRsi, AdaptiveMacdR2, InertialStochastic, MultiLookbackRsiConsensus, StochasticAdaptiveD, ...
VolatilityTrueRangePercentile, QuantileVolatilityBands, StatisticalTrailingStop, VolatilityConeProjection, VolatilityOfVolatility, ...
VolumeVolumeZscoreImpulse, SignedVolumePressure, VolumePercentileRank, VolumeWeightedTrendScore, VolumeProfileMatrix, ...
Regime / TrendMarketStateMatrix, DirectionalMatrix, BayesianTrendProbability, SmaDirectionalMatrix, VolatilityStateMachine, ...
StatisticsReturnMadZscore, RollingSkewKurtosis, RollingPercentileRank, PermutationEntropyRegime, IsotonicRegression, ...
Smart Money (SMC)BreakOfStructure, ChangeOfCharacter, FvgDetector, OrderBlockDetector, LiquiditySweepReversal, ...

4. Candle Patterns (60+)

Specify pattern name with optional trend (Bullish/Bearish). Compare against 0 to detect formation.

doji > 0                           // any doji
bullish engulfing > 0 on EURUSD 15min
bearish doji > 0                   // bearish doji only
hammer > 0
morningstar > 0 on BTCUSDT 4h

Popular Patterns

DOJI, HAMMER, ENGULFING, MORNINGSTAR, EVENINGSTAR, SHOOTINGSTAR, HANGINGMAN, HARAMI, HARAMICROSS, SPINNINGTOP, MARUBOZU, PIERCING, DARKCLOUDCOVER, 3WHITESOLDIERS, 3BLACKCROWS, ABANDONEDBABY, INVERTEDHAMMER, DRAGONFLYDOJI, GRAVESTONEDOJI, HIKKAKE, KICKING, BELTHOLD, COUNTERATTACK, ...

5. Price & Market Data

Price Aliases (OHLC Bar)

AliasMaps ToAliasMaps To
closeCLOSE_PRICEvolumeVOLUME
openOPEN_PRICEbody_lenBODY_LEN
highMAX_PRICEtypical_priceTYPICAL_PRICE
lowMIN_PRICEdirectionDIRECTION

Quotes

AliasMaps ToAliasMaps To
bidBidmidMidPrice
askAskspreadSpreadInTicks

Heikin Ashi

AliasMaps ToAliasMaps To
ha_closeCLOSE_PRICEha_highHIGH_PRICE
ha_openOPEN_PRICEha_lowLOW_PRICE
Close > AdaptiveCentricMa(200).value  // price above native smoother
bid > 1.1000                        // bid price check
spread > 5                           // spread filter
ha_close > ha_open                    // Heikin Ashi bullish bar
TrueRangePercentile.percentile > 80       // range/volatility pressure

6. Price Patterns (40)

Chart patterns detected automatically. Compare against 0 to detect formation.

DoubleBottom > 0
HeadAndShoulders > 0
BullFlag > 0
AscendingTriangle > 0 on EURUSD 1h

DoubleBottom, DoubleTop, TripleBottom, TripleTop, HeadAndShoulders, InverseHeadAndShoulders, AscendingTriangle, DescendingTriangle, SymmetricalTriangle, BullFlag, BearFlag, BullPennant, BearPennant, RisingWedge, FallingWedge, CupAndHandle, DiamondTop, DiamondBottom, VBottom, WBottom, MTop, GapUp, GapDown, ...

Pattern Fields

OnFormation (default), FormationDuration, PatternStrength, StartPrice, EndPrice, Direction, PatternHeight

7. Trend, Channel, Fibonacci, Pivot

Trend Object

AliasFieldDescription
trendsideTrendSide1=Up, -1=Down, 0=None
trendspeedperhourTrendSpeedPerHourTrend speed in ticks/hour
fastpriceFastPriceFast EMA current price
slowpriceSlowPriceSlow EMA current price
trendside == 1                       // uptrend active
trendside == -1                      // downtrend active
fastprice > slowprice                  // fast EMA above slow

Channel Object

AliasField
upperchannelUpperChannel
lowerchannelLowerChannel
channellengthChannelLength (width in ticks)
upperchannel > close                  // price below upper channel
close < lowerchannel                  // breakdown below channel

Pivot Points

AliasFieldAliasField
ppPivot Pointr1Resistance 1
s1Support 1r2Resistance 2
s2Support 2r3Resistance 3
s3Support 3
pp > close                            // price below pivot
s1 < low                              // low broke support 1
close > r1                            // price above resistance 1

Account Object

AliasFieldDescription
balanceBalanceAccount balance
openpnlOpenPNLOpen position profit/loss
closedpnlClosedPNLClosed profit/loss
usedmarginUsedMarginUsed margin
availablemarginAvailableMarginAvailable margin
openunitsOpenUnitsTotal open units
balance >= 10000
openpnl < -500

8. Date & Time

AliasTypeField
datetimeDateValueCurrentSysDateTime
dayDateValueCurrentSysDay
timeDateValueCurrentSysTime
14:00HourValueSpecific hour
datetime > DateValue.2026-01-01       // current date/time after fixed date
time < 14:00                         // before 2 PM (intraday hour check)

9. Operators

OperatorMeaningExample
>Greater thanInertialRsi(14).signal > 70
<Less thanInertialRsi(14).signal < 30
>=Greater or equalbalance >= 10000
<=Less or equalTrueRangePercentile.percentile <= 50
==Equaltrendside == 1
!=Not equaltrendside != 0
ANDBoth saved expressions must be trueUserExpression.RSI_Below_30 AND UserExpression.Balance_GT_100
OREither saved expression may be trueUserExpression.RSI_Below_30 OR UserExpression.Price_Above_SMA
crossed / crosses [above]Up-cross: was below last bar, above nowRSI(14) crossed 30
crossed below / crosses underDown-cross: was above last bar, below nowClose crossed below EMA(50)
Referencing a saved expression by name. Anything Quick Create can't express directly — save it as its own expression, then refer to it by name as an operand. Three equivalent forms: If a bare name isn't an exact saved name, the parser fails rather than guessing — use the exact name or the exp. prefix.
Compound conditions. Just type the whole thing — RSI(14) < 30 and balance > 100 auto-builds the two legs plus the combiner for you (no need to pre-save anything). You can also combine already-saved expressions by name with AND/OR (any of the reference forms above) when you want to reuse them.
Three or more, mixed AND/OR, with parentheses. A GTS expression is binary, so a multi-way condition auto-expands bottom-up into intermediate steps plus a final combiner — built for you when you type it. Precedence: AND binds tighter than OR, so a AND b OR c AND d means (a AND b) OR (c AND d). Use parentheses to group explicitly and override precedence — (a OR b) AND c, even nested: a OR (b AND (c OR d)). Function calls like RSI(14) / MACD(12,26,9) / exp(X) are understood as operands, not grouping. The final loads in the builder; the intermediate step(s) are created automatically on Save. A leg can be a saved-expression name, a single operand, or a raw comparison — e.g. (bullish engulfing > 0) and RSI(14) > 50 auto-builds each condition into its own building-block expression, then combines them.
// Input  —  (Trend_Up OR Reversal) AND RSI_Below_30
( exp.Trend_Up OR exp.Reversal ) AND exp.RSI_Below_30

// step1 (intermediate, auto-created on Save)
exp.Trend_Up OR exp.Reversal

// final (loaded for approval)
UserExpression.[step1] AND exp.RSI_Below_30
// Leg 1
RSI(14) < 30                  // save as RSI_Below_30

// Leg 2
balance > 100                 // save as Balance_GT_100

// Combiner
UserExpression.RSI_Below_30 AND UserExpression.Balance_GT_100
[
  {
    "ExpressionName": "RSI_Below_30",
    "Expression_left_ElementType": "GTSIndicators",
    "Expression_left_ElementValue": "RSI",
    "Expression_left_Frame": "5Min",
    "Expression_left_Size1": 14,
    "Expression_left_operation": "<",
    "Expression_right_ElementType": "FixedVal",
    "Expression_right_ElementValue": "30"
  },
  {
    "ExpressionName": "Balance_GT_100",
    "Expression_left_ElementType": "AccountObject",
    "Expression_left_ElementValue": "Balance",
    "Expression_left_operation": ">",
    "Expression_right_ElementType": "FixedVal",
    "Expression_right_ElementValue": "100"
  },
  {
    "ExpressionName": "RSI_Below_30_AND_Balance_GT_100",
    "Expression_left_ElementType": "UserExpression",
    "Expression_left_ElementValue": "RSI_Below_30",
    "Expression_left_operation": "AND",
    "Expression_right_ElementType": "UserExpression",
    "Expression_right_ElementValue": "Balance_GT_100"
  }
]
Crossings. A cross is not a single condition — it is a two-bar event. a crossed b means a was below b on the previous bar AND a is above b now. Typing a cross in Quick Create auto-expands it into two history-indexed legs plus an AND combiner (built bottom-up). The combiner loads into the builder for you to review; the two legs are created automatically when you click Save. crossed below / crosses under flips it (was above, now below).
// Input
RSI(14) crossed 30

// Leg 1 — previous bar was below  (a[1] < b)
RSI(14)[1] < 30            // RSI_14_below_30_prev

// Leg 2 — now above  (a > b)
RSI(14) > 30               // RSI_14_above_30_now

// Combiner (loaded for approval)
UserExpression.RSI_14_below_30_prev AND UserExpression.RSI_14_above_30_now

10. Timeframes

Append timeframe at the end with on SYMBOL TIMEFRAME or just TIMEFRAME.

InputResolves ToInputResolves To
1min 1mins 1m1Min1hour 1hours 1h1Hour
5min 5mins 5m5Min2hour 2hours 2h2Hours
10min 10mins 10m10Min4h 4hour 4hours4Hour
15min 15mins 15m15Min12hour 12hours 12h12Hours
30min 30mins 30m30Mindaily 1dDaily
weekly 1wWeeklymonthly 1moMonthly

11. Dot-Notation Mode

For precise control, use structured TYPE.FIELD.PARAMS.FRAME syntax.

// Regular indicators
GTSIndicators.RSI.14.5Min < FixedVal.30
GTSIndicators.MACD.12.26.9.15Min.Signal > FixedVal.0
OHLC_Bar.CLOSE_PRICE.Daily > GTSIndicators.SMA.30.Daily

// Extended indicators / subsystems
ExtendedIndicators.InertialRsi.14.5Min.signal > FixedVal.30
ExtendedIndicators.AdaptiveMacdR2.20.12.26.9.15Min.signal > FixedVal.0
ExtendedIndicators.QuantileVolatilityBands.100.2.1Hour.upper > OHLC_Bar.CLOSE_PRICE.1Hour

// Candle patterns
TA_CandlePatterns.DOJI.Bullish.5Min > FixedVal.0

// Price bars
OHLC_Bar.CLOSE_PRICE.Daily > ExtendedIndicators.AdaptiveCentricMa.200.Daily.value
HeikinAshiBar.CLOSE_PRICE.5Min > HeikinAshiBar.OPEN_PRICE.5Min

// Objects
TrendObject.TrendSide == FixedVal.1
ChannelObject.UpperChannel > OHLC_Bar.CLOSE_PRICE
PivotObject.S1.Daily > OHLC_Bar.MIN_PRICE.Daily

// Account & date
AccountObject.Balance >= FixedVal.10000
AccountObject.OpenPNL < FixedVal.-500
DateValue.2026-06-01 > DateValue.2026-01-01
HourValue.14:00 > DateValue.CurrentSysDateTime

// Price patterns
PricePattern.DoubleBottom.OnFormation > FixedVal.0
Dot-notation is auto-detected when input starts with TYPE.FIELD format.
Do not use dot notation for decimal params or decimal fixed values. Use formula syntax instead, for example SAR(0.02,0.2) > Close 5min or bid > 1.1000.

12. Complete Examples

Momentum Signals

InertialRsi(14).signal < 30                 // oversold-style momentum
InertialRsi(14).signal > 70                 // overbought-style momentum
AdaptiveMacdR2(20,12,26,9).signal > 0     // MACD-style signal positive
InertialStochastic(5,34,3,3).signal < 20   // stochastic-style oversold
BreakOfStructure(5,5).signal != 0         // structure event

Trend Following

Close > AdaptiveCentricMa(200).value on EURUSD daily // above native smoother
AdaptiveCentricMa(50).value > AdaptiveCentricMa(200).value // fast above slow
KalmanTrendFilter.trend > 0              // strong trend
trendside == 1                         // GTS uptrend active

Volatility & Bands

Close > QuantileVolatilityBands(100,2).upper // above upper band
TrueRangePercentile.percentile > 80       // high range percentile
VolatilityStateMachine.state != 0         // volatility regime active

Pattern Detection

bullish engulfing > 0 on GBPUSD 4h  // candle pattern
DoubleBottom > 0                        // chart pattern
hammer > 0 on EURUSD 1h              // hammer on hourly

Support & Resistance

close > r1                              // above resistance 1
s1 < low                                // broke support 1
close > upperchannel                    // channel breakout

Risk Management

balance >= 10000                       // min balance
openpnl < -500                         // max open loss
spread < 3                             // max spread filter
Expressions are case-insensitive for aliases and pattern names. Symbol names (EURUSD, BTCUSDT) are extracted automatically when preceded by on.

13. Unary Expressions

A unary expression is a single operand with no comparison — it fires on its own when the operand is truthy / non-zero. Just type the operand by itself (no operator, no right side):

bullish engulfing                  // candle pattern — fires on formation
doji on EURUSD 1h                 // pattern on a symbol / frame
UserExpression.My_Signal           // a saved expression, on its own
KalmanTrendFilter.trend            // fires when the value is non-zero
Add a comparison only when you need a threshold (e.g. RSI(14) < 30). A bare numeric indicator (e.g. RSI(14)) becomes a unary getter — valid as a building block, but you usually want a comparison.

14. History (Previous Bars)

Append [N] to any operand to read it N bars back — the same notation the builder shows in dot-notation. [0] or no suffix = the current bar.

Close[1] > Close[2]                // previous close above the one before
RSI(14)[1] < 30                // RSI on the previous bar
direction[1] > 0               // previous bar closed up
high[1] > SMA(20)                  // prior high vs current SMA(20)
A true cross (a<b then a>b) needs two bars of state, which one single-condition expression can't hold. You don't have to build it by hand — type a crossed b (or crossed below) and it auto-expands into the two history-indexed legs (a[1] < b and a > b) plus an AND combiner. See the cross rows in Operators.
GTS — Global Trading Station • Quick Create NLP Reference