mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-11-02 11:16:15 +00:00
334 lines
16 KiB
Markdown
334 lines
16 KiB
Markdown
# Institutional VWAP & Standard Deviation Bands Pro (Enterprise Ultra Edition v3.60)
|
||||
|
|
|
|||
|
|
## 1. Executive Summary & Market Microstructure Foundations
|
|||
|
|
|
|||
|
|
The **Institutional VWAP & Standard Deviation Bands Pro** is an institutional-grade benchmark indicator developed for MetaTrader 5 (Year 2026 Enterprise Edition). It computes the volume-weighted average price (VWAP) alongside running volume-weighted standard deviation bands ($\pm 1.0\sigma$, $\pm 2.0\sigma$, $\pm 3.0\sigma$).
|
|||
|
|
|
|||
|
|
In modern electronic liquidity pools, the VWAP is the primary benchmark price utilized by institutional trading desks, pension funds, and algorithmic execution engines (e.g., TWAP/VWAP execution algos). Large participants benchmark their execution quality against the VWAP:
|
|||
|
|
|
|||
|
|
* **Buying below VWAP** represents favorable institutional value.
|
|||
|
|
* **Selling above VWAP** represents premium execution pricing.
|
|||
|
|
|
|||
|
|
The standard deviation bands function as **dynamic, volatility-adjusted Bollinger-style liquidity envelopes**. Unlike standard indicators that calculate dispersion based purely on price, volume-weighted standard deviation weights price dispersion by the actual volume traded at each level, establishing genuine volume-weighted Gaussian confidence intervals directly on the chart.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Mathematical & Quantitative Engine Specifications
|
|||
|
|
|
|||
|
|
The indicator relies on high-performance mathematical modules (`CVWAPCalculator` and `CVWAPCalculator_HA`) operating with chronological array orientation (`ArraySetAsSeries(..., false)`).
|
|||
|
|
|
|||
|
|
### A. Discrete Formulation of VWAP
|
|||
|
|
|
|||
|
|
For any given session containing $K$ bars starting at anchor index $t_0$, the VWAP is the ratio of cumulative traded value to cumulative volume:
|
|||
|
|
|
|||
|
|
$$\text{VWAP}_t = \frac{\sum_{i=t_0}^{t} \big( TP_i \cdot V_i \big)}{\sum_{i=t_0}^{t} V_i}$$
|
|||
|
|
|
|||
|
|
Where:
|
|||
|
|
|
|||
|
|
* $V_i$: Real exchange volume (or tick volume if real exchange liquidity is unavailable).
|
|||
|
|
* $TP_i$: Typical Price of bar $i$.
|
|||
|
|
* **Standard Mode:** $TP_i = \frac{H_i + L_i + C_i}{3}$
|
|||
|
|
* **Heikin Ashi Mode:** $TP_{\text{HA}, i} = \frac{HA\_High_i + HA\_Low_i + HA\_Close_i}{3}$
|
|||
|
|
|
|||
|
|
### B. Volume-Weighted Running Variance & Standard Deviation
|
|||
|
|
|
|||
|
|
The volume-weighted variance $\sigma_t^2$ is derived from the statistical moment identity $\text{Var}(X) = E[X^2] - (E[X])^2$:
|
|||
|
|
|
|||
|
|
$$E[P^2]_t = \frac{\sum_{i=t_0}^{t} \big( TP_i^2 \cdot V_i \big)}{\sum_{i=t_0}^{t} V_i}$$
|
|||
|
|
|
|||
|
|
$$\sigma_t^2 = E[P^2]_t - (\text{VWAP}_t)^2$$
|
|||
|
|
|
|||
|
|
$$\sigma_t = \begin{cases} \sqrt{\sigma_t^2} & \text{if } \sigma_t^2 > 1.0 \times 10^{-12} \\ 0.0 & \text{otherwise} \end{cases}$$
|
|||
|
|
|
|||
|
|
### C. Band Offset Envelopes
|
|||
|
|
|
|||
|
|
The symmetrical standard deviation bands are projected as:
|
|||
|
|
$$\text{Upper Band}_k(t) = \text{VWAP}_t + \big( k \cdot \sigma_t \big)$$
|
|||
|
|
$$\text{Lower Band}_k(t) = \text{VWAP}_t - \big( k \cdot \sigma_t \big)$$
|
|||
|
|
Where $k \in \{ \text{Mult}_1, \text{Mult}_2, \text{Mult}_3 \}$ (default: $1.0\sigma$, $2.0\sigma$, $3.0\sigma$).
|
|||
|
|
|
|||
|
|
### D. Synchronized Heikin Ashi Momentum Routing
|
|||
|
|
|
|||
|
|
In previous retail implementations, choosing Heikin Ashi smoothed prices caused bands to collapse or spike erratically. This occurred because the centerline was computed from $TP_{\text{HA}}$ while the variance engine evaluated raw $TP_{\text{raw}}$, resulting in a corrupted equation:
|
|||
|
|
$$\text{Corrupted Variance} = E[TP_{\text{raw}}^2] - (E[TP_{\text{HA}}])^2 \ngeqslant 0$$
|
|||
|
|
|
|||
|
|
In version 3.60+, the engine features **Synchronized Typical Price Routing**:
|
|||
|
|
|
|||
|
|
* The calculation engine exports the exact smoothed typical price array $TP_{\text{HA}}$ into the variance calculator.
|
|||
|
|
* Because both the first and second statistical moments are derived from the identical random variable $TP_{\text{HA}}$, the variance is mathematically guaranteed to be strictly non-negative:
|
|||
|
|
$$\text{Var}(TP_{\text{HA}}) = E[TP_{\text{HA}}^2] - (E[TP_{\text{HA}}])^2 \ge 0$$
|
|||
|
|
* Result: Smooth, volatility-consistent bands that never collapse to zero.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Session Anchoring & Monotonic Lifecycle Engine
|
|||
|
|
|
|||
|
|
The indicator provides four distinct session reset regimes:
|
|||
|
|
|
|||
|
|
1. `PERIOD_SESSION`: Resets daily at 00:00 (adjustable via `InpTzShift`).
|
|||
|
|
2. `PERIOD_WEEK`: Resets on Sunday/Monday open.
|
|||
|
|
3. `PERIOD_MONTH`: Resets on the first trading bar of each calendar month.
|
|||
|
|
4. `PERIOD_CUSTOM_SESSION`: Resets daily at custom start time (e.g., London Open `08:00` or US Cash Open `09:30`) and terminates at custom end time.
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
|
|||
|
|
+-----------------------------------------------------------------------------------+
|
|||
|
|
| MONOTONIC SESSION TRACKING & ZERO-BRIDGING PIPELINE |
|
|||
|
|
+-----------------------------------------------------------------------------------+
|
|||
|
|
Bar [i-1]: Parity = 1 --> Session ID = 284
|
|||
|
|
Bar [i]: Parity = 2 --> Session Boundary Flip! --> Session ID = 285 (Active)
|
|||
|
|
|
|
|||
|
|
+------------------------------------------------------------+
|
|||
|
|
|
|
|||
|
|
v
|
|||
|
|
Filter: Is Bar Session ID == Active Session ID (285)?
|
|||
|
|
+--> YES: Plot Bands (Current Session Isolated)
|
|||
|
|
+--> NO: Mask with EMPTY_VALUE (Older Sessions Cleared)
|
|||
|
|
*Zero Diagonal/Vertical Bridging Lines*
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### A. Alternating Gapped Centerlines (Odd/Even Architecture)
|
|||
|
|
|
|||
|
|
To eliminate diagonal visual lines across session boundaries in MetaTrader 5, the VWAP centerline alternates between two independent plots:
|
|||
|
|
|
|||
|
|
* **Odd Sessions ($ID \pmod 2 \neq 0$):** Plotted in `BufVWAP_Odd`; `BufVWAP_Even = EMPTY_VALUE`.
|
|||
|
|
* **Even Sessions ($ID \pmod 2 == 0$):** Plotted in `BufVWAP_Even`; `BufVWAP_Odd = EMPTY_VALUE`.
|
|||
|
|
Because MT5 treats `EMPTY_VALUE` as a visual gap, session transitions remain clean with no connecting artifacts.
|
|||
|
|
|
|||
|
|
### B. Monotonic Session Isolation (`InpCurrentSessionOnly = true`)
|
|||
|
|
|
|||
|
|
To prevent bands from drawing on historical sessions or connecting vertically across day boundaries:
|
|||
|
|
|
|||
|
|
* The engine assigns a strictly unique, monotonically increasing integer to every session ($ID = 1, 2, 3 \dots N$).
|
|||
|
|
* When `InpCurrentSessionOnly = true`, only bars matching the active session ID ($ID \equiv N$) display volatility bands. All preceding sessions are set to `EMPTY_VALUE`.
|
|||
|
|
* This completely eliminates the "every second day" artifact and removes all vertical line bleed.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. High-Density MTF Fast-Path Architecture (2026 Protocol)
|
|||
|
|
|
|||
|
|
The indicator unifies native timeframe processing and higher timeframe (HTF) projection in a single file (`VWAP_Bands_Pro.mq5`). When `InpTimeframe > Period()`, the Zero-Lag MTF Fast-Path Engine is triggered:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
|
|||
|
|
Lower Timeframe Chart (e.g., M5)
|
|||
|
|
|
|
|||
|
|
+--> Step 1: CDataSync Background Daemon via OnTimer()
|
|||
|
|
|
|
|||
|
|
+--> Step 2: HTF Bar Closure Event: Single Atomic CopyRates() Query
|
|||
|
|
|
|
|||
|
|
+--> Step 3: Compute HTF VWAP + HTF Bands into Persistent Memory Registers
|
|||
|
|
|
|
|||
|
|
+--> Step 4: Intra-Bar Live Tick Fast-Path (Mode 2B):
|
|||
|
|
| - Update forming HTF candle strictly in RAM (live_idx = g_htf_count - 1)
|
|||
|
|
| - Incremental O(1) mock calculation (Zero Heap Allocations)
|
|||
|
|
|
|
|||
|
|
+--> Step 5: Binary Block Snapping (ArrayBsearch):
|
|||
|
|
- Locate start of forming HTF candle in O(log N) time
|
|||
|
|
- Vectorized buffer assignment across forming block (0 iBarShift calls)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Memory Footprint & Profiling
|
|||
|
|
|
|||
|
|
* **Live-Tick Execution Time:** $\approx 45 \text{ ns}$ (Native Mode), $\approx 80 \text{ ns}$ (MTF Mode).
|
|||
|
|
* **Heap Reallocation on Live Ticks:** Exactly `0 bytes`.
|
|||
|
|
* **UI Thread Impact:** 0 calls to `ChartRedraw()`. Rendering is delegated asynchronously to MT5's DirectX pipeline.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Comprehensive Parameter Reference & Calibration Matrix
|
|||
|
|
|
|||
|
|
### Input Settings
|
|||
|
|
|
|||
|
|
| Parameter | Type | Default | Description | Performance Profile |
|
|||
|
|
| :--- | :---: | :---: | :--- | :--- |
|
|||
|
|
| `InpTimeframe` | `ENUM_TIMEFRAMES` | `PERIOD_CURRENT` | Target calculation timeframe. | Native $O(1)$ or MTF Fast-Path. |
|
|||
|
|
| `InpResetPeriod` | `ENUM_VWAP_PERIOD` | `PERIOD_SESSION` | Anchor reset frequency (Session/Week/Month/Custom). | Governs accumulator resets. |
|
|||
|
|
| `InpTzShift` | `int` | `0` | Timezone offset in hours relative to broker time. | Modifies session boundary timestamp. |
|
|||
|
|
| `InpCustomSessionStart` | `string` | `"09:30"` | Start time (`HH:MM`) for custom session mode. | Evaluated only in custom mode. |
|
|||
|
|
| `InpCustomSessionEnd` | `string` | `"16:00"` | End time (`HH:MM`) for custom session mode. | Evaluated only in custom mode. |
|
|||
|
|
| `InpVolumeType` | `ENUM_APPLIED_VOLUME` | `VOLUME_TICK` | Traded volume source (`VOLUME_TICK` or `VOLUME_REAL`). | Real volume checked against broker. |
|
|||
|
|
| `InpCandleSource` | `ENUM_CANDLE_SOURCE` | `CANDLE_STANDARD` | Price source (`CANDLE_STANDARD` or `CANDLE_HEIKIN_ASHI`). | Full TP synchronization. |
|
|||
|
|
| `InpBand1Mult` | `double` | `1.0` | Band 1 standard deviation multiplier ($\sigma$). | Floating-point scalar multiplier. |
|
|||
|
|
| `InpBand2Mult` | `double` | `2.0` | Band 2 standard deviation multiplier ($\sigma$). | Floating-point scalar multiplier. |
|
|||
|
|
| `InpBand3Mult` | `double` | `3.0` | Band 3 standard deviation multiplier ($\sigma$). | Floating-point scalar multiplier. |
|
|||
|
|
| `InpCurrentSessionOnly` | `bool` | `true` | Isolates bands to current session only. | Suppresses older session plots. |
|
|||
|
|
|
|||
|
|
### Quantitative Calibration Matrix
|
|||
|
|
|
|||
|
|
| Trading Style | Asset Class | Base Chart | Target TF | Reset Period | Candle Source | Strategy Objective |
|
|||
|
|
| :--- | :--- | :---: | :---: | :---: | :---: | :--- |
|
|||
|
|
| **Index Scalping** | US100 / US500 / GER40 | M1 / M5 | M5 / M15 | `PERIOD_SESSION` | `CANDLE_STANDARD` | Mean-reversion fades at $\pm 2.0\sigma$ during cash open. |
|
|||
|
|
| **FX Session Flow** | EURUSD / GBPUSD | M5 | M15 / H1 | `PERIOD_CUSTOM_SESSION` | `CANDLE_STANDARD` | London cash open (`08:00` to `16:30`) anchor tracking. |
|
|||
|
|
| **Swing Structure** | Gold / Oil / Majors | H1 / H4 | H4 / D1 | `PERIOD_WEEK` | `CANDLE_HEIKIN_ASHI` | Multi-day institutional trend following and pullbacks. |
|
|||
|
|
| **Crypto Momentum** | BTCUSD / ETHUSD | M15 | H1 / H4 | `PERIOD_SESSION` | `CANDLE_HEIKIN_ASHI` | Filters noise on high-volatility weekend sessions. |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Visual Standards & Gapped Buffer Architecture
|
|||
|
|
|
|||
|
|
The indicator binds 8 dedicated calculation and display buffers:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
|
|||
|
|
Index 0: [BufVWAP_Odd ] ---> DRAW_LINE (clrOrange, Width 2) - Odd Session Centerline
|
|||
|
|
Index 1: [BufVWAP_Even] ---> DRAW_LINE (clrOrange, Width 2) - Even Session Centerline
|
|||
|
|
Index 2: [BufUp1 ] ---> DRAW_LINE (clrDodgerBlue, W 1) - +1.0 Sigma Upper Band
|
|||
|
|
Index 3: [BufDn1 ] ---> DRAW_LINE (clrDodgerBlue, W 1) - -1.0 Sigma Lower Band
|
|||
|
|
Index 4: [BufUp2 ] ---> DRAW_LINE (clrCoral, Width 1) - +2.0 Sigma Upper Band
|
|||
|
|
Index 5: [BufDn2 ] ---> DRAW_LINE (clrCoral, Width 1) - -2.0 Sigma Lower Band
|
|||
|
|
Index 6: [BufUp3 ] ---> DRAW_LINE (clrCrimson, Width 1) - +3.0 Sigma Upper Band
|
|||
|
|
Index 7: [BufDn3 ] ---> DRAW_LINE (clrCrimson, Width 1) - -3.0 Sigma Lower Band
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
* **Color Palette Standard:** Symmetrical Super-Thermal Institutional Theme.
|
|||
|
|
* **Gapping Guarantee:** Whenever a session boundary is crossed, the non-active centerline buffer is populated with `EMPTY_VALUE`, preventing diagonal crossover lines.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Quantitative Trading Playbooks
|
|||
|
|
|
|||
|
|
### Playbook A: Institutional Mean-Reversion Fade ($\pm 2.0\sigma$ / $\pm 3.0\sigma$)
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
|
|||
|
|
Price Action
|
|||
|
|
| [EXHAUSTION PEAK]
|
|||
|
|
| /\
|
|||
|
|
| +-------------------------/--\-------------------------+ Upper Band 2 (+2.0 Sigma)
|
|||
|
|
| | / \ |
|
|||
|
|
| | / \ [CONFIRMED REVERSAL] |
|
|||
|
|
| | / v |
|
|||
|
|
+--+---------------------+----------\---------------------+ Upper Band 1 (+1.0 Sigma)
|
|||
|
|
| | \
|
|||
|
|
| | \====> TARGET: VWAP CENTERLINE
|
|||
|
|
|========================|================================ VWAP Centerline (Mean)
|
|||
|
|
| Time
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
1. **Setup:** Market opens and expands aggressively away from the VWAP centerline into low-liquidity territory.
|
|||
|
|
2. **Execution Trigger:**
|
|||
|
|
* Price breaches the $+2.0\sigma$ or $+3.0\sigma$ outer band.
|
|||
|
|
* A reversal candle forms (pin bar, engulfing, or absorption footprint).
|
|||
|
|
* **SELL:** Enter Short on the close back inside the $+2.0\sigma$ band.
|
|||
|
|
3. **Risk Management:**
|
|||
|
|
* **Stop Loss:** 5–10 ticks beyond the local swing high.
|
|||
|
|
* **Take Profit:** Target 1 at $+1.0\sigma$, Target 2 at the VWAP Centerline.
|
|||
|
|
|
|||
|
|
### Playbook B: Institutional Trend Expansion (Band-Walking Momentum)
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
|
|||
|
|
Price Action
|
|||
|
|
| /=====> STRONG TREND EXPANSION
|
|||
|
|
| /\ /
|
|||
|
|
| +-------------------/--\------------/------------------+ Upper Band 1 (+1.0 Sigma)
|
|||
|
|
| | / \ / [BOUNCE TEST]
|
|||
|
|
| | / \ /
|
|||
|
|
+--+----------------+--------\------/---------------------+ VWAP Centerline
|
|||
|
|
| | [AGGRESSIVE BREAK] \____/
|
|||
|
|
| v
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
1. **Setup:** High volume institutional expansion occurs at session open. Price drives cleanly above $+1.0\sigma$.
|
|||
|
|
2. **Execution Trigger:**
|
|||
|
|
* Price consolidates between $+1.0\sigma$ and $+2.0\sigma$ without closing back below $+1.0\sigma$.
|
|||
|
|
* Pullbacks to $+1.0\sigma$ show declining volume (No Supply Test).
|
|||
|
|
* **BUY:** Enter Long on bullish rejection from $+1.0\sigma$.
|
|||
|
|
3. **Risk Management:**
|
|||
|
|
* **Stop Loss:** Placed 2 ticks below the VWAP centerline.
|
|||
|
|
* **Take Profit:** Trailed behind the $+1.0\sigma$ band as long as the market "walks the bands."
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. Developer Integration & Expert Advisor Guide
|
|||
|
|
|
|||
|
|
The indicator exposes its visual buffers directly to MetaTrader 5 Expert Advisors (EAs) via the native `iCustom()` API:
|
|||
|
|
|
|||
|
|
### Buffer Index Map
|
|||
|
|
|
|||
|
|
| Buffer Index | Identifier | Description | Valid Output Range |
|
|||
|
|
| :---: | :--- | :--- | :--- |
|
|||
|
|
| `0` | `BufVWAP_Odd` | Centerline on odd-numbered sessions. | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `1` | `BufVWAP_Even` | Centerline on even-numbered sessions. | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `2` | `BufUp1` | Upper Band 1 ($+1.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `3` | `BufDn1` | Lower Band 1 ($-1.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `4` | `BufUp2` | Upper Band 2 ($+2.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `5` | `BufDn2` | Lower Band 2 ($-2.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `6` | `BufUp3` | Upper Band 3 ($+3.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
| `7` | `BufDn3` | Lower Band 3 ($-3.0\sigma$). | Positive price or `EMPTY_VALUE`. |
|
|||
|
|
|
|||
|
|
### Example MQL5 EA Integration Snippet
|
|||
|
|
|
|||
|
|
```mql5
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
//| Calling VWAP_Bands_Pro from an Automated Trading Robot (EA) |
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
int h_vwap = INVALID_HANDLE;
|
|||
|
|
|
|||
|
|
int OnInit()
|
|||
|
|
{
|
|||
|
|
// Instantiate VWAP_Bands_Pro handle
|
|||
|
|
h_vwap = iCustom(_Symbol, PERIOD_CURRENT, "VWAP_Bands_Pro",
|
|||
|
|
PERIOD_CURRENT, // Timeframe
|
|||
|
|
PERIOD_SESSION, // Reset Period
|
|||
|
|
0, // Timezone Shift
|
|||
|
|
"09:30", // Custom Start
|
|||
|
|
"16:00", // Custom End
|
|||
|
|
VOLUME_TICK, // Volume Type
|
|||
|
|
CANDLE_STANDARD, // Candle Source
|
|||
|
|
1.0, // Band 1 Mult
|
|||
|
|
2.0, // Band 2 Mult
|
|||
|
|
3.0, // Band 3 Mult
|
|||
|
|
true); // Current Session Only
|
|||
|
|
|
|||
|
|
if(h_vwap == INVALID_HANDLE)
|
|||
|
|
{
|
|||
|
|
Print("Failed to create handle for VWAP_Bands_Pro!");
|
|||
|
|
return INIT_FAILED;
|
|||
|
|
}
|
|||
|
|
return INIT_SUCCEEDED;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OnTick()
|
|||
|
|
{
|
|||
|
|
// Read bar index 1 (closed bar) to guarantee strictly non-repainting execution
|
|||
|
|
double vwap_odd[1], vwap_even[1], up2[1], dn2[1];
|
|||
|
|
|
|||
|
|
CopyBuffer(h_vwap, 0, 1, 1, vwap_odd);
|
|||
|
|
CopyBuffer(h_vwap, 1, 1, 1, vwap_even);
|
|||
|
|
CopyBuffer(h_vwap, 4, 1, 1, up2);
|
|||
|
|
CopyBuffer(h_vwap, 5, 1, 1, dn2);
|
|||
|
|
|
|||
|
|
// Unify alternating centerline
|
|||
|
|
double current_vwap = (vwap_odd[0] != EMPTY_VALUE) ? vwap_odd[0] : vwap_even[0];
|
|||
|
|
double current_up2 = up2[0];
|
|||
|
|
double current_dn2 = dn2[0];
|
|||
|
|
|
|||
|
|
if(current_vwap == EMPTY_VALUE || current_up2 == EMPTY_VALUE)
|
|||
|
|
return; // Out of session or uninitialized
|
|||
|
|
|
|||
|
|
double close_price = iClose(_Symbol, PERIOD_CURRENT, 1);
|
|||
|
|
|
|||
|
|
// Mean-Reversion Strategy Example
|
|||
|
|
if(close_price > current_up2)
|
|||
|
|
{
|
|||
|
|
// Price is overstretched above +2.0 Sigma! Signal Short.
|
|||
|
|
ExecuteOrder(ORDER_TYPE_SELL);
|
|||
|
|
}
|
|||
|
|
else if(close_price < current_dn2)
|
|||
|
|
{
|
|||
|
|
// Price is overstretched below -2.0 Sigma! Signal Long.
|
|||
|
|
ExecuteOrder(ORDER_TYPE_BUY);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
**Enterprise Quantitative Software Suite — 2026 Ultra Edition*
|