Delta Aggression Volume — User Manual (MetaTrader 5, free version 3.20 and PRO version 5.20)
Available on the MQL5 Market: Delta Aggression Volume PRO
Risk notice. Trading involves risk of loss. These indicators count the buy and sell aggression of the trades already executed; they do not predict the market, do not place trades and do not guarantee any result. Use them together with your own analysis and risk management, and test on a demo account first.

Delta Aggression Volume shows, for each candle, the difference between the volume bought by aggressive buyers and the volume sold by aggressive sellers — the aggression delta. It reads every trade (time & sales) of the symbol, classifies it as a buy or a sell aggression and draws the balance of each candle as a column above or below zero in a separate window. The family has two products:
- Delta Aggression Volume (free, version 3.20): the delta columns, with a choice of volume type and calculation start.
- Delta Aggression Volume PRO (version 5.20): the same engine plus reverse-bar colours, a range channel, a moving average of the total volume, six alerts and buffers for Expert Advisors.
Both work only on symbols whose broker delivers real trades with the aggressor side, such as B3 futures and stocks or CME futures (section 1). They do not open trades.
1. Requirements: real trades with buy / sell side
The indicators are built on the trade ticks of the symbol ( COPY_TICKS_TRADE ). Each trade must arrive with its aggressor side (buy or sell), as on exchange-traded instruments.
| Symbol / feed | Live result |
|---|---|
| B3 futures and stocks (WIN, WDO, IND, DOL, PETR4, VALE3 …) at a broker that delivers time & sales | works |
| CME / CBOT / NYMEX / COMEX futures (ES, NQ, CL, GC and their micro contracts) at a broker that delivers exchange trades | works |
| Forex, CFDs, most cryptocurrencies | does not calculate: the feed has quotes (bid / ask) but no trades, so the window stays empty |
| Exchange symbol at a broker that streams quotes only | does not calculate |

To check a symbol, open View → Market Watch, right-click the symbol → Ticks or Time & Sales: if you see a list of trades with volume and buy / sell side, the indicator can work on it. In the Strategy Tester the behaviour is different (section 11).
2. Installation and first start
- Download (free) or buy / rent (PRO) the indicator on the MQL5 Market and install it from the Market tab of the terminal (Toolbox → Market → Purchased → Install).
- Open a chart of a symbol with real trades (for example WINZ26 or WDOZ26 on M1-M15) and drag Delta Aggression Volume or Delta Aggression Volume PRO from the Navigator (Indicators → Market) onto it.
- Keep the default inputs or adjust them (section 9) and press OK.
The indicator opens in its own window below the price chart. The window name shows the volume type: RSJ Delta Aggression (REAL VOL): (free) or RSJ Delta Aggression PRO (REAL VOL): , followed by the values of the bar under the mouse or of the last bar.
First load. At start the indicator downloads every trade from the Start Calculation date to now and classifies them one by one. On liquid symbols this is millions of trades: the first load can take from a few seconds to several minutes, more on M1 and with long starts such as LAST_MONTH or ALL_AVAILABLE_DAYS. The terminal must also have the tick history of that period; on the first use it is downloaded from the broker. Until the history is ready the window stays empty.
3. Indicator window legend

