Spread Profile by Hour builds the real spread distribution for every server hour from your broker's own tick history and shows the median and the 90th percentile as 24 bars. Enter your typical stop size, and every bar tells you how much of 1R the spread takes in that hour, so the expensive hours of the day are visible at a glance.

EURUSD, tick count, 50-point stop: 6 points (12% of the stop) most of the day, 34 points (68%) at the 21:00 rollover
The problem
For intraday and scalping systems the spread, not the entry signal, often decides whether an edge survives. The terminal shows the current spread, but not how the spread behaves over the day. A strategy tested on quiet hours can fail with the same rules at rollover, at the session open or around news, simply because the spread there is several times wider.
Bar history stores only one spread value per bar, which hides the distribution. This indicator reads the ticks themselves: every bid/ask quote of the last N days, grouped by the hour of the day in server time. The result is a per-hour median and 90th percentile that you can compare directly with your stop and your expected move.
Features
Inputs
| Input | Default | Description |
|---|---|---|
| History depth, calendar days (today excluded) | 20 | Number of calendar days before today to read (1 to 365). Weekends count as days, so 20 calendar days give 14 to 17 trading days. |
| Sampling | Tick count | Tick count or time-weighted (see Features). |
| Weekday filter | All days | Restricts the profile to one weekday. Raise the history depth as well, since 20 calendar days contain only 2 or 3 of a given weekday. |
| Histogram range, points (wider spreads = overflow) | 5000 | Spreads wider than this go to an overflow bin. Statistics that fall into the overflow bin are shown as ">5000". |
| Minimum ticks for an hour to be shown | 100 | Hours with fewer ticks are shown as "-", for example the daily break. |
| Stop size, points (0 = off) | 0 | Your typical stop. 0 turns the percentage labels off and shows the median in points instead. |
| Window height at 100% scaling, px (0 = resizable) | 240 | Fixed height of the indicator window, scaled with the screen DPI. 0 lets you resize the window freely. |
| Background (None = chart background) | None | None uses the chart background. |
| Median bar | Blue | Colour of the median bar. |
| 90th percentile cap (None = lighter bar color) | None | None uses a lighter version of the bar colour. |
| Current hour | Orange | Highlight colour of the current server hour. |
| Live spread line | Red | Colour of the live spread line. |
| Text (None = automatic) | None | None picks a readable colour for a dark or light background. |
| Grid (None = automatic) | None | None picks a grid colour that matches the background. |
| Font size, pt | 9 | Base font size. |
| Save per-hour statistics to MQL5\Files (CSV) | false | Writes MQL5\Files\SpreadProfile_<symbol>_<yyyymmdd>.csv after each calculation. |
How to read it
Each bar is one hour of the day in server time. The solid part is the median spread: half of the quotes, or half of the time in time-weighted mode, had a spread at or below it. The lighter cap reaches the 90th percentile: one quote in ten was wider than that. The dashed line is the live spread, and the highlighted column is the current server hour. The examples below come from the screenshots, taken on a demo account over 20 calendar days (17 of them with ticks).

GBPUSD, time-weighted, no stop entered: 7 points in 23 hours, median 46 and 90th percentile 94 at 21:00

XAUUSD, tick count, 1500-point stop: 182 points in every hour with data, no ticks in the 21:00 daily break
A practical reading: if your system trades in an hour where the median spread is a large share of your stop, either skip that hour, widen the stop, or make sure the expected move pays for it. The 90th percentile tells you what a bad but not rare fill looks like.
Notes and limitations
Symbol Spec Auditor
A chart panel that shows the contract specification details that decide position size and trading cost (point value, spread cost, margin, swap, execution rules) in the account currency, warns about broker settings that silently break lot-size code, and exports the audit of every Market Watch symbol to CSV.
Sensible Guide Confluence
H1 indicator that combines support/resistance confluence from H4, D1 and W1 with EMA trend alignment and candlestick confirmation. Shows non-repainting BUY/SELL arrows with ATR-based stop and reward/risk filtering.
Market session indicator lines for scalpers
Quickly view each and every individual market's open and close times. Very important for short term scalping. I own the copyright, if anyone modifies or uses this it must stay free. Comments and feedback welcome.
Buy GBPJPY Every Monday. That's the Whole Strategy.
A free, fully open EA: buy GBPJPY every Monday at 11:00 server time (04:00 New York), close at 23:00. Stays profitable in backtest with the entry anywhere from 09:00 to 13:00. Attach to GBPJPY M1.