Swing labels are the primary visual output of SSTP. Each label marks a confirmed turning point — a specific bar where the market changed direction at a specific timeframe. Understanding how labels look, where they appear, and how to customize them is fundamental to using the indicator.
Label Anatomy
Every swing label has five visual properties:
Text: A timeframe abbreviation. The 10 possible labels are: 15m, 1H, 4H, D, 2D, 3D, W, M, Q, Y.
Vertical position: Swing high labels appear above the price bar. Swing low labels appear below. The exact distance from the bar is controlled by the Label Spacing settings (Group ③).
Horizontal position: Labels are placed at the bar where the swing extreme occurred — the bar with the highest high (for swing highs) or the lowest low (for swing lows) within the completed period. This means the label appears exactly where the turning point happened, not where it was confirmed.
Color: Each timeframe has independent high and low colors, configurable in the Colors settings (Groups ⑤, ⑥, ⑦). By default, higher timeframe labels use more saturated, distinct colors, while intraday labels use subtler tones.
Style: Two options — Filled or Text Only — configured in Labels & Spacing (Group ③).
<!-- IMAGE: sstp-label-anatomy.png — Annotated single swing label showing: text ("W"), position above bar, color, and a callout to the bar it's attached to. Show both a Filled and Text Only version side by side. -->
Anatomy of a swing label — the text identifies the timeframe, the vertical position tells you high or low, and the color provides visual grouping.
Reading a Label
The label text tells you the timeframe. The position above or below the bar tells you the direction. Together, that's all you need.
"W" above a price bar means: This bar contained the weekly swing high — the highest price of the week before the market turned down at the weekly level.
"M" below a price bar means: This bar contained the monthly swing low — the lowest price of the month before the market turned up at the monthly level.
"2D" above a price bar means: This bar contained the high of a 2-day swing — after 2 consecutive up-days, the market reversed and confirmed this bar as the swing extreme.
"Q" below a price bar means: This bar contained the quarterly swing low — the lowest price of the quarter before the market turned up at the quarterly level. Quarterly labels are rare — they mark significant structural inflection points.
Label Styles
Two display styles are available, set globally for all labels in Group ③:
Filled
A colored rectangular badge with white text inside. High visibility — labels stand out clearly on busy charts with many overlapping bars, indicators, or drawings. The background color matches the timeframe's configured color.
Text Only
Just the colored text with a transparent background. Cleaner and less intrusive — the chart feels more open and price action isn't obscured by colored rectangles. The text color matches the timeframe's configured color.
Both styles carry the same information. The choice is purely visual preference.
When to use Filled: Busy charts, multiple active indicators, presentations where labels need to be visible at a glance.
When to use Text Only: Clean chart aesthetics, screenshots for documentation, charts where price action clarity is the priority.
<!-- IMAGE: sstp-label-styles-comparison.png — Same chart section shown twice: Filled labels on top, Text Only labels on bottom. Both showing W/M/Q labels at the same turning points. At least 3 months of daily data. -->
Filled labels (top) provide maximum visibility. Text Only labels (bottom) offer a cleaner look while preserving all the same information.
Label Sizes
Sizes are configured by tier, not per individual timeframe. Three tiers, each with four size options:
| Tier | Timeframes | Default Size | Options |
|---|---|---|---|
| Intraday | 15m, 1H, 4H | Tiny | Tiny, Small, Normal, Large |
| Daily / Multi-Day | D, 2D, 3D | Small | Tiny, Small, Normal, Large |
| Higher Timeframe | W, M, Q, Y | Small | Tiny, Small, Normal, Large |
The tier system ensures visual hierarchy without configuring 10 individual size settings. Intraday labels default to Tiny because they're the most frequent and would dominate the chart if sized the same as higher timeframe labels. Higher timeframe labels can be set to Normal or Large if you want major turning points to visually dominate.
Practical sizing strategy: Make Intraday one step smaller than Daily/MD, and Daily/MD the same or one step smaller than HTF. This creates a natural visual hierarchy where the eye is drawn to the more significant turning points first.
Default Color Scheme
SSTP ships with a color scheme designed for visual separation between timeframe groups. Each timeframe has independent colors for swing highs and swing lows:
Intraday Colors (Group ⑤)
| Timeframe | High Color | Low Color |
|---|---|---|
| 15-Minute | Silver | Silver |
| 1-Hour | Cyan (#26c6da) | Cyan (#26c6da) |
| 4-Hour | Purple (#7e57c2) | Purple (#7e57c2) |
Intraday timeframes default to the same color for both highs and lows. The swing direction is already clear from the label's position (above = high, below = low), so using a single color per timeframe reduces visual noise while maintaining easy timeframe identification.
Daily / Multi-Day Colors (Group ⑥)
| Timeframe | High Color | Low Color |
|---|---|---|
| Daily | Lime | Dark Red (#b71c1c) |
| 2-Day | Gold (#e9d66b) | Gold (#e9d66b) |
| 3-Day | Orange (#ff9800) | Orange (#ff9800) |
Daily uses distinct high/low colors (lime for highs, dark red for lows) because daily swings are common and the directional color coding adds useful context at a glance. 2-Day and 3-Day use matching high/low colors to distinguish them from daily by character rather than direction.
Higher Timeframe Colors (Group ⑦)
| Timeframe | High Color | Low Color |
|---|---|---|
| Weekly | Green | Red |
| Monthly | Blue | Orange |
| Quarterly | Purple | Fuchsia |
| Yearly | Teal | Maroon |
Higher timeframe labels use the most saturated, distinct color pairs. Each timeframe is visually unique — you can identify Weekly (green/red), Monthly (blue/orange), Quarterly (purple/fuchsia), and Yearly (teal/maroon) at a glance without reading the text.
<!-- IMAGE: sstp-color-scheme.png — Chart showing labels from at least 4 different timeframes (D, W, M, Q) at various turning points, demonstrating how the default colors create visual separation between timeframe groups. -->
The default color scheme creates immediate visual separation — each timeframe group is recognizable by color without reading the label text.
Customizing Colors
All 20 color settings (10 timeframes × high/low) are fully independent. You can:
- Match highs and lows (the default for most timeframes) — simpler visual, relies on position for direction
- Differentiate highs and lows (the default for Daily and Weekly) — adds directional color coding
- Create your own scheme — match your chart theme, broker platform colors, or personal preference
Color customization is the most common personalization users make. If you use a dark chart background, the default silvers and lighter colors may not have enough contrast — switching to brighter alternatives improves readability. On light backgrounds, the defaults work well out of the box.
Label Stacking
When multiple timeframes detect a swing at the same bar, their labels stack vertically. This is one of the most analytically significant patterns SSTP reveals — it means several levels of market structure are turning at the same point.
Stacking Order
Labels stack following timeframe hierarchy:
- Closest to price: The smallest enabled timeframe
- Furthest from price: The largest enabled timeframe
For swing highs, labels stack upward from the bar. For swing lows, labels stack downward. This creates a natural reading order — local swings first, major swings at the outer edge.
Example stack above a price bar (bottom to top):
- D (Daily high — closest to the bar)
- W (Weekly high — above Daily)
- M (Monthly high — furthest from the bar)
This means the daily, weekly, and monthly swings all peaked at this exact bar. Three levels of market structure turned at the same point — a significant confluence.
<!-- IMAGE: sstp-label-stacking.png — A bar with 3 stacked labels above it (D, W, M from bottom to top) and a separate bar with 2 stacked labels below it (D, W). Annotate the stacking order and direction. -->
Labels stack outward from the price bar — smallest timeframes closest, largest timeframes furthest. Highs stack up, lows stack down.
What Confluence Means
Multiple swing highs at the same bar: Several timeframes peaked simultaneously. The more timeframes that align, the more significant the resistance level. A bar with W and M labels above it is more structurally significant than one with only a W label.
Multiple swing lows at the same bar: Several timeframes bottomed simultaneously. This indicates strong support. A bar with D, W, and M labels below it marks a major structural floor.
Mixed stacking (highs and lows): Different timeframes can show different directions at the same bar. A bar might have a W label above (weekly high) and a D label below (daily low) — the weekly and daily swings diverged at that point. This is less common but occurs at inflection points where timeframes are out of phase.
Stacking Methods
The vertical spacing between stacked labels is calculated using one of two methods, configured in Group ③:
Auto / Percentage of Price (Default)
Spacing is calculated as a percentage of the instrument's current price. This scales proportionally across all instruments — the same percentage produces visually appropriate spacing whether you're looking at a $1.18 forex pair, a $450 stock, or a $95,000 crypto asset.
Default spacing: 0.55% of price in Simple mode.
No manual adjustment is needed when switching instruments. The percentage-based method handles the math automatically.
ATR-Based
Spacing is calculated as a multiple of the instrument's Average True Range (the recent average bar size). This adapts spacing to the instrument's volatility — a volatile instrument with large bars gets wider spacing, a calm instrument with small bars gets tighter spacing.
Default ATR spacing: 0.15× ATR in Simple mode.
ATR-based spacing is useful if you work with instruments that have dramatically different volatility profiles and want labels to feel consistently proportioned relative to the price bars themselves.
Simple vs. Advanced Spacing
Simple Mode (Default)
One control — Label Spacing — sets both the offset from the price bar to the first label and the gap between subsequent stacked labels. This is sufficient for most users.
| Setting | Default | Range |
|---|---|---|
| Label Spacing (%) | 0.55 | 0.01 – 5.00 |
| ATR Spacing | 0.15 | 0.01 – 3.00 |
Advanced Mode
Separate controls for the base offset (distance from the price bar to the first label) and the stack spacing (distance between each additional label). This gives you precise control when the first label feels too close or too far from price while the inter-label spacing is fine.
| Setting | Default | Range | What It Controls |
|---|---|---|---|
| Base Offset (%) | 0.20 | 0.01 – 3.00 | Distance from the swing extreme to the first label |
| Stack Spacing (%) | 0.45 | 0.01 – 3.00 | Distance between each additional stacked label |
| ATR Base | 0.10 | 0.01 – 3.00 | ATR-based first label offset |
| ATR Stack | 0.11 | 0.01 – 3.00 | ATR-based inter-label spacing |
When to use Advanced: When labels feel too close to price bars (increase Base Offset) but the spacing between stacked labels is fine, or vice versa. Most users won't need this.
Dynamic Window
SSTP uses a Dynamic Window system to manage TradingView's 500-label drawing limit. Instead of trying to render every label for the entire chart history (which would quickly exceed the limit), the indicator only maintains labels within the visible viewport plus a configurable buffer zone.
How it works:
- As you scroll, labels beyond the buffer zone are cleaned up
- As new chart areas come into view, labels are drawn on-the-fly
- The buffer ensures smooth scrolling — labels appear before you reach them
Buffer Bars setting: Controls how far beyond the visible edges labels are maintained. Default: 200 bars. Larger buffers mean smoother scrolling but use more drawing resources.
This system runs automatically. You'll never see it working unless you exceed TradingView's limits — in which case, reducing the number of enabled timeframes or increasing the chart timeframe will help.
For users who need data for the entire chart history (for example, CSV export spanning decades), the "CSV Data Only (No Labels)" mode bypasses the label limit entirely by running detection without creating visual labels.
Practical Tips
Start with the defaults. The shipped color scheme, sizes, and spacing are calibrated for the most common use case: Weekly, Monthly, and Quarterly labels on a daily chart. Customize once you've used the indicator long enough to know what bothers you.
Match your chart theme. If you use a dark background, check that lighter label colors (Silver for 15m, Gold for 2D) have enough contrast. On very light backgrounds, darker default colors like Green and Blue may need brightening.
Use size hierarchy intentionally. If you find yourself scanning past intraday labels to find weekly labels, make HTF labels one step larger. The visual hierarchy should match your analytical priority.
Don't over-enable timeframes. Enabling all 10 timeframes at once creates visual clutter, even with stacking. Start with 2–3 timeframes and add more as you need them. The stacking system handles overlap cleanly, but fewer timeframes means faster visual comprehension.
Label Spacing is your first adjustment. If labels feel too close to the bars or too far away, adjust the Label Spacing percentage before touching anything else. This single control fixes most spacing issues.
Next Steps
- Tooltips & Metrics — What you see when you hover over any label
- X-Ray Mode — Visualize the classification structure behind the labels
- Settings — Full reference for Labels & Spacing (Group ③) and Colors (Groups ⑤, ⑥, ⑦)
- Overview — How labels fit into the broader SSTP system