| In the indicator window | Meaning |
|---|---|
| Green column above zero | Positive delta: more volume bought by aggression than sold in that candle. |
| Red column below zero | Negative delta: more volume sold by aggression than bought. |
| Height of the column | Size of the delta, in contracts / shares (Real volume) or in number of trades (Tick volume). |
| Blue column above zero (PRO) | Reverse bar: positive delta, but the price candle closed below its open (section 5). |
| Magenta column below zero (PRO) | Reverse bar: negative delta, but the price candle closed above its open. |
| Two blue horizontal lines (PRO) | Upper and lower lines of the range channel over the last Period bars (section 6). |
| Blue line above the columns (PRO, PLOT_ALL only) | Moving average of the total volume of each candle (section 7). |
| No columns on the left | Bars before Start Calculation: they are not calculated. |
A candle with a delta of exactly zero is drawn flat at zero. The column of the candle that is still forming grows and shrinks with each new trade; it is final when the candle closes.
Colours: in the free version change the two colours (positive, negative) on the Colors tab. In the PRO version the four column colours are inputs (section 9); the channel lines and the volume average are changed on the Colors tab (POSITIVE DEVIATION, NEGATIVE DEVIATION, VOLUME MOV AVG).
4. What the delta shows
4.1 Buy and sell aggression
Every trade of the candle is counted on the side of the participant who attacked the book: a trade that took the offer is buy aggression, a trade that hit the bid is sell aggression. On B3 and CME feeds the side arrives with each trade. The few trades that a feed does not mark clearly (for example some auction or cross trades) are also assigned to a side by the indicator, so every candle shows a complete balance.
4.2 Volume type
| Volume Type | What each trade adds |
|---|---|
| Real volume (default) | its traded volume (contracts or shares) |
| Tick volume | 1 — the indicator counts the number of trades, not the tick volume of the bar |
Delta of the candle = buy aggression − sell aggression of all trades inside the candle.
The trades of each candle are taken from the timeframe of the chart, so the indicator works on any timeframe (M1 to D1). Short timeframes show the alternation of aggression in detail; on H1 and above the deltas of a whole session are summed into few columns.
4.3 Start Calculation
Start Calculation sets the first day whose trades are read. The date is counted back from the last server time and rounded down to 00:00 (server time) of that calendar day; the current day is always included.
| Option | First day calculated | Free | PRO |
|---|---|---|---|
| CURRENT_DAY | today | — | yes |
| LAST_DAY | yesterday (calendar day) | yes (default) | yes |
| LAST_TWODAYS | 2 calendar days back | yes | yes |
| LAST_FOURDAYS | 4 calendar days back | — | yes |
| LAST_WEEK | 7 calendar days back | yes | yes (default) |
| LAST_MONTH | about 30 days back | yes | yes |
| LAST_6MONTHS | about 6 months back | yes | yes |
| LAST_YEAR | about 1 year back | yes | yes |
| LAST_2YEARS | about 2 years back | yes | yes |
| ALL_AVAILABLE_DAYS | all trades the terminal has | yes | yes |
The days are calendar days: on a Monday, LAST_TWODAYS starts on Saturday and therefore shows only Monday. A longer start gives more history but a slower first load and more memory use; the tick history available depends on the broker.
If there is no trade yet between the start date and the current candle (for example CURRENT_DAY in the first candle of the session), the window starts drawing as soon as the first trades arrive; it no longer stays empty until the candle closes.
4.4 While the market is open
New trades are read on every tick and added to the forming candle. Closed candles are not changed afterwards, with one exception in the free version: when a candle closes and its total does not match the real volume reported by the broker, that candle is read again from the tick history once, which can correct it slightly.
5. Reverse bars (PRO)

A reverse bar is a candle where aggression and price disagree:
| Colour (default) | Delta | Price candle | What it shows |
|---|---|---|---|
| Delta Reverse Bar Positive Color (blue) | positive | closed below its open | buyers attacked, but price still fell: the buy aggression was absorbed by passive sellers |
| Delta Reverse Bar Negative Color (magenta) | negative | closed above its open | sellers attacked, but price still rose: the sell aggression was absorbed by passive buyers |
Reverse bars often appear near the end of a move or at a level where large passive orders are resting. They are a description of the candle, not a signal by themselves: read them together with the location of price and the bars that follow. A doji (open = close) is never a reverse bar.
6. Range channel (PRO)

