MiniBull Ticko
- 지표
-
Yusuf Levent Aksun
플랫폼 엔지니어 & AWS 공인 전문가. 소프트웨어 개발, 클라우드 아키텍처, DevOps 전환 분야에서
20년 이상의 경험 보유.
현재 런던 World Wide Technology에서 플랫폼 엔지니어링 이니셔티브를 주도하며,
확장 가능한 인프라 솔루션을 구축하고 개발팀이 더 빠르고 안정적으로 제품을 출시할 수 있도록 지원.
🔹 AWS Certified Solutions Architect – Professional
🔹 AWS Certified DevOps Engineer – Professional - 버전: 13.22
- 업데이트됨: 26 10월 2026
- 활성화: 5
https://youtube.com/shorts/V3G9R2gXAfg
# MiniBullTicko V13.19
**Tick-level day overlay, live info panel and automatic Support/Resistance for MetaTrader 5 — built for scalpers.**
MiniBullTicko answers one question that matters to a short-term trader at any moment of the session:
> *"Is today behaving like a normal day **at this exact time of day**, or is something different — more volatile, more expensive to trade, or stretched against a known level?"*
It does this by laying every recent trading session on top of each other **at tick resolution** in an indicator sub-window, while a compact, semi-transparent panel on the main chart summarises the comparison in numbers and plain sentences.
---
## Contents
1. [Screenshots](#1-screenshots)
2. [Key features](#2-key-features)
3. [Requirements and installation](#3-requirements-and-installation)
4. [What you see on the screen](#4-what-you-see-on-the-screen)
5. [Input parameters](#5-input-parameters)
6. [How it works](#6-how-it-works)
7. [Metric and formula reference](#7-metric-and-formula-reference)
8. [A scalper's workflow](#8-a-scalpers-workflow)
9. [Performance notes](#9-performance-notes)
10. [Chart objects and global variables](#10-chart-objects-and-global-variables)
11. [Troubleshooting](#11-troubleshooting)
12. [Limitations and disclaimer](#12-limitations-and-disclaimer)
---
## 1. Screenshots
All images are 1920 × 1080 and use illustrative (synthetic) data.
| # | File | What it explains |
|---|------|------------------|
| 1 | `01_overview.png` | The whole screen: main-chart panel, S/R lines, tick overlay sub-window |
| 2 | `02_tick_overlay.png` | The sub-window in detail: session-clock alignment, "now" marker, tick → bin → pixel pipeline |
| 3 | `03_scalper_guide.png` | Status logic, same-hour comparison engine, ATR band, S/R clustering, reading guide, key inputs |



---
## 2. Key features
- **Tick-level day overlay (sub-window).** Up to 20 sessions are drawn on one shared session clock. Today is a thick line; previous days are faded. Because each day is aligned to the *same time of day*, you compare like with like.
- **Real tick data, no external files.** Ticks are read straight from the terminal with `CopyTicksRange`. No tick-recorder EA and no CSV export/import are needed.
- **"Same hour" comparison panel (main chart).** Status chip (Quiet / Normal / Active), five metric cards, a range bar, a one-sentence verdict and optional detail lines — all computed against the same elapsed time in previous sessions.
- **Spread awareness.** Current spread (median of the last ~15 minutes) is compared with the typical spread at that hour. A red chip appears when it is 2× normal or worse.
- **Feed-health indicator.** "Live" in green, or a warning when the last tick is five minutes old or more.
- **Daily ATR in session terms.** ATR is built from the stored sessions' tick ranges, with an "ATR band" that shows where price must stay for today's range not to exceed the average.
- **Automatic Support / Resistance.** Pivot highs/lows from 1-hour or 4-hour bars (built from tick data) are clustered into levels with touch counts, drawn on the main chart and in the overlay, and listed in the panel with distance in points and in ATR.
- **Automatic session detection.** Session open and length are detected from gaps in M1 history, so it adapts to indices, metals, FX and futures-style CFDs. Manual override is available.
- **11 UI languages.** English, Türkçe, Русский, 中文, Español, Português, 日本語, Deutsch, 한국어, Français, Italiano.
- **Responsive loading.** Data loads in time-boxed slices so the terminal never freezes; already-loaded sessions are cached and reused.
---
## 3. Requirements and installation
**Requirements**
- MetaTrader 5 (build with `CCanvas` and `CopyTicksRange` support — any current build).
- Tick history for the symbol. The indicator needs ticks for roughly *N + 1* sessions (default: 16). If the terminal has not downloaded them yet, `CopyTicksRange` will trigger the download and the panel shows "Loading…" until it is done.
- M1 history for automatic session detection (about 9 days).
**Installation**
1. Save `MiniBullTicko_V13_19.mq5` to `MQL5\Indicators\` (File → Open Data Folder).
2. Open it in MetaEditor and compile (F7). The file is UTF-8 with BOM; if non-Latin characters look broken, re-save as *UTF-8 with BOM*.
3. In the terminal: **Insert → Indicators → Custom → MiniBullTicko_V13_19**. It opens in its own sub-window (`indicator_separate_window`, no plots).
4. The info panel appears on the **main chart** and S/R lines are placed on it automatically.
> Tip: use a chart timeframe you scalp on (M1–M5). The indicator itself is timeframe-independent — it works from ticks — but S/R lines are anchored to the chart and the panel sits on top of it.
---
## 4. What you see on the screen
### 4.1 Info panel (main chart)
A semi-transparent canvas (default 1500 × 450 px, 200 px from the top, 0 px from the left).
| Area | Content |
|------|---------|
| **Status chips** | Session state: *too early / not enough history / Quiet / Normal / Active*; a red *Spread N× normal* chip; *Live* or *Last tick N ago* warning (or *Not live · last tick …* when the session is over). |
| **Five cards** | 1) Last price and % from session open. 2) Last 1-hour change in % and points. 3) Today's range in points and the typical range at this hour. 4) Daily ATR(n) and today's range as % of ATR. 5) Current spread and typical spread. |
| **Range bar** | Today's low ↔ high. Grey tick = session open, white/blue dot = current price. |
| **Verdict sentence** | e.g. *"0.41 % (+10.82 pts) above the session open, at 50 % of today's range; range is 1.6x the typical level for this hour."* |
| **Detail lines** (toggle) | Previous session at the same time vs. today; median of the previous N sessions; ATR exceeded / ATR band; forward-looking stats; S/R list. |
| **Details button** | Top-right of the panel; click to turn the detail lines on/off. The choice is remembered. |
| **Caption** | Time since session start, number of sessions compared, broker time, version. |
### 4.2 Tick overlay (sub-window)
- **X axis:** the session clock in broker time (e.g. 01:00 → 00:00).
- **Y axis (selectable):** % change vs. session open, point change vs. session open, or raw price.
- **Lines:** every session is drawn per pixel column from its 10-second bins — a vertical min-max wick, plus a line joining first/last values — so the path keeps real intraday spikes.
- **Today:** thick line, full colour. **Older sessions:** faded.
- **"Now" marker:** dotted vertical line and a dot with the latest tick price.
- **S/R:** dotted horizontal lines with price and touch count on the right; double thickness at 3+ touches.
- **Legend:** date, weekday and "(today)" tag for each session; a "Loading… n/N" counter while data is still being fetched.
### 4.3 S/R on the main chart
Horizontal lines (`OBJ_HLINE`, dotted) with small text labels showing price and touch count. Resistance is red, support is teal. Tooltips show *Resistance/Support price · touches*.
---
## 5. Input parameters
### General
| Input | Default | Description |
|-------|---------|-------------|
| `InpLang` | English | UI language (11 options). |
| `InpFontName` | *(empty)* | Font name; empty = automatic per language. |
| `InpDays` | 2 | Sessions drawn in the overlay (1–20). |
| `InpPrice` | Bid | `Bid` or `Mid` = (bid + ask) / 2. |
| `InpYMode` | Price | Y axis: `% change`, `Point change`, or `Price`. |
| `InpWindowHeight` | 600 | Sub-window height in px (0 = leave unchanged). |
| `InpFont` | 13 | Base font size (px). |
| `InpFontScale` | 0.9 | Font multiplier — raise to 1.3 / 1.6 on high-DPI screens. |
### Session (broker time)
| Input | Default | Description |
|-------|---------|-------------|
| `InpAutoSession` | true | Detect session start/length automatically from M1 gaps. |
| `InpSessHour` / `InpSessMin` | 1 / 0 | Manual session start. |
| `InpSessLen` | 23 | Manual session length in hours. |
### Panel
| Input | Default | Description |
|-------|---------|-------------|
| `InpShowPanel` | true | Show the info panel on the main chart. |
| `InpPanelWidth` | 1500 | Panel width (px). |
| `InpPanelHeight` | 450 | Panel height (px); 0 = automatic, maximum 600. |
| `InpPanelX` / `InpPanelY` | 0 / 200 | Distance from the left / top of the chart. |
| `InpSpacing` | 1.3 | Line-spacing multiplier. |
| `InpShowDetails` | true | Initial state of the detail lines (the button overrides it afterwards). |
| `InpProfileDays` | 15 | Past sessions used for comparison (clamped to 5–30). |
### Support / Resistance
| Input | Default | Description |
|-------|---------|-------------|
| `InpShowSR` | true | Calculate S/R. |
| `InpSRTf` | 1 hour | Bar timeframe for pivots: 1 h or 4 h. |
| `InpSRPivotK` | 2 | Bars required on each side of a pivot. |
| `InpSRLevels` | 3 | Maximum levels per direction. |
| `InpSROnChart` | true | Draw S/R on the main chart. |
| `InpSROnOverlay` | true | Draw S/R inside the sub-window. |
### Performance
| Input | Default | Description |
|-------|---------|-------------|
| `InpBudgetMs` | 150 | Maximum tick-loading time per timer cycle (ms). |
---
## 6. How it works
### 6.1 Session detection
1. Reads about 9 days of M1 bar times.
2. Finds **gaps between consecutive M1 bars from 30 minutes to 10 hours** — the daily break.
3. Buckets the gap-end times into 5-minute slots over the clock and picks the most frequent slot as the **session start**.
4. Measures the time from that start to the last bar before the next break; the **median** (rounded up with a small tolerance) is the **session length** in hours (1–24).
5. If detection keeps failing (20 attempts), it falls back to the manual inputs.
Sessions are then built backwards day by day from the current session date. **Saturdays and Sundays are skipped.** A day with no ticks (holiday) is marked empty and ignored.
### 6.2 Tick loading
- A timer runs every **250 ms**.
- Each session is read in **1-hour chunks** with `CopyTicksRange(…, COPY_TICKS_ALL, …)`.
- Total loading time per cycle is capped by `InpBudgetMs`; the next cycle continues where it stopped.
- Up to 8 consecutive read failures are tolerated per session before it is treated as empty.
- The live session only reads up to the current server time and resumes from the last tick received.
- When a new session begins, existing session objects are **reused**, so the 15–20 previous days are not reloaded.
### 6.3 Binning
Each tick is reduced into a **10-second bin** of its session: first, last, min and max price (bid or mid) and the last observed spread (`ask − bid`). This keeps memory small (a 23-hour session = 8 280 bins) while preserving intrabar extremes.
### 6.4 Redrawing
- Redraw when new data arrived, at most every 300 ms; a forced refresh every 5 seconds.
- A new session start is checked every second.
- Two `CCanvas` layers are used: one in the sub-window (overlay) and one bitmap object on the main chart (panel, semi-transparent).
---
## 7. Metric and formula reference
All "typical at this hour" values compare today with **completed** previous sessions, each evaluated at the **same elapsed time since session open**.
| Metric | Definition |
|--------|------------|
| **% from open** | `last / first_tick_of_session − 1`, in %. |
| **Last 1 h** | `last / price_one_hour_ago − 1`; shown as "no full hour yet" before 1 h has elapsed. |
| **Today's range** | `session high − session low` so far. |
| **Typical range at this hour** | Median over past sessions of `(high − low)` from session open up to the same elapsed time. Requires ≥ 5 sessions with data at that time. |
| **Range ratio** | `today's range / typical range`. Shown only after the first 30 minutes. |
| **Status** | ratio < 0.7 → **Quiet**; 0.7 – 1.3 → **Normal**; > 1.3 → **Active**. |
| **Too early** | Fewer than 30 minutes since session open. |
| **Spread now** | Median of per-bin spreads over the last 90 bins (≈ 15 min). |
| **Typical spread** | Median over past sessions of the same ~15-minute median spread at that hour (needs ≥ 3 values). |
| **Spread × normal** | `spread now / typical spread`; the red chip appears at ≥ 2.0. |
| **Daily ATR(n)** | Average True Range of past sessions' (high, low, previous close); `n = min(14, sessions − 1)`; needs ≥ 3 past sessions. |
| **% of ATR** | `today's range / ATR × 100`. |
| **ATR band** | While price stays between `today_high − ATR` and `today_low + ATR`, today's range remains within the average daily range. If the range already exceeds ATR, the panel states so. |
| **Previous session line** | Previous session's % from open at this time vs. today's, with the difference in percentage points. |
| **Forward statistics** | From the same elapsed time to session end in past sessions: median maximum up-move, median maximum down-move, and how many closed above vs. below the price at that hour. Shown for the live session only (≥ 5 samples). |
### Support / Resistance algorithm
1. Build 1-hour (or 4-hour) high/low bars from the stored 10-second bins of the last `InpProfileDays + 1` sessions (at least 5 bars required).
2. A bar high/low is a **pivot** if it is the extreme within `InpSRPivotK` bars on each side.
3. Sort pivots and **cluster** neighbours whose distance from the running cluster mean is ≤ `0.6 × median bar range`.
4. Each cluster becomes a level at its **mean price**, with the **number of pivots** as its touch count.
5. Levels above the last price are **resistance** (nearest first), levels at or below are **support** (nearest first), up to `InpSRLevels` per side.
6. In the panel each level shows the distance in points and in ATR, and the touch count (e.g. `2,651.80 (+6.18, 0.2 ATR, 4x)`).
---
## 8. A scalper's workflow
> This is an interpretation aid, not a signal generator. Entries, exits and risk remain your decision.
1. **Glance at the chips.** *Quiet* means tight, rotational tape; *Active* means moves extend further than usual; a red *Spread N×* chip means execution is currently more expensive than normal.
2. **Check feed health.** Green *Live* — good. A "last tick N min ago" warning means the market is closed or the feed is down; ignore stale numbers.
3. **Compare with the same clock time.** In the sub-window, look where the thick line sits relative to the faded days at the dotted "now" line. In `% change` mode, every day starts at zero, so strength vs. weakness is immediate.
4. **Size your targets and stops to today's volatility.** Use the *typical range at this hour* and *% of ATR* cards: below ~50 % of ATR there is room to run; above 100 % the move is already stretched.
5. **Respect the levels.** The nearest resistance/support and their distance in ATR show how much room exists before a level that has been touched repeatedly.
6. **Watch spread before scalping tight.** If spread is ≥ 2× normal (news, rollover, thin liquidity), tight targets can lose their edge.
7. **Use the detail lines** (button on the panel) when you want the written comparison; switch them off to keep the chart clean.
Suggested starting configurations:
| Style | Suggestion |
|-------|-----------|
| Pure scalping, one chart | `InpDays` = 2–3, `InpYMode` = % change, `InpSRTf` = 1 h |
| Intraday context | `InpDays` = 5–8, `InpSRTf` = 4 h, `InpProfileDays` = 20 |
| Small screen | Smaller `InpPanelWidth` / `InpPanelHeight`, details OFF, `InpWindowHeight` ≈ 400 |
| High-DPI display | `InpFontScale` = 1.3–1.6 |
---
## 9. Performance notes
- The first start on a new symbol can take a while: the terminal may need to download tick history for ~16 sessions. The overlay appears first; the panel fills in as completed sessions arrive (counter "Loading… n/N").
- Loading is time-boxed (`InpBudgetMs`), so the terminal remains responsive. Lower it on slow machines; raise it to load faster on strong ones.
- Memory per session is small (≈ 8 k bins × 5 arrays); 20 sessions are comfortably handled.
- Canvas redraws are throttled (300 ms minimum interval).
---
## 10. Chart objects and global variables
| Name | Type | Purpose |
|------|------|---------|
| `GUA_Canvas_<n>` | Bitmap label (canvas) in the indicator sub-window | The tick overlay itself (`<n>` = sub-window index). |
| `GUA_Panel` | Bitmap label (canvas) | The info panel on the main chart; click handling for the Details button. |
| `GUA_SR_R0…` / `GUA_SR_S0…` | `OBJ_HLINE` | Resistance / support lines. |
| `GUA_SR_*_t` | `OBJ_TEXT` | Price and touch-count labels next to the lines. |
| `MBT_details` | Terminal global variable | Remembers the Details ON/OFF state across restarts. |
All `GUA_SR_*` objects are removed when the indicator is removed.
---
## 11. Troubleshooting
| Symptom | Likely cause / fix |
|---------|--------------------|
| "Loading tick data…" for a long time | Terminal is downloading tick history. Keep the chart open; check *Tools → Options → Charts* for the tick-history limits and make sure the symbol is in Market Watch. |
| "No tick data found (check symbol / session hours)" | Broker provides no tick history for this symbol, or session hours were detected incorrectly — set `InpAutoSession = false` and enter the session start/length manually. |
| "Window too small – increase its height" | Sub-window is too short; raise `InpWindowHeight` or drag the splitter. |
| Panel says "too early to compare" | Fewer than 30 minutes since session open — expected. |
| Panel says "Not enough history to compare" | Fewer than 5 past sessions have data at this elapsed time. Wait for loading or increase available tick history. |
| ATR shows "needs 3+ past sessions" | Same reason — ATR needs at least 3 completed past sessions. |
| Text too small / too large | Adjust `InpFont` and `InpFontScale`. |
| Non-Latin characters broken | Re-save the file as UTF-8 with BOM in MetaEditor. |
| No S/R lines | Needs ≥ 5 hourly (or 4-hour) bars of stored sessions; also check `InpShowSR` and `InpSROnChart`. |
| Last tick warning during the day | The market is closed for that symbol or the feed is interrupted. |
---
## 12. Limitations and disclaimer
- Works from **broker time** and the broker's tick history; different brokers may produce slightly different shapes and spreads.
- Weekend days are skipped; holidays without ticks are ignored automatically.
- Bid price is the default; the `Mid` option averages bid and ask when both are available.
- Statistics ("typical", ATR, forward moves) are descriptive summaries of recent sessions and do not predict future price.
- The indicator does not place orders and does not generate alerts.
**Disclaimer:** This tool is for information and analysis only and is not financial advice. Trading leveraged products carries a high risk of loss.
---
*MiniBullTicko V13.19 · © MiniBull*
