StrategyFlags JSON Reference
Overview
StrategyFlags is the complete output of a single strategy scan. It captures the state of all four indicators, the computed setup evaluation, and the decision recommendation at a specific point in time.
Every scan produces one StrategyFlags object, whether the result is a valid setup, a no-trade, or a waiting state.
Complete Schema
{
"timestamp": "2026-04-14T10:05:00.000Z",
"symbol": "ES1!",
"timeframe": "5",
"bias": {
"daily": "bullish",
"weekly": "bullish",
"draw_on_liquidity": "PDH",
"hit_target": false
},
"session": {
"mode": "NY",
"current_window": "ny_am",
"hunt": {
"side": "HUNT_LOW",
"target_high": 5890.25,
"target_low": 5872.50,
"hi_swept": false,
"lo_swept": true,
"reextended": false,
"reext_high": null,
"reext_low": null
},
"in_macro": true,
"entry_window_active": true
},
"structure": {
"order_blocks": {
"bullish": [
{
"high": 5875.00,
"low": 5872.50,
"spent": false,
"fvg": {
"high": 5876.25,
"low": 5873.00,
"aggressive": 5874.75,
"safe": 5873.50
},
"distance_ticks": 6
}
],
"bearish": []
},
"atr": {
"stop_points": 2.25,
"stop_ticks": 9,
"position_size": 2,
"risk_dollars": 102.50
}
},
"smt": {
"bullish_active": true,
"bearish_active": false,
"paired_instrument": "NQ1!",
"last_signal": "bullish"
},
"price": {
"last": 5875.50,
"day_high": 5892.00,
"day_low": 5868.75
},
"decision": {
"setup_valid": true,
"setup_name": "hunt_long_ob_fvg",
"direction": "long",
"confluence_score": 7,
"confluence_factors": [
"bias_aligns_hunt",
"weekly_confirms",
"ob_in_path",
"smt_confirms"
],
"no_trade_reasons": [],
"entry": {
"aggressive": 5874.75,
"safe": 5873.50,
"ob_body": 5872.50
},
"stop": 5870.25,
"targets": [
{
"level": 5890.25,
"label": "PDH",
"rr": 3.2
}
],
"risk_reward": 3.2,
"position_size": 2
}
}
Field Reference
Root Fields
| Field |
Type |
Description |
timestamp |
string (ISO-8601) |
UTC timestamp of when the scan was executed. Format: YYYY-MM-DDTHH:mm:ss.sssZ. |
symbol |
string |
TradingView symbol identifier for the primary instrument. Examples: "ES1!", "NQ1!", "MES1!", "GC1!". |
timeframe |
string |
Chart timeframe the scan was executed on. Values: "1", "5", "15", "60", "240", "D", "W". Typically "5" for precision-tier scans. |
bias Object
Directional bias from the Bias AI indicator.
| Field |
Type |
Allowed Values |
Description |
bias.daily |
string |
"bullish", "bearish", "neutral" |
Daily candle bias direction. "neutral" means an outside bar closed inside the previous range. |
bias.weekly |
string |
"bullish", "bearish", "neutral" |
Weekly candle bias direction. Used as a confluence factor, not a gate. |
bias.draw_on_liquidity |
string \| null |
"PDH", "PDL", null |
The draw-on-liquidity target. "PDH" (previous day high) for bullish, "PDL" (previous day low) for bearish. null when bias is neutral. |
bias.hit_target |
boolean |
true, false |
Whether the DOL target has been reached during the current session. Determined by DOL line color matching after_raid_color. |
session Object
Session state from Session Hunt AI and system clock.
| Field |
Type |
Allowed Values |
Description |
session.mode |
string |
"NY", "London" |
Which session profile is active. Determines entry window times and EOD cutoff. |
session.current_window |
string |
"pre_session", "asia", "london", "gap_scan", "ny_am", "ny_pm", "post_eod" |
Current session segment. Read from Session Hunt AI session table. |
session.in_macro |
boolean |
true, false |
Whether current time falls within an ICT macro window. |
session.entry_window_active |
boolean |
true, false |
Whether current time is within the configured entry window (NY 07:00--15:00 ET or London 02:00--07:00 ET). |
session.hunt Object
| Field |
Type |
Allowed Values |
Description |
hunt.side |
string \| null |
"HUNT_HIGH", "HUNT_LOW", "INVALID", null |
Current hunt state. "HUNT_HIGH": high swept, draw on low. "HUNT_LOW": low swept, draw on high. "INVALID": both swept. null: no sweep yet. |
hunt.target_high |
number |
Price level |
Session range high. Read from Session Hunt AI line. |
hunt.target_low |
number |
Price level |
Session range low. Read from Session Hunt AI line. |
hunt.hi_swept |
boolean |
true, false |
Whether the session high has been swept. |
hunt.lo_swept |
boolean |
true, false |
Whether the session low has been swept. |
hunt.reextended |
boolean |
true, false |
Whether a re-extension range has formed after the initial range was invalidated. |
hunt.reext_high |
number \| null |
Price level or null |
Re-extension range high. null if no re-extension. |
hunt.reext_low |
number \| null |
Price level or null |
Re-extension range low. null if no re-extension. |
structure Object
Market structure from OB AI.
structure.order_blocks Object
| Field |
Type |
Description |
order_blocks.bullish |
array<OrderBlock> |
All visible bullish order blocks, sorted by proximity to current price (nearest first). |
order_blocks.bearish |
array<OrderBlock> |
All visible bearish order blocks, sorted by proximity to current price (nearest first). |
OrderBlock Object
| Field |
Type |
Description |
high |
number |
Upper boundary of the order block zone. |
low |
number |
Lower boundary of the order block zone. |
spent |
boolean |
false = unspent (solid line, valid for entry). true = spent (dotted line, price already returned). |
fvg |
FVG \| null |
Associated fair value gap. null if the OB has no FVG. |
distance_ticks |
number |
Distance from current price to the nearest edge of the OB, in ticks. |
FVG Object
| Field |
Type |
Description |
high |
number |
Upper boundary of the fair value gap. |
low |
number |
Lower boundary of the fair value gap. |
aggressive |
number |
Aggressive entry level (middle of the FVG / consequent encroachment). |
safe |
number |
Safe entry level (deeper into FVG, closer to OB body). |
structure.atr Object
| Field |
Type |
Description |
atr.stop_points |
number |
ATR-derived stop distance in points. Read from OB AI ATR banner atrsize. |
atr.stop_ticks |
number |
Stop distance converted to ticks for the instrument. |
atr.position_size |
number |
Recommended number of contracts. Read from OB AI ATR banner QTY row. |
atr.risk_dollars |
number |
Total dollar risk at the recommended position size: position_size * stop_ticks * tick_value. |
smt Object
SMT divergence state from the SMT Divergences indicator.
| Field |
Type |
Allowed Values |
Description |
smt.bullish_active |
boolean |
true, false |
Whether a bullish SMT divergence is currently active (primary made lower low, pair did not). |
smt.bearish_active |
boolean |
true, false |
Whether a bearish SMT divergence is currently active (primary made higher high, pair did not). |
smt.paired_instrument |
string |
Symbol |
The paired instrument used for SMT comparison. Example: "NQ1!" when primary is "ES1!". |
smt.last_signal |
string \| null |
"bullish", "bearish", null |
The direction of the most recent SMT signal, regardless of whether it is still active. null if no signal has occurred. |
price Object
Current price state from the chart.
| Field |
Type |
Description |
price.last |
number |
Most recent price (last trade or close of current bar). |
price.day_high |
number |
Current session high. |
price.day_low |
number |
Current session low. |
decision Object
The strategy's computed recommendation. This is the primary output of the interpretation layer.
| Field |
Type |
Allowed Values |
Description |
decision.setup_valid |
boolean |
true, false |
Whether all setup conditions are met and confluence score meets the minimum threshold. |
decision.setup_name |
string \| null |
See below |
Human-readable setup identifier. null when setup_valid is false. |
decision.direction |
string \| null |
"long", "short", null |
Trade direction. null when no valid setup. |
decision.confluence_score |
number |
0--9 |
Weighted confluence score. 0 when no-trade conditions are active. |
decision.confluence_factors |
array<string> |
See below |
String keys of all factors that contributed to the score. Empty array when score is 0. |
decision.no_trade_reasons |
array<string> |
See below |
Reasons the setup is invalid. Empty array when setup_valid is true. |
decision.entry |
EntryLevels \| null |
Object or null |
Entry price levels for all three tiers. null when no valid setup. |
decision.stop |
number \| null |
Price level or null |
Stop loss price. null when no valid setup. |
decision.targets |
array<Target> |
Array |
Target levels with labels and individual R:R. Empty when no valid setup. |
decision.risk_reward |
number \| null |
Ratio or null |
R:R against the primary target. null when no valid setup. |
decision.position_size |
number \| null |
Contracts or null |
Recommended position size. null when no valid setup. |
setup_name Values
| Value |
Description |
"hunt_long_ob_fvg" |
Long setup with OB + FVG entry |
"hunt_long_ob_only" |
Long setup with OB entry (no FVG) |
"hunt_short_ob_fvg" |
Short setup with OB + FVG entry |
"hunt_short_ob_only" |
Short setup with OB entry (no FVG) |
null |
No valid setup |
confluence_factors Values
| Value |
Weight |
Description |
"bias_aligns_hunt" |
2 |
Daily bias direction matches hunt side |
"weekly_confirms" |
1 |
Weekly bias matches daily bias |
"ob_in_path" |
2 |
Unspent OB exists in path to DOL |
"ob_has_fvg" |
1 |
Target OB has associated FVG |
"smt_confirms" |
2 |
Active SMT divergence confirms direction |
"macro_window" |
1 |
Entry during ICT macro window |
no_trade_reasons Values
| Value |
Description |
"neutral_bias" |
Daily bias is neutral (0) |
"invalid_hunt" |
Both sides of session range swept |
"hunt_bias_mismatch" |
Hunt direction does not align with bias |
"no_ob_in_path" |
No unspent OB between price and DOL |
"outside_entry_window" |
Current time outside entry window |
"past_eod_cutoff" |
Past end-of-day cutoff |
"insufficient_rr" |
Risk-reward below 2:1 minimum |
"double_invalidation" |
Re-extension range also both-sided swept |
"news_blackout" |
Inside news event blackout window |
"insufficient_confluence" |
Confluence score below minimum threshold |
"ob_mitigated" |
Target OB was fully mitigated |
"bias_flipped" |
Daily bias changed direction |
"smt_broken" |
Confirming SMT divergence invalidated, score dropped below minimum |
"target_reached" |
DOL target already hit |
EntryLevels Object
| Field |
Type |
Description |
aggressive |
number |
Aggressive entry: FVG midpoint / consequent encroachment. |
safe |
number |
Safe entry: deeper retracement into FVG. |
ob_body |
number |
Conservative entry: OB body level. |
Target Object
| Field |
Type |
Description |
level |
number |
Target price level. |
label |
string |
Human-readable label. Values: "PDH", "PDL", "session_extension". |
rr |
number |
Risk-reward ratio for this specific target, using the configured entry tier. |
Schema Versioning
The StrategyFlags schema follows semantic versioning. The current version is 1.0.0.
- Major: Breaking changes to field names, types, or removal of fields.
- Minor: New fields added (backward compatible).
- Patch: Documentation clarifications, no structural changes.
A schema_version field will be added in a future minor release to enable consumers to detect the version programmatically.