The channel marks how large a delta is compared with the recent deltas. It looks at the size of the delta (regardless of the side) over the last Period bars (default 144) and is drawn as two horizontal lines, symmetrical around zero, over those bars.
| Calculation Type | What the lines show |
|---|---|
| LINEAR_REGRESSION (default) | a range that follows the typical size of the recent deltas |
| STD_DEVIATION | a range based on how much the size of the recent deltas varies |
In both modes the lower line mirrors the upper line. The two modes give channels of different width on the same chart; choose the one that fits your symbol and timeframe.
- A column beyond a line is an unusually strong aggression for the recent rhythm of the symbol.
- The lines are recalculated once per candle, a few ticks after a new candle opens; during the first ticks of a candle the lines are not drawn on it.
- The channel needs Period bars with data since Start Calculation. With a short start on a higher timeframe (for example LAST_DAY on M15) there are not enough bars and no lines are drawn: use a longer start or a smaller Period.
- After a load, only the last Period bars show the lines. While the chart runs, the bars that leave the window keep the level they had, so a stepped trace builds up to their left.
7. Volume moving average and Information to Plot (PRO)
| Information to Plot | What is drawn |
|---|---|
| PLOT_DELTA (default) | delta columns and channel lines |
| PLOT_ALL | delta columns, channel lines and the VOLUME MOV AVG line |
The VOLUME MOV AVG line is a moving average (Method, default SMA; Period, default 20) of the total aggression volume of each candle (buy + sell). The total volume itself is not drawn; it can be read from buffer 19. Because the total volume is always larger than the delta, the line usually stays above the columns, and on very active days it can compress the scale of the window. Alert 5 works only with PLOT_ALL.
8. Alerts (PRO)
The six alerts are checked once per candle, on the third tick after a new candle opens, for the candle that has just closed. No alerts are sent for past candles when the indicator is loaded.
| Input | Fires when (closed candle) | Message |
|---|---|---|
| DELTA Change Trend Color | the delta changes sign: positive after zero or negative, or negative after zero or positive | DELTA Changes to UP Trend! / DELTA Changes to DOWN Trend! |
| DELTA Cross Range Up Line | the delta crosses above the upper channel line | DELTA Crosses UP Range Line! |
| DELTA Cross Range Down Line | the delta crosses below the lower channel line | DELTA Crosses DOWN Range Line! |
| DELTA Cross Defined Range Level | the delta crosses above DELTA Defined Range Level (%) of the upper line, or below the same percentage of the lower line (default 70 %) | DELTA Crosses UP Defined Range Level! / DELTA Crosses DOWN Defined Range Level! |
| VOLUME Cross UP Signal Line | the total aggression volume crosses above its moving average (PLOT_ALL only) | VOLUME Crosses UP Signal Line! |
| DELTA BAR REVERSE Signal | the candle is a reverse bar (section 5) | DELTA Reverse UP Signal! (negative delta, price candle up) / DELTA Reverse DOWN Signal! (positive delta, price candle down) |
Alerts 2 to 5 are crosses: they fire only on the candle where the delta (or the volume) moves beyond the line or level. While the following candles stay beyond it, no new alert is sent; the next alert comes after it returns and crosses again. Alerts 2 to 4 wait until the channel is calculated (section 6): while the channel lines are not drawn, they stay silent.
Each alert can be NONE (off), POPUP, SOUND, NOTIFICATION (smartphone), POPUP_SOUND, NOTIFICATION_SOUND, POPUP_NOTIFICATION or POP_SOUND_NOTIFICATION. All alerts are off by default. Each alert has its own Sound Type, one of the 13 terminal sounds: alert (default), alert2, connect, disconnect, email, expert, news, ok, request, stops, tick, timeout, wait.
The text includes the product, symbol and timeframe, e.g. Delta Aggression PRO: WINZ26 | PERIOD_M5 | DELTA Changes to UP Trend! . After a sound the indicator pauses for about 1.5 seconds so that consecutive sounds do not overlap. Push notifications need the MetaQuotes ID in Tools → Options → Notifications. There is no e-mail option. The free version has no alerts. The Strategy Tester shows no pop-ups, sounds or notifications.
9. Inputs
9.1 Delta Aggression Volume (free)
VOLUME CONFIGURATION
| Input | Default | Description |
|---|---|---|
| Volume Type | Real volume | Real volume: traded volume of each trade; Tick volume: number of trades (4.2). |
CALCULATIONS CONFIGURATION
| Input | Default | Description |
|---|---|---|
| Start Calculation | LAST_DAY | First day calculated (4.3): LAST_DAY, LAST_TWODAYS, LAST_WEEK, LAST_MONTH, LAST_6MONTHS, LAST_YEAR, LAST_2YEARS, ALL_AVAILABLE_DAYS. |
Debug Config
| Input | Default | Description |
|---|---|---|
| Imprime Erros? | false | Writes diagnostic messages to the Experts log. Keep it off. |
9.2 Delta Aggression Volume PRO
VOLUME CONFIG
| Input | Default | Description |
|---|---|---|
| Volume Type | Real volume | Real volume or Tick volume (number of trades) (4.2). |
CALCULATIONS CONFIG
| Input | Default | Description |
|---|---|---|
| Start Calculation | LAST_WEEK | First day calculated (4.3): CURRENT_DAY, LAST_DAY, LAST_TWODAYS, LAST_FOURDAYS, LAST_WEEK, LAST_MONTH, LAST_6MONTHS, LAST_YEAR, LAST_2YEARS, ALL_AVAILABLE_DAYS. |
| Information to Plot | PLOT_DELTA | PLOT_DELTA or PLOT_ALL (section 7). |
CHANNEL RANGE CONFIG
| Input | Default | Description |
|---|---|---|
| Calculation Type | LINEAR_REGRESSION | LINEAR_REGRESSION or STD_DEVIATION (section 6). |
| Period | 144 | Number of bars used by the channel. |
VOLUME MOV AVG CONFIG
| Input | Default | Description |
|---|---|---|
| Method | Simple | Simple, Exponential, Smoothed or Linear weighted. |
| Period | 20 | Period of the volume moving average (PLOT_ALL). |
COLORS CONFIG
| Input | Default | Description |
|---|---|---|
| Delta Positive Color | ForestGreen | Positive delta. |
| Delta Negative Color | FireBrick | Negative delta. |
| Delta Reverse Bar Positive Color | MediumBlue | Positive delta on a bearish price candle (section 5). |
| Delta Reverse Bar Negative Color | Magenta | Negative delta on a bullish price candle. |
ALERT 1 CONFIG to ALERT 6 CONFIG
| Input | Default | Description |
|---|---|---|
| DELTA Change Trend Color | NONE | Alert mode, alert 1 (section 8). |
| DELTA Change Trend Color Sound Type | alert | Sound used by the sound modes. |
| DELTA Cross Range Up Line | NONE | Alert mode, alert 2. |
| DELTA Cross Range Up Line Sound Type | alert | Sound. |
| DELTA Cross Range Down Line | NONE | Alert mode, alert 3. |
| DELTA Cross Range Down Line Sound Type | alert | Sound. |
| DELTA Defined Range Level (%) | 70.0 | Percentage of the channel lines used by alert 4. |
| DELTA Cross Defined Range Level | NONE | Alert mode, alert 4. |
| DELTA Cross Defined Range Level Sound Type | alert | Sound. |
| VOLUME Cross UP Signal Line | NONE | Alert mode, alert 5 (PLOT_ALL only). |
| VOLUME Cross UP Signal Line Sound Type | alert | Sound. |
| DELTA BAR REVERSE Signal | NONE | Alert mode, alert 6. |
| DELTA BAR REVERSE Signal Sound Type | alert | Sound. |
| Enable Debug MODE | false | Writes diagnostic messages to the Experts log. Keep it off. |
10. Buffers for Expert Advisors / dashboards
All buffers of both versions can be read with iCustom + CopyBuffer , including the calculation buffers that are not drawn. Values are in the unit of Volume Type. Bars before Start Calculation hold 0 .
10.1 Delta Aggression Volume (free) — 6 buffers
| Buffer | Content | Values |
|---|---|---|
| 3 | Delta | buy − sell aggression of the candle |
| 4 | Colour | 0 positive (or zero), 1 negative |
| 5 | Delta | same value as buffer 3 |
Buffers 0-2 are the open (always 0), high and low of the drawn column.
10.2 Delta Aggression Volume PRO — 20 buffers
| Buffer | Content | Values | Empty |
|---|---|---|---|
| 3 | Delta | buy − sell aggression of the candle | 0 |
| 4 | Colour | 0 positive, 1 negative, 2 reverse bar with positive delta, 3 reverse bar with negative delta | 0 |
| 5 | Upper channel line | level of the line on the last Period bars | EMPTY_VALUE |
| 6 | Lower channel line | − upper line | EMPTY_VALUE |
| 7 | Volume moving average | moving average of buffer 19 (PLOT_ALL) | EMPTY_VALUE with PLOT_DELTA |
| 11 | Size of the delta | absolute value of buffer 3 | 0 |
| 13 | Alert 1 — delta changes sign | +1 to positive, -1 to negative | 0 |
| 14 | Alert 2 — delta crosses above the upper line | +1 | 0 |
| 15 | Alert 3 — delta crosses below the lower line | -1 | 0 |
| 16 | Alert 4 — delta crosses the defined level | +1 above, -1 below | 0 |
| 17 | Alert 5 — volume crosses above its average | +1 | 0 |
| 18 | Alert 6 — reverse bar | +1 negative delta on a bullish candle, -1 positive delta on a bearish candle | 0 |
| 19 | Total aggression volume | buy + sell aggression of the candle (PLOT_ALL) | EMPTY_VALUE with PLOT_DELTA |
The other buffers (0-2, 8-10 and 12) are for internal use.
Alert buffers. Buffers 13-18 can be read from an Expert Advisor with iCustom and use one sign convention: +1 bullish / buy, -1 bearish / sell, 0 no signal. They are filled even when the alerts are off, on the closed candle (shift 1), a few ticks after the new candle opens. They are written only for candles that close while the indicator is running; read shift 1 after the third tick of the new candle, and do not use them for the history.
Loading. The Market versions are installed in MQL5\Indicators\Market\ ; check the exact file name in the Navigator. With no parameters after the name the default inputs are used. To change inputs, pass them in the order of section 9. Every input group heading is a parameter too: pass an empty string "" in its place, otherwise every following value shifts. Inputs left out at the end keep their defaults. Volume Type is passed as 0 (tick) or 1 (real); the lists in the order shown in section 9 starting at 0 (for example Start Calculation PRO: 0 CURRENT_DAY … 4 LAST_WEEK … 9 ALL_AVAILABLE_DAYS); Method as 0 SMA, 1 EMA, 2 SMMA, 3 LWMA; alert modes as 0 (NONE) to 7 (POP_SOUND_NOTIFICATION) and sounds as 0 (alert) to 12 (wait).
```mql5 // every input group is one "" parameter int h = iCustom(_Symbol, PERIOD_M5, "Market\Delta Aggression Volume PRO", "", 1, // VOLUME CONFIG: Real volume "", 4, 0); // CALCULATIONS CONFIG: LAST_WEEK, PLOT_ALL (needed for buffers 7, 17, 19) if (h == INVALID_HANDLE) return(INIT_FAILED);
double delta[1], up[1], rev[1]; if (BarsCalculated(h) > 0) { if (CopyBuffer(h, 3, 1, 1, delta) == 1 && CopyBuffer(h, 5, 1, 1, up) == 1 && up[0] != EMPTY_VALUE) Print("delta ", delta[0], " upper line ", up[0]); if (CopyBuffer(h, 18, 1, 1, rev) == 1 && rev[0] != 0.0) Print("reverse bar ", (int)rev[0]); } ```
Free version: iCustom(_Symbol, PERIOD_M5, "Market\\Delta Aggression Volume", "", 1, "", 0) (Real volume, LAST_DAY), then buffer 3.
Notes: an indicator created by iCustom sends its own alerts when their modes are not NONE — keep them off in the EA call. Wait until BarsCalculated(h) > 0 before the first read: the first load of the trades can take a while (section 2). On a symbol without trades the handle is valid but the indicator never calculates.
11. Strategy Tester
Both versions can be used in the Strategy Tester (visual and non-visual mode), also from an Expert Advisor through iCustom . The tester does not always provide the same data as the live market, so the values are produced in three ways:
| Situation in the tester | How the delta is obtained |
|---|---|
| Real trade ticks with buy / sell side (B3 or CME symbol, mode Every tick based on real ticks) | as live (section 4.1) |
| Trade ticks without side (for example ticks generated by the tester in Every tick mode) | the side of each trade is estimated from the price movement |
| No trade ticks at all on that day: forex, CFDs, continuous series such as WIN$N, days whose real ticks the tester replaced by generated ones | bid mode: the delta is estimated from the changes of the Bid price, counted like the tick volume of the bar |
| Bars between Start Calculation and the test start (the tester provides no ticks before the start date) | estimated: these bars receive an approximate delta based on the bar itself, so that the history is not empty |
What this means in practice:
- The closest results to the live indicator come from Every tick based on real ticks on a symbol and period with real trades. Check in the tester journal that the real ticks were used for the days you test.
- 1 minute OHLC and Open prices only produce very few ticks per bar: the values are coarse and are not recommended for this indicator.
- In bid mode and on estimated bars the values are an approximation built from price movement, not the aggression of real trades. Their scale is also different (counts of price changes instead of contracts).
- On forex or CFDs the tester shows values (bid mode), but live on the same symbol the indicator shows nothing, because there are no trades. Do not take a tester result on forex as what you will see on a live chart.
- Start Calculation is counted back from the test start date. The estimated bars give the channel (PRO) enough bars to start at the beginning of the test.
- The volume check of the free version (4.4) is off in the tester.
- Pop-ups, sounds and notifications are not sent; buffers 13-18 (PRO) are filled bar by bar during the test.
12. Free vs PRO

