mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-07-27 20:47:44 +00:00
docs: refactor
This commit is contained in:
@@ -1,21 +1,110 @@
|
||||
# Spread Cost Pro (Indicator)
|
||||
# Institutional Spread Cost Pro Detector (Standard & MTF-Ready)
|
||||
|
||||
## 1. Summary
|
||||
## 1. Summary (Introduction)
|
||||
|
||||
**Spread Cost Pro** is a risk management utility that visualizes the "Real Cost of Trading" dynamically. It doesn't just show the spread in points (which is often meaningless in isolation), but calculates the spread as a **percentage of the current market volatility (ATR)**.
|
||||
The **Institutional Spread Cost Pro Detector** is an essential quantitative transaction-friction and execution-feasibility tool. It displays the bid-ask spread not as a static, meaningless point value, but as a **dynamic percentage of the immediate market volatility (ATR)**.
|
||||
|
||||
This helps traders answer the question: *"Is it worth entering a trade right now, or is the spread too wide relative to the potential profit?"*
|
||||
In systematic and high-frequency trading, transaction cost is the single largest drag on strategy performance. A $1.5$-point spread might look cheap on paper, but if the average trading range (ATR) of a 5-minute bar is only $5.0$ points, that spread represents a staggering **$30\%$ transaction friction**. Attempting to scalp in this environment is mathematically unviable, as transaction costs will rapidly devour any statistical expectancy.
|
||||
|
||||
## 2. Methodology
|
||||
By normalizing the live spread against the Average True Range (ATR), the `SpreadCost_Pro` indicator acts as an objective **Go/No-Go Execution Filter**. It categorizes execution environments into three logical, color-coded zones:
|
||||
|
||||
$$Cost \% = \left( \frac{\text{Spread}}{\text{ATR}} \right) \times 100$$
|
||||
* **Cheap / Highly Viable (Green):** Spread cost represents $\le 10\%$ of the immediate volatility. Optimal scalp execution environment.
|
||||
* **Normal / Acceptable (Silver):** Spread cost is between $10\%$ and $30\%$ of volatility. Standard trading environment.
|
||||
* **Expensive / High-Risk (Crimson):** Spread cost is $\ge 30\%$ of volatility. Execution should be blocked due to extreme transaction friction.
|
||||
|
||||
* **Spread:** The difference between Bid and Ask at that historical moment.
|
||||
* **ATR:** The average range of price movement (potential profit space).
|
||||
---
|
||||
|
||||
## 3. Usage
|
||||
## 2. Mathematical & Quant Foundations
|
||||
|
||||
* **Green Bars (< 10%):** **High Liquidity / Cheap.** This is the ideal time to scalp. The market is moving enough that the spread is negligible.
|
||||
* **Red Bars (> 30%):** **Low Liquidity / Expensive.** The spread is eating up a huge portion of the potential move.
|
||||
* *Warning:* This often happens during **News Events**, **Market Rollover (23:00)**, or on **Exotic Pairs**.
|
||||
* *Action:* **DO NOT SCALP.** Only enter long-term Swing trades where the spread matters less, or wait for liquidity to return.
|
||||
The indicator normalizes integer spread values against the price-expressed Average True Range (ATR):
|
||||
|
||||
### A. Volatility Baseline (ATR)
|
||||
|
||||
First, raw volatility is calculated using the standard 14-period Wilder's smoothed ATR:
|
||||
|
||||
$$\text{TR}_t = \max \big( (H_t - L_t), |H_t - C_{t-1}|, |L_t - C_{t-1}| \big)$$
|
||||
|
||||
$$\text{ATR}_t = \frac{\text{ATR}_{t-1} \times (N - 1) + \text{TR}_t}{N}$$
|
||||
|
||||
### B. Spread Price Conversion
|
||||
|
||||
The integer spread array provided by MT5 (`spread[]`) is expressed in points. To compare it to the ATR, it is converted into a decimal price value using the symbol's point size:
|
||||
|
||||
$$\text{SpreadPrice}_t = \text{SpreadPoints}_t \times \text{Point}$$
|
||||
|
||||
### C. Spread Cost Ratio Formula
|
||||
|
||||
The final Spread Cost percentage representing the transaction friction on each bar $t$ is calculated as:
|
||||
|
||||
$$\text{SpreadCostRatio}_t = \frac{\text{SpreadPrice}_t}{\text{ATR}_t} \times 100.0$$
|
||||
|
||||
Where $\text{ATR}_t > 1.0e-9$ to prevent division-by-zero exceptions.
|
||||
|
||||
### D. Multi-Template Visual Classification
|
||||
|
||||
Each calculated percentage is mapped to a premium-grade color index inside the color histogram:
|
||||
|
||||
$$\text{ColorIndex}_t = \begin{cases}
|
||||
0.0 \quad \text{(Cheap - clrMediumSeaGreen)} & \text{if } \text{SpreadCostRatio}_t \le \text{InpCheapLevel} \\
|
||||
2.0 \quad \text{(Expensive - clrCrimson)} & \text{if } \text{SpreadCostRatio}_t \ge \text{InpExpensiveLevel} \\
|
||||
1.0 \quad \text{(Normal - clrSilver)} & \text{otherwise}
|
||||
\end{cases}$$
|
||||
|
||||
---
|
||||
|
||||
## 3. Volatility vs. Cost Timeframe Dynamics
|
||||
|
||||
Due to the mathematical relationship between spread and volatility, the indicator behaves differently depending on the chosen timeframe:
|
||||
|
||||
| Timeframe Category | ATR (Volatility) | Spread (Cost) | Average Cost % | Quant Trading Application |
|
||||
| :--- | :--- | :--- | :---: | :--- |
|
||||
| **Lower TF (M1 to M15)** | Ultra-Small | Constant | **High ($20\% - 50\%$)** | **Scalping Filter.** Blocks execution during low-volatility sessions or wide-spread periods. |
|
||||
| **Medium TF (M30 to H1)** | Moderate | Constant | **Medium ($5\% - 15\%$)** | **Intraday Pivot Verification.** Confirms optimal entry timing on trend pullbacks. |
|
||||
| **Higher TF (H4 to Daily)** | Very Large | Constant | **Ultra-Low ($<2\%$)** | **Broker Spread Quality Audit.** Primarily used to compare transaction costs across different brokers. |
|
||||
|
||||
---
|
||||
|
||||
## 4. Visual & Technical Highlights
|
||||
|
||||
* **Automatic Subwindow Scaling:**
|
||||
By removing rigid minimum scaling boundaries, the indicator separate window dynamically auto-scales, providing an aesthetically pleasing, spacious visual depth for the histogram bars across all template setups.
|
||||
* **Platform-Aware Chronological Safety:**
|
||||
The engine enforces chronological array indexing (`ArraySetAsSeries(..., false)`) across all input prices, timeframes, and indicator buffers, completely eliminating phase shift errors.
|
||||
* **Live Spread Fallback Guard:**
|
||||
During the initial synchronization of custom timeframes (e.g., M3, M10), the historical `spread[]` array may temporarily contain only zeros. To prevent empty chart displays, the engine dynamically intercepts the live broker spread:
|
||||
```mql5
|
||||
double sp = (double)spread[i];
|
||||
if(i == rates_total - 1 && sp == 0.0 && current_spread > 0)
|
||||
{
|
||||
sp = (double)current_spread; // Fallback to live broker spread
|
||||
}
|
||||
```
|
||||
|
||||
This guarantees immediate visual output on the forming bar as soon as a live tick is received.
|
||||
|
||||
---
|
||||
|
||||
## 5. Quantitative Trading Applications
|
||||
|
||||
### A. Systematic Scalping Go/No-Go Filter
|
||||
|
||||
This strategy blocks algorithmic execution when transaction costs are statistically too high relative to immediate market ranges.
|
||||
|
||||
1. **System Setup:**
|
||||
* Integrate the `SpreadCost_Pro` logic into your EA (Expert Advisor).
|
||||
* Define `InpExpensiveLevel = 30.0` (30% transaction friction).
|
||||
2. **Algorithmic Entry Filter:**
|
||||
* Before opening any scalp position (Buy or Sell), query the latest value of the `SpreadCost_Pro` buffer (`BufCost[rates_total-1]`).
|
||||
* **BLOCK EXECUTION:** If `BufCost[rates_total-1] >= 30.0`, block the trade signal. The spread is too wide or volatility is too low.
|
||||
* **ALLOW EXECUTION:** If `BufCost[rates_total-1] < 30.0`, allow the trade to execute.
|
||||
3. **Strategic Value:** This filter eliminates unprofitable scalp trades during low-volume sessions (such as the Asian session on GBPUSD or the daily rollover period), saving the portfolio from death by a thousand commission cuts.
|
||||
|
||||
### B. Broker Spread Quality Audit
|
||||
|
||||
Use the indicator on an H1 chart to compare execution costs between different brokerage firms on the same financial asset.
|
||||
|
||||
1. **Setup:**
|
||||
* Load the indicator on identical currency pairs across two different trading terminals (Broker A and Broker B).
|
||||
2. **Analysis:**
|
||||
* Observe the ratio of Cheap (Green) vs. Normal (Silver) histogram bars over a 500-bar history.
|
||||
* The broker showing a higher frequency of Green bars and lower spikes in Crimson bars has superior liquidity routing and tighter spreads, making them the mathematically optimal choice for systematic execution.
|
||||
|
||||
Reference in New Issue
Block a user