$npx -y skills add SKE-Labs/agent-trading-skills --skill channel-tradingTrade within ascending, descending, and horizontal channels. Use when range trading, riding trends with defined boundaries, or finding breakout setups.
| 1 | # Channel Trading |
| 2 | |
| 3 | Channels define parallel price boundaries for trading bounces or anticipating breakouts. |
| 4 | |
| 5 | ## Pattern Structure |
| 6 | |
| 7 | ### Ascending Channel (Bullish) |
| 8 | - Both lines slope upward — buy at lower line, sell at upper |
| 9 | - Break below = reversal signal |
| 10 | |
| 11 | ### Descending Channel (Bearish) |
| 12 | - Both lines slope downward — sell at upper line, cover at lower |
| 13 | - Break above = reversal signal |
| 14 | |
| 15 | ### Horizontal Channel (Range) |
| 16 | - Parallel horizontal lines — classic range trading |
| 17 | - Break either direction = new trend |
| 18 | |
| 19 | ## Workflow |
| 20 | |
| 21 | ### 1. Get Swing Point Data |
| 22 | |
| 23 | Fetch exact timestamps and prices for swing highs/lows (need 2+ per line): |
| 24 | |
| 25 | ``` |
| 26 | get_candles_around_date(symbol=<symbol>, exchange=<exchange>, interval=<interval>, date=<swing_date>) |
| 27 | ``` |
| 28 | |
| 29 | ### 2. Draw the Channel (2 parallel trend lines) |
| 30 | |
| 31 | Draw both channel boundaries as separate `trend` lines in parallel calls: |
| 32 | |
| 33 | ``` |
| 34 | # Upper channel boundary (connecting swing highs) |
| 35 | draw_chart_analysis(action="create", drawing={ |
| 36 | "type": "trend", |
| 37 | "points": [ |
| 38 | {"time": <high1_time>, "price": <high1_price>}, |
| 39 | {"time": <high2_time>, "price": <high2_price>} |
| 40 | ], |
| 41 | "options": {"text": "Channel R"} |
| 42 | }) |
| 43 | |
| 44 | # Lower channel boundary (connecting swing lows) |
| 45 | draw_chart_analysis(action="create", drawing={ |
| 46 | "type": "trend", |
| 47 | "points": [ |
| 48 | {"time": <low1_time>, "price": <low1_price>}, |
| 49 | {"time": <low2_time>, "price": <low2_price>} |
| 50 | ], |
| 51 | "options": {"text": "Channel S"} |
| 52 | }) |
| 53 | ``` |
| 54 | |
| 55 | ### 3. Confirm and Enter |
| 56 | |
| 57 | **Channel Bounce:** Wait for price at boundary + reversal candle + RSI divergence via `get_indicators(indicator_code="rsi", symbol=<symbol>, exchange=<exchange>, interval=<interval>)`. Stop beyond boundary. |
| 58 | |
| 59 | **Channel Breakout:** Wait for candle close outside channel. Confirm with `get_indicators(indicator_code="mfi", symbol=<symbol>, exchange=<exchange>, interval=<interval>)` for volume. Target = channel width projected from breakout. Mark breakout level: |
| 60 | |
| 61 | ``` |
| 62 | draw_chart_analysis(action="create", drawing={ |
| 63 | "type": "breakout", |
| 64 | "points": [ |
| 65 | {"time": <break_time>, "price": <break_price>}, |
| 66 | {"time": <target_time>, "price": <break_price>} |
| 67 | ], |
| 68 | "options": {"text": "Breakout"} |
| 69 | }) |
| 70 | ``` |
| 71 | |
| 72 | ## Evidence and Validation |
| 73 | |
| 74 | - Treat the setup as a testable hypothesis, not a prediction. Define thresholds, entry, invalidation, and exit before evaluating outcomes. |
| 75 | - Calibrate on the same instrument, venue, session, and timeframe. Use closed candles and a held-out or walk-forward sample; record every variant tried. |
| 76 | - 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. |
| 77 | - Return observed inputs, missing data, cost assumptions, entry, invalidation, exit, and a valid, watch, or no-trade status. |
| 78 | - Research basis: [Lo, Mamaysky & Wang](https://www.nber.org/papers/w7613) found that some objectively defined chart patterns contain incremental information, while emphasizing that visual pattern recognition is subjective. |
| 79 | |
| 80 | ## Key Rules |
| 81 | - Minimum 4 total touch points (2 per line) to validate a channel |
| 82 | - Trade WITH channel direction: buy support in ascending, sell resistance in descending |
| 83 | - Channel midline acts as interim S/R — price rejecting at midline signals weakening momentum |
| 84 | - Stop applying the fade rule after its predeclared closed-bar breakout invalidation. |
| 85 | - Record incomplete boundary traversals as a feature; do not declare weakening without tested evidence. |
| 86 | |
| 87 | ## Related Skills |
| 88 | - **multi-timeframe-analysis** — HTF channels define trend; LTF channels refine entries |
| 89 | - **triangle-patterns** — Converging channels become triangles |