$npx -y skills add SKE-Labs/agent-trading-skills --skill range-tradingDefine and test trades near objective range boundaries. Use when measuring range width versus ATR/costs, rejection triggers, breakout invalidation, and target logic without inferring accumulation.
| 1 | # Range Trading |
| 2 | |
| 3 | Profit from price oscillating between clear support and resistance in non-trending markets. |
| 4 | |
| 5 | ## Identification |
| 6 | |
| 7 | ### Range Characteristics |
| 8 | |
| 9 | - Price bouncing between two levels with 2+ touches each side |
| 10 | - No clear HH/HL or LH/LL structure |
| 11 | - Volume decreasing during range |
| 12 | - Width large enough that the planned payoff exceeds round-trip costs and slippage |
| 13 | |
| 14 | ### Range Quality |
| 15 | |
| 16 | | Factor | Strong | Weak | |
| 17 | | --- | --- | --- | |
| 18 | | Bounces | Clean, multiple (3+) | Sloppy, few | |
| 19 | | Width | Wide relative to ATR and costs | Too narrow after costs | |
| 20 | | Duration | Multi-day/week | Few hours | |
| 21 | | Volume | Low, stable | Erratic | |
| 22 | |
| 23 | ## Workflow |
| 24 | |
| 25 | ### 1. Confirm Ranging Regime |
| 26 | |
| 27 | ``` |
| 28 | get_indicators(indicator_code="dmi", symbol=<symbol>, exchange=<exchange>, interval=<interval>) |
| 29 | ``` |
| 30 | |
| 31 | Use ADX level/slope as one contextual feature, calibrated to the instrument and timeframe. It does not by itself confirm a range or authorize another strategy. |
| 32 | |
| 33 | ### 2. Identify Range Boundaries |
| 34 | |
| 35 | ``` |
| 36 | get_candles_around_date(symbol=<symbol>, exchange=<exchange>, interval=<interval>, date=<date>) |
| 37 | ``` |
| 38 | |
| 39 | Find flat support/resistance with 2+ touches each side. |
| 40 | |
| 41 | ### 3. Mark Range Levels |
| 42 | |
| 43 | ``` |
| 44 | draw_chart_analysis(action="create", drawing={ |
| 45 | "type": "support", |
| 46 | "points": [ |
| 47 | {"time": <first_touch>, "price": <support_level>}, |
| 48 | {"time": <current>, "price": <support_level>} |
| 49 | ], |
| 50 | "options": {"text": "Range Support"} |
| 51 | }) |
| 52 | draw_chart_analysis(action="create", drawing={ |
| 53 | "type": "resistance", |
| 54 | "points": [ |
| 55 | {"time": <first_touch>, "price": <resistance_level>}, |
| 56 | {"time": <current>, "price": <resistance_level>} |
| 57 | ], |
| 58 | "options": {"text": "Range Resistance"} |
| 59 | }) |
| 60 | ``` |
| 61 | |
| 62 | ### 4. Trade at Boundaries |
| 63 | |
| 64 | - **Buy at support**: Wait for rejection candle (hammer, engulfing), stop below support, target resistance |
| 65 | - **Sell at resistance**: Wait for rejection candle (shooting star, engulfing), stop above resistance, target support |
| 66 | - Define the boundary band as an ATR- or range-normalized interval fixed before testing |
| 67 | - Set the target from tested exit logic and require positive payoff after costs; the opposite boundary is a scenario, not a promised destination |
| 68 | |
| 69 | ### 5. Report to Orchestrator |
| 70 | |
| 71 | Range boundaries, width, number of touches, entry recommendation, stop level, target level. Flag if breakout appears imminent. |
| 72 | |
| 73 | ## Evidence and Validation |
| 74 | |
| 75 | - Treat the setup as a testable hypothesis, not a prediction. Define thresholds, entry, invalidation, and exit before evaluating outcomes. |
| 76 | - Calibrate on the same instrument, venue, session, and timeframe. Use closed candles and a held-out or walk-forward sample; record every variant tried. |
| 77 | - Include spread, fees, slippage, borrow or funding, partial fills, and latency. Reject the setup when net expectancy is not positive or depends on one narrow parameter. |
| 78 | - Return observed inputs, missing data, cost assumptions, entry, invalidation, exit, and a valid, watch, or no-trade status. |
| 79 | - Research basis: The [technical-analysis evidence review](https://papers.ssrn.com/sol3/Delivery.cfm/SSRN_ID603481_code17745.pdf?abstractid=603481) supports market-specific testing and warns that rule selection and costs can erase apparent profits. |
| 80 | |
| 81 | ## Key Rules |
| 82 | |
| 83 | - Trade only inside the predeclared boundary band; report `no trade` in the middle. |
| 84 | - Define the rejection trigger numerically and use closed bars. |
| 85 | - Invalidate on the tested close-plus-buffer rule beyond the range, not on a wick. |
| 86 | - Treat relative-volume expansion as breakout risk to evaluate, not proof of direction. |
| 87 | - Reject a range whose available width cannot cover costs and the required payoff. |
| 88 | |
| 89 | ## Related Skills |
| 90 | |
| 91 | - **breakout-trading** -- when the range breaks, switch to breakout strategy |
| 92 | - **momentum-trading** -- ADX rising above 25 signals transition from range to trend |