| Delta Aggression Volume (free) | Delta Aggression Volume PRO | |
|---|---|---|
| Delta per candle from real trades | yes | yes |
| Volume type: real volume or number of trades | yes | yes |
| Start Calculation options | 8 (default LAST_DAY) | 10, adds CURRENT_DAY and LAST_FOURDAYS (default LAST_WEEK) |
| Reverse bars (blue / magenta) | — | yes |
| Range channel (LINEAR_REGRESSION or STD_DEVIATION) | — | yes |
| Moving average of the total volume | — | yes (PLOT_ALL) |
| Colours as inputs | Colors tab only | 4 column colours |
| Alerts (pop-up, sound, push) | — | 6 |
| Buffers for Expert Advisors | 6 (delta, colour) | 20, including 6 alert buffers |
| Strategy Tester | yes | yes |
The free version is a good way to check that your broker delivers the trades with their side and to learn how the delta reads on your symbol. Move to PRO when you want to see absorption (reverse bars), compare each delta with the recent range, receive alerts or use the values in an Expert Advisor. For the delta accumulated through the day, see the Aggression Wave family by the same author.
13. Tips
- Timeframe: M1 to M15 are the usual timeframes for the delta of B3 mini contracts (WIN, WDO); on CME futures M1-M5 during the regular session.
- Load time: use the shortest Start Calculation that covers what you need. CURRENT_DAY or LAST_DAY load in seconds; months of M1 trades can take minutes.
- Contracts or trades:Real volume shows where the size is; Tick volume (number of trades) shows how many participants attacked, so a few large orders weigh less. Comparing the two on two copies of the indicator helps to spot large players.
- Context first: a strong delta at a support, a resistance or a level of the previous day is more informative than the same delta in the middle of a range.
- Absorption: a reverse bar followed by a candle in the direction of the price (not of the delta) shows that the aggression was absorbed.
- Channel too wide or too narrow: change Period (shorter reacts faster to the rhythm of the day) or switch between LINEAR_REGRESSION and STD_DEVIATION.
- Fewer alerts: on M1 the channel and volume crosses (alerts 2-5) can be frequent; use them on M5 or higher, or rely on alerts 1 and 6.
14. Questions and troubleshooting
- The window is empty. The symbol has no trade ticks with buy / sell side (forex, CFD, crypto, quotes-only feed — section 1), or the tick history is still being downloaded. Check Time & Sales of the symbol and wait for the first load. With CURRENT_DAY in the first candle of the session the window starts drawing as soon as the first trades arrive.
- Does it work on forex? No, not on a live chart: forex feeds have no trades. In the Strategy Tester it shows approximate values (section 11), which do not represent live behaviour.
- Does it repaint? The candle that is forming changes with each trade. Closed candles are not changed afterwards (the free version can correct the last closed candle once if its total did not match the broker volume). The PRO channel is recalculated at each new candle, so its level moves with the last Period bars.
- Does it predict where price will go? No. It shows who was more aggressive in the trades already done. Strong buying can be absorbed and followed by a fall.
- Why are the values different from another order-flow tool? Feeds and tools classify some trades differently (for example auction trades or trades without a clear side). The totals per candle can therefore differ slightly.
- The first load is slow. It reads every trade from the start date (section 2). Use a shorter start or a higher timeframe.
- No channel lines (PRO). There are fewer than Period bars since Start Calculation (section 6).
- The volume average line is missing (PRO). It is drawn only with Information to Plot = PLOT_ALL.
- I get the same alert on many candles (PRO). Since version 5.20 alerts 2-5 fire only on the crossing candle (section 8); update the indicator if you still use an older version. Alert 6 fires on every reverse bar.
- Renko or other custom charts. A custom symbol has trades only if the tool that builds it also creates trade ticks with their side; otherwise the indicator does not calculate on it.
- Strategy Tester. Supported, with the data limits described in section 11.
Support: send a private message on MQL5 to the author.


