Wave Trend Oscillator Scanner MT4
- Indicators
-
Evgenii Sutulov
I build trading indicators, strategies, and dashboards that don't repaint.
Seven years doing this. MetaTrader 4, MetaTrader 5, TradingView.
Closed bars only. What you see is what happened.
The bar being formed never changes a published value. - Version: 1.3
- Activations: 20
One glance instead of twenty-eight charts. Wave Trend Oscillator Scanner runs the Wave Trend calculation across your symbol list on up to four timeframes at once, prints every fresh cross with its age and its grade, and marks the rows where the timeframes actually agree. Out of the box it scans fifteen pairs; one setting raises that to twenty-eight. And the oscillator itself draws in this chart's sub-window, so you act on what the table found without attaching a second indicator.
The price increases by $10 every 10 purchases.
This is one of the two products in the family where the grade actually appears on the board, because the Wave Trend oscillator grades its crosses one or two by how deep into the zone the market was.
The board
A row per symbol, a column per scanned timeframe, up to four columns and up to twenty-eight symbols; fifteen are scanned out of the box and the maximum is one setting away. The symbol list is comma separated, or the board can take the Market Watch list instead. Broker prefix and suffix are detected from the chart you are on, or given by hand. Out of the box the board scans four timeframes: M15, H1, H4 and D1.
A cell reads like ^14b G2: the direction of the cross, how many bars ago it fired, and its grade. The word flat means the calculation ran and found no cross in the window. Three dots mean the cell has not been measured, and with tooltips switched on, hovering it explains why in words, along with the current slow-line value. A signal older than the freshness threshold keeps its hue and loses its weight. A row with a fresh signal anywhere in it gets a wash of the accent colour.
The AGREE column takes the visible timeframe columns for a symbol, finds the majority side and prints v3/4: the direction and how many of the visible timeframes stand on it. Full agreement is drawn bold in that side's colour, because that is the row the board exists to surface. A tie prints a dash and is deliberately not treated as a verdict. With one timeframe visible the column is dropped entirely rather than printing a 1/1 that restates the cell beside it.
Column headers are buttons. Click a timeframe header to sort by that column, freshest first, rows with nothing at the bottom; click again to reverse. Click AGREE to sort by agreement, full agreement first. The active header carries the accent colour and a caret. A separate Sort button cycles freshest, grade and name, and here the order by grade is a real order.
A Show button cycles all, buys, sells and fresh. Buys and sells follow the AGREE verdict rather than any single cell, so a row under buys always reads an up glyph in AGREE, and a tie appears under neither. The filter is on the view, not the calculation: a hidden row is still measured and can still alert.
The legend above the table decodes the notation in one line, including the grade half, which it prints only because this port grades. It can be switched off. Timeframe buttons show and hide a column without stopping the measurement behind it.
The visible row count is fitted to the pane and the row setting is a maximum. Page buttons appear only when the rows do not fit. Because the board never draws more rows than the pane holds, the page buttons are always on screen and always reachable, however tall the row setting is.
Clicking a cell switches this chart to that symbol and timeframe. Two status lines are always on show: symbols ready of total, time since the last update, signals in the lookback window; then either the watchdog line or a sentence explaining why nothing is showing.
Diagnostics
A second panel, off by default, answers the question "why is there no signal": symbol coverage, which series are short of bars and by how much, how many signals were found in the window, and how many symbols this indicator switched on in Market Watch. A cell that could not be measured is explained rather than left blank.
The chart indicator
Drawn in its own sub-window with a dotted zero level: the fast and slow wave lines and the momentum histogram between them, coloured by whether momentum is expanding or fading. Divergence lines are drawn in the sub-window and, optionally, on the price chart between the two price pivots, so you see the divergence where you actually trade. Its timeframe is set separately from the timeframes the board scans.
The settings sheet
The gear opens three tabs. Values holds the timeframe, the channel length, the average length, overbought level 1, oversold level 1, whether divergence lines are drawn, and the shortest and longest pivot span a divergence may have. Every row has steppers, a range and a sentence of help. Changing one recalculates the whole board, and the panel reports progress while it does.
Alerts holds the master switch, the per-event switches, four channels, the cooldown and a test button. Styles holds the legend switch, the palette, whether the WT1 and WT2 lines are drawn, whether the momentum histogram is drawn, the line width, and whether divergence is drawn on the price chart. These are the same display controls the matching single-chart indicator carries, under the same names, so a chart set up one way can be reproduced on the other.
Three colour schemes are included, one of them colour-blind safe, using blue and orange rather than red and green. Panel position, scheme, the sort, the filter, the visible columns and every value changed on the sheet persist per chart across a timeframe change and a terminal restart. The interface is English.
Alerts
Alerts are off out of the box, with a master switch on the panel and a Test alert button beside it. The events are a fresh BUY and a fresh SELL, declared separately for each scanned timeframe, plus data health, which speaks when a symbol loses or regains its data. The minimum grade setting does real work here: set it to two and only the crosses that reached the deeper level will speak.
Four channels carry them: popup window, sound, push to the mobile terminal, and e-mail. The cooldown is kept per cell and per event, thirty minutes by default. Telegram is not part of this product.
Cost
The work is budgeted: a set number of symbols is refreshed per timer tick, so a long list spreads its load rather than stalling the terminal. The first pass is progressive and the panel reports the percentage measured.
Reading it from an EA
The chart indicator's thirteen buffers are readable through iCustom. MetaTrader 4 draws only the leading buffers, so the drawn series come first and the readable contract sits behind them. This map is not the MetaTrader 5 edition's map: an EA written against that edition must be re-pointed to the indices below.
Buffers 0 to 4 are the display split of the momentum histogram, one plain histogram per state: neutral, expanding up, fading up, expanding down, fading down. Buffer 5 is WT1, the fast wave line, and buffer 6 is WT2, the slow one. Buffer 7 is WT1-WT2, the histogram as one series, and buffer 8 is the colour index that goes with it. Buffer 9 is Signal: +1 on a BUY cross, -1 on a SELL cross, 0 when there is none. Buffer 10 is Grade, 1 or 2 on a signal bar. Buffer 11 is Div, the divergence state. Buffer 12 is Zero: +1 when the fast line crossed zero upwards, -1 when it crossed downwards, 0 when it did neither.
The Data Window lists the seven drawn rows, the five histogram columns and the two wave lines. The contract, buffers 7 to 12, does not appear there, and that proves nothing: iCustom reads every index above just the same. There are no separate Buy and Sell price buffers in this product, and no Override buffer either, which is one index this map does not share with the single-chart Wave Trend indicator: there the panel override counter sits at the end of the map, here it does not exist. The signal is buffer 9 and its grade is buffer 10.
MQL4 has no input groups, so the parameter list an EA passes to iCustom here is shorter than the MetaTrader 5 edition's, and the positions differ. Build the call against this edition's input list, not the other platform's.
The Styles tab hides a plot by taking its colour away, never by emptying a buffer. An instance created by iCustom is read-only and always uses the parameters you passed.
The board is a panel, not a buffer. It is read by eye and by alert.
Provenance
This is a port of "WaveTrend [LazyBear]" from TradingView. The provenance is a reconstruction: the formulas are canonical and widely mirrored, and they were used as this file's working specification. The script is openly published, which makes a port by formula admissible.
The product carries the method's name because that is what it implements. The original work is LazyBear's and no authorship of it is claimed here.
Honest limits
The board reads closed bars and counts a cell's age in closed bars. In the sub-window the oscillator is live on the forming bar, and a cross that exists mid-bar can be gone at the close. A value published on a closed bar does not change afterwards.
Divergence marks are never placed on the forming bar. A pivot needs the bars either side of it to exist, so divergence appears after the fact by construction. Nothing here draws a divergence into a past bar that did not have one.
The grade describes how deep into the zone the market went, not probability. A grade 2 cell went further. That is all it says.
A cross is not direction. In a trend the oscillator reaches one zone repeatedly and every cross it produces is against that trend, and on a board that means several correlated pairs light up together.
AGREE counts timeframes. Four correlated readings of one instrument agreeing is not four independent confirmations. A tie deliberately produces no verdict and is hidden by both the buys and the sells filters.
Scanning costs. Twenty-eight symbols on four timeframes is a hundred and twelve cells; the budget setting is what you turn down on a slow machine.
No profit figure, win rate or backtest result is claimed here.

