The project's README from github.com/carreypro/ict-trading-model. As one markdown file: README.md.
A Codex skill that combines multi-timeframe bias, liquidity mapping, premium/discount location, session context, displacement, market structure, and PD arrays into a strict ICT/SMC setup-validation framework. It supports chart screenshots, live candles, and OHLCV JSON across bullish, bearish, and no-trade scenarios. Every analysis returns one auditable status—confirmed, developing, invalidated, or no-trade—with the supporting evidence, exact trigger, structural invalidation, liquidity target, and estimated reward to risk.
Its core advantage is evidence-gated planning: an FVG, order block, or opposing candle cannot create a trade signal by itself. The complete sequence must be evaluated:
Higher-timeframe bias
→ Liquidity objective
→ Premium / discount location
→ Liquidity sweep
→ Displacement and strict FVG
→ Close-confirmed MSS or BOS
→ Retracement into OB / FVG / Breaker / OTE
→ Invalidation and target
→ Risk-to-reward validation
The skill produces analysis and conditional trade plans only. It never executes orders.
| Capability | Output |
|---|---|
| Multi-timeframe context | Bias, dealing range, liquidity objective, and premium/discount location |
| Setup validation | Sweep, displacement, strict FVG, close-confirmed MSS/BOS, and retracement evidence |
| Execution planning | Exact trigger, structural invalidation, target liquidity, and reward to risk |
| Decision control | One status: confirmed, developing, invalidated, or no-trade |
| Auditability | Observed, derived, interpretive, and missing evidence kept separate |
Install the skill directly from GitHub:
npx skills add https://github.com/carreypro/ict-trading-model --skill ict-trading-model
Invoke it explicitly in Codex:
Use $ict-trading-model to analyze this chart.
It may also activate automatically when a request refers to ICT, SMC, liquidity sweeps, FVGs, order blocks, breakers, OTE, MSS, or BOS.
Use $ict-trading-model to review this chart.
Reconstruct the setup in chronological order and identify:
- higher-timeframe bias;
- BSL and SSL;
- liquidity sweeps;
- displacement and strict FVGs;
- MSS or BOS;
- valid order blocks or breakers;
- entry conditions, invalidation, and targets;
- valid opportunities and false signals.
A screenshot supports visual analysis only. Any price level, candle boundary, or timestamp that cannot be read reliably must be marked unverified.
Use $ict-trading-model to analyze BTC-USDT-SWAP.
Bias timeframe: 4H
Structure timeframe: 15m
Execution timeframe: 5m
Return one status: confirmed, developing, invalidated, or no-trade.
List the evidence for every required condition. Do not execute a trade.
For live analysis, the agent should fetch current market data first and disclose the venue, data timestamp, and latest closed candle.
I think price swept the previous high, formed a bearish MSS, and left a bearish FVG.
Use $ict-trading-model to verify the thesis strictly:
- Is the previous high valid liquidity?
- Was the move a sweep or an accepted breakout?
- Was there genuine bearish displacement?
- Was the MSS confirmed by a candle close?
- Does the FVG satisfy the three-candle definition?
- Did the proposed order block cause displacement and the structure break?
- Is the entry still available, or has price already moved too far?
The skill challenges the thesis against the evidence instead of forcing the chart to match it.
Use $ict-trading-model to analyze:
/absolute/path/to/candles.json
Scan both bullish and bearish structures and report the most recent candidates.
The skill follows the same nine-stage process for chart reviews, live markets, and historical OHLCV data.
Identify the instrument, venue, candle timeframe, intended holding period, data timestamp, and whether the active candle has closed. Example data and stale screenshots must never be presented as live market data.
Determine higher-timeframe order flow, the active dealing range, and the primary external liquidity objective. The higher timeframe provides direction; it does not provide a precise entry by itself.
Mark relevant liquidity and reference points:
Within a clearly defined dealing range, classify price as premium, equilibrium, or discount. Identify the next liquidity objective and any obstacle between current price and that objective.
Bearish setups are preferred in premium; bullish setups are preferred in discount.
A bullish reversal model requires a valid sell-side liquidity sweep. A bearish reversal model requires a valid buy-side liquidity sweep. A break without rejection or displacement is not automatically a sweep.
Valid displacement should show decisive expansion, meaningful candle bodies, a strong close, and a strict FVG.
Identify the order block that actually caused displacement and the structure break. Give the zone more weight when it overlaps with:
OTE is the 0.62–0.79 retracement of the displacement leg. 0.705 is its midpoint, not a property of the order block itself.
Every plan must define:
1:2 estimated reward to risk before costs;| Status | Meaning |
|---|---|
confirmed |
Every required condition has been verified. |
developing |
The narrative is valid, but a required structure break, retracement, or confirmation is still missing. |
invalidated |
Price has breached the structural invalidation level. |
no-trade |
The entry is late, evidence conflicts, data is insufficient, or reward to risk is unacceptable. |
User prompt:
Use $ict-trading-model to analyze the uploaded ETH 15-minute chart.
My thesis is that price swept the previous high and then broke the latest swing low.
Do not accept the thesis without verification. Check:
1. whether the previous high represents valid BSL;
2. whether the sweep produced bearish displacement and a strict bearish FVG;
3. whether a candle body closed below the swing low;
4. which bullish candle, if any, qualifies as the bearish order block;
5. whether the order block, FVG, and OTE overlap;
6. whether the setup is confirmed, developing, invalidated, or no-trade;
7. what must happen next if the setup is still developing.
Do not execute a trade.
Expected response shape:
Status: developing
Direction: potential short
Verified:
- Liquidity above the previous high was reached and rejected.
- Downside expansion followed the rejection.
Not yet verified:
- The latest swing low was breached only by a wick, not by a candle close.
- Exact bearish FVG boundaries cannot be confirmed from the screenshot.
Required next steps:
- Wait for a 15-minute close below the swing low.
- Confirm that displacement creates a strict bearish FVG.
- Wait for price to retrace into a premium-side FVG or valid order block.
Invalidation:
- Price closes back above the sweep high.
Conclusion: the setup is not confirmed, and an early short is not justified.
The central rule is simple: missing evidence produces developing or no-trade, never an invented confirmation.
The included scanner provides repeatable mechanical detection for candle data:
python3 scripts/ict_scan.py \
--input /absolute/path/to/candles.json \
--direction auto \
--swing-width 2 \
--minimum-rr 2
It detects:
Object format:
{
"meta": {
"instrument": "BTC-USDT-SWAP",
"timeframe": "5m"
},
"candles": [
{
"timestamp": "2026-10-10T02:00:00Z",
"open": 100,
"high": 102,
"low": 99,
"close": 101,
"volume": 1234
}
]
}
Array format:
[
[1791597600000, 100, 102, 99, 101, 1234]
]
The scanner requires at least 10 candles. Reverse-chronological input is sorted automatically before analysis.
The scanner returns a mechanical_status with the detected evidence and candidate setup. This is not the final trading decision. Higher-timeframe context, the quality of the liquidity pool, event risk, and actual execution costs still require human or agent review.
ict-trading-model/
├── SKILL.md # Skill instructions and decision process
├── agents/openai.yaml # Agent metadata
├── references/ict-model.md # ICT/SMC definitions and validation rules
├── references/output-contract.md # Required analysis output format
├── scripts/ict_scan.py # Deterministic OHLCV scanner
└── tests/test_ict_scan.py # Scanner test suite
Run the test suite and syntax check from the repository root:
python3 -m unittest discover -s tests -v
python3 -m py_compile scripts/ict_scan.py
Released under the MIT License.