In Livermore's trading philosophy, the “path of least resistance” is an enduring description of market behavior. Viewed today, it resembles a dynamical intuition that has yet to be expressed mathematically: prices move in a particular direction because persistent trading pressure exists in that direction, and the market happens to be easier to push that way.

Modern quantitative finance uses a different vocabulary. We discuss order flow, liquidity, conditional variance, and stochastic processes, rarely connecting them to what speculators a century ago called “resistance.” But translating that phrase carefully leads to a very modern question: why is the direction of returns difficult to predict, while volatility is clearly predictable?

Mechanics offers a way to organize the question: first identify the variable that moves, then ask what pressure drives it and how the system responds to that pressure.

1. Price Is the Coordinate; Orders Are the Pressure

Generalized coordinates in Lagrangian mechanics describe a system's independent degrees of freedom. If we study only the price movement of a single asset, the simplest starting point can be just one coordinate. Earnings, valuation, trading volume, and sentiment all change, but they are not the asset's “position” in the market; the central variable that the market continually redetermines is still its price.

Let the price be SS, and take its logarithm:

q=log⁡Sq = \log S

For small changes:

dq≈dSS\mathrm{d}q \approx \frac{\mathrm{d}S}{S}

This is the return. Thus, qq can be viewed as a one-dimensional coordinate for price movement, while the order book, financing conditions, and participant constraints determine how this coordinate moves.

If we followed classical mechanics literally, we might write md2qdt2=Fm\frac{\mathrm{d}^{2}q}{\mathrm{d}t^{2}}=F. But prices have no obvious mechanical inertia: if all directional trading demand suddenly disappears, there is no physical reason why a stock that has just risen must continue to rise.

Momentum in actual markets is more likely to arise from persistence in the mechanisms that generate orders. Institutions may need several days to build a position, trend-following algorithms turn past price changes into new orders, and risk constraints can extend a shock into subsequent trading. At many trading timescales, therefore, price can be likened to an overdamped system, starting with a simpler relationship:

dqdt≈MJ\frac{\mathrm{d}q}{\mathrm{d}t} \approx M J

Here, JJ represents directional order pressure. It is not market-wide “buying minus selling”—every trade naturally has both a buyer and a seller—but which side is actively demanding liquidity. When aggressive buy orders keep consuming the ask side, J>0J>0; when aggressive sell orders keep hitting the bid side, J<0J<0. To describe changes in the entire order book, the definition of pressure must also include the addition and cancellation of limit orders.

MM represents market mobility: how much price responds to a unit of order pressure. In the language of “resistance,” 1/M1/M is an intuitive counterpart. Orders of the same size can travel entirely different distances through different order books.

There is empirical support for this short-term linear response. Cont, Kukanov, and Stoikov's study of order-book events combines additions, cancellations, and trades into order-flow imbalance. They find an approximately linear relationship with short-term price changes, with a response slope that decreases as market depth increases.

2. What Does a 500-Share Order Actually Move?

The official public LOBSTER sample gives this abstract relationship a concrete form. Below are the first five levels of the first order-book snapshot in the NASDAQ AAPL sample for June 21, 2012. Raw prices are stored in units of one ten-thousandth of a dollar and have been converted to dollars according to the official format documentation.

Bid size (shares)Bid price (USD)Book levelAsk price (USD)Ask size (shares)
Ask 5586.9550
Ask 4586.89300
Ask 3586.10200
Ask 2585.98200
Ask 1585.94200
585.33Midprice 585.635585.94
18585.33Bid 1
150585.30Bid 2
5585.10Bid 3
89585.01Bid 4
5584.97Bid 5

Prices decrease from top to bottom; bids sit at the lower left and asks at the upper right, with the midpoint reference centered separately.

There is no “585.635-dollar order” waiting to be filled here. The midprice is simply a reference point between the best bid and best ask; an actual trade must reach one side of the book.

First, hold the book fixed at this snapshot. A 500-share market buy order consumes orders upward, starting at the best ask:

200@585.94  ⟶  200@585.98  ⟶  100@586.10200@585.94 \;\longrightarrow\; 200@585.98 \;\longrightarrow\; 100@586.10

The average execution price is:

PVWAP=∑i=13vipi∑i=13vi=585.988P_{\mathrm{VWAP}} = \frac{\sum_{i=1}^{3} v_i p_i}{\sum_{i=1}^{3} v_i} = 585.988

Here, viv_i is the quantity actually executed at each level and pip_i is the corresponding execution price; prices are in dollars and quantities in shares. The quantities executed at the three levels are 200, 200, and 100 shares.

After execution, the best ask becomes USD 586.10, with 100 shares remaining. If the best bid stays at USD 585.33, the midprice moves from USD 585.635 to USD 585.715. The average execution price, the last execution price, and the change in midprice are three different quantities.

An order does not abstractly change the “current price” by a small amount; it consumes layer after layer of liquidity in an actual order book. If the best ask holds thousands of shares, the entire order may be filled at the first level. If only a few dozen shares are available nearby, it will quickly cross several price levels.

This is the most intuitive meaning of MM: for the same order pressure, a thinner book allows prices to be pushed farther. In real markets, MM is also affected by hidden liquidity, cancellations, market makers' risk budgets, and latent willingness to buy or sell.

3. Where Can Volatility Come From?

A conventional stochastic price model is often written as:

dqt=μt dt+σt dWt\mathrm{d}q_t = \mu_t\,\mathrm{d}t + \sigma_t\,\mathrm{d}W_t

Here, σt\sigma_t is volatility. This expression is useful, but it puts volatility directly into the model. Working backward from market response, we can instead ask: how do orders and liquidity jointly produce uncertainty in prices?

To express market response as a calculable relationship, define the log return over a window beginning at time tt and lasting Δ\Delta:

r(t,Δ)=qt+Δ−qtr(t,\Delta)=q_{t+\Delta}-q_t

Let J(t,Δ)J(t,\Delta) denote the directional order pressure accumulated over the same window, and M(t,Δ)M(t,\Delta) the market's response coefficient. The local linear relationship is:

r(t,Δ)≈M(t,Δ)J(t,Δ)r(t,\Delta)\approx M(t,\Delta)J(t,\Delta)

Next, fix this window and treat the response coefficient MM as given under current information. To keep the derivation clear, temporarily omit (t,Δ)(t,\Delta) and write r≈MJr\approx MJ.

1. Split order pressure into expectation and innovation

Write the information set at time tt as Ft\mathcal F_t. The conditional expectation

Et[J]≡E[J∣Ft]\mathbb E_t[J]\equiv\mathbb E[J\mid\mathcal F_t]

is the probability-weighted average assessment of future order pressure based on current information. Define the difference between actual order pressure and this assessment as the order-flow innovation:

εJ=J−Et[J]\varepsilon_J=J-\mathbb E_t[J]

Order pressure can therefore be written as:

J=Et[J]+εJJ=\mathbb E_t[J]+\varepsilon_J

“Innovation” does not mean that an order must be unusual; it means that it is not yet included in current expectations. By definition, its conditional mean is zero:

Et[εJ]=Et ⁣[J−Et[J]]=Et[J]−Et[J]=0.\begin{aligned} \mathbb E_t[\varepsilon_J] &=\mathbb E_t\!\left[J-\mathbb E_t[J]\right]\\ &=\mathbb E_t[J]-\mathbb E_t[J]\\ &=0. \end{aligned}

The second line holds because, conditional on current information, Et[J]\mathbb E_t[J] is already a fixed number; taking its conditional expectation again gives the same number.

2. Obtain the conditional mean of returns

Substitute the decomposition of order pressure into the price response relationship:

r≈MEt[J]+MεJr\approx M\mathbb E_t[J]+M\varepsilon_J

Take the conditional expectation of both sides. Because MM is treated here as a given response coefficient, it can be taken outside the conditional expectation:

Et[r]≈MEt[J]+MEt[εJ]=MEt[J].\begin{aligned} \mathbb E_t[r] &\approx M\mathbb E_t[J]+M\mathbb E_t[\varepsilon_J]\\ &=M\mathbb E_t[J]. \end{aligned}

Expected order pressure, amplified by the market's response coefficient, thus gives the expected return. Subtracting this conditional mean from the actual return leaves:

r−Et[r]≈MEt[J]+MεJ−MEt[J]=MεJ.\begin{aligned} r-\mathbb E_t[r] &\approx M\mathbb E_t[J]+M\varepsilon_J-M\mathbb E_t[J]\\ &=M\varepsilon_J. \end{aligned}

The deviation of returns from expectations comes from the deviation of order pressure from expectations, amplified by MM.

3. Derive conditional variance from return deviations

Conditional variance measures the size of squared deviations from the conditional mean. By definition:

Var⁡(r∣Ft)=Et ⁣[(r−Et[r])2]\operatorname{Var}(r\mid\mathcal F_t) =\mathbb E_t\!\left[(r-\mathbb E_t[r])^2\right]

Substitute the relationship just obtained, r−Et[r]≈MεJr-\mathbb E_t[r]\approx M\varepsilon_J:

Var⁡(r∣Ft)≈Et ⁣[(MεJ)2]=Et ⁣[M2εJ2]=M2Et[εJ2].\begin{aligned} \operatorname{Var}(r\mid\mathcal F_t) &\approx\mathbb E_t\!\left[(M\varepsilon_J)^2\right]\\ &=\mathbb E_t\!\left[M^2\varepsilon_J^2\right]\\ &=M^2\mathbb E_t[\varepsilon_J^2]. \end{aligned}

M2M^2 appears because variance uses squared deviations: if the same order innovation doubles the deviation in returns, the squared deviation increases fourfold.

Since the conditional mean of the order-flow innovation is zero, its conditional second moment is its conditional variance. It also equals the conditional variance of the original order pressure:

Et[εJ2]=Et ⁣[(J−Et[J])2]=Var⁡(J∣Ft).\begin{aligned} \mathbb E_t[\varepsilon_J^2] &=\mathbb E_t\!\left[(J-\mathbb E_t[J])^2\right]\\ &=\operatorname{Var}(J\mid\mathcal F_t). \end{aligned}

Define the conditional variance of order pressure as:

νJ(t,Δ)≡Var⁡ ⁣(J(t,Δ)∣Ft)\nu_J(t,\Delta) \equiv\operatorname{Var}\!\left(J(t,\Delta)\mid\mathcal F_t\right)

Restoring the full window notation gives:

Var⁡ ⁣(r(t,Δ)∣Ft)≈M(t,Δ)2νJ(t,Δ)\operatorname{Var}\!\left(r(t,\Delta)\mid\mathcal F_t\right) \approx M(t,\Delta)^2\nu_J(t,\Delta)

The more uncertain future order pressure is, the more uncertain returns are; the easier the market is to move with orders, the greater the return variance generated by the same order uncertainty. These two effects multiply in the formula.

4. From window variance to volatility

The expression above gives the return variance over the entire Δ\Delta window. If σt2\sigma_t^2 denotes the average variance rate per unit of time within that window, then:

σt2≡Var⁡(r(t,Δ)∣Ft)Δ≈M(t,Δ)2νJ(t,Δ)Δ\sigma_t^2\equiv\frac{\operatorname{Var}(r(t,\Delta)\mid\mathcal F_t)}{\Delta} \approx\frac{M(t,\Delta)^2\nu_J(t,\Delta)}{\Delta}

Volatility is the square root of the variance rate, so correspondingly:

σt≈∣M(t,Δ)∣νJ(t,Δ)Δ\sigma_t\approx |M(t,\Delta)|\sqrt{\frac{\nu_J(t,\Delta)}{\Delta}}

Time units must remain consistent: if Δ\Delta is measured in years, the result is annualized; if it is measured in trading days, the result is on a per-trading-day basis. The conversion from window variance here gives the average variance rate over that window.

The key to the derivation is treating MM as a given response coefficient under current information, allowing it to be taken outside conditional expectations. To also describe random changes in MM within the window, we would need to calculate the conditional variance of MJMJ further.

This equation offers a mechanism: uncertainty in prices can arise jointly from “how uncertain future orders will be” and “how much the market will amplify those orders.”

Declining depth, market-maker cancellations, or shrinking risk capacity increase MM. Earnings announcements, index rebalancing, institutional portfolio changes, or deleveraging may raise the conditional variance of order-flow innovations. Extreme market moves sometimes occur when both happen at once: order pressure increases while the capacity to absorb it declines.

4. Why Do Market States Have Memory?

If MM and νJ\nu_J persist across future windows, the level of future variance will depend on the state already observed today. Continuing with the approximation above:

Et ⁣[σt+h2]≈Et ⁣[M(t+h,Δ)2 νJ(t+h,Δ)Δ]\mathbb{E}_t\!\left[\sigma_{t+h}^2\right] \approx \mathbb{E}_t\!\left[\frac{M(t+h,\Delta)^2\,\nu_J(t+h,\Delta)}{\Delta}\right]

Order-book depth, financing conditions, and market makers' risk capacity are not randomly regenerated at every instant. A large institutional order does not suddenly vanish at midnight. Trend trading, reallocations after earnings announcements, and deleveraging also unfold over time.

Being in a state where the market is “easy to move” today may therefore itself contain information about tomorrow's volatility. What needs to be predicted is not an isolated σ\sigma, but the state that generates price response and order uncertainty.

Market states also gradually recover. As institutions finish reallocating and disagreements triggered by events are gradually absorbed, the intensity of order-flow innovations declines. As market makers replenish quotes and risk capacity recovers, the market becomes better able to absorb orders. The former reduces νJ\nu_J and the latter reduces MM; both push conditional volatility toward convergence. If deleveraging continues and liquidity remains tight, high volatility will persist or even intensify.

Persistence and convergence are therefore compatible: state adjustments take time, so volatility often remains elevated after a high-volatility period; as shocks gradually fade, the magnitude of fluctuations retreats from extreme levels.

5. Volatility States in SPY Price Data

The historical SPY price file in QSTrader's public repository allows a simple descriptive experiment. The sample runs from January 3, 2000, to January 4, 2016, with 4,026 daily observations. Calculations use adjusted closing prices (Adj Close).

First, sort the data in ascending date order and calculate daily log returns:

rt=log⁡ ⁣(PtadjPt−1adj)r_t = \log\!\left(\frac{P_t^{\mathrm{adj}}}{P_{t-1}^{\mathrm{adj}}}\right)

For every date with enough historical and subsequent observations, calculate the sample standard deviation of the 20 daily returns ending on that date and multiply it by 252\sqrt{252} to obtain annualized realized volatility. Then calculate volatility on the same basis for the next 20 daily returns. The two windows do not overlap within a single observation.

Next, sort the 3,986 valid observations by current 20-day volatility into ten approximately equal-sized groups, from lowest to highest, and examine each group's average volatility over the next 20 days.

100%Open original
Relationship between current and subsequent 20-day average annualized volatility: high volatility remains elevated, while extreme states move inward on average

Figure 1: Each point represents a volatility group. The horizontal axis shows the group's average annualized volatility over the current 20 days; the vertical axis shows its average annualized volatility over the next 20 days. The gray equality line marks “future volatility as high as current volatility”: points above it indicate an average increase, and points below it an average decline. Each group contains 398 or 399 observations, and grouping thresholds use the full sample.

The chart shows two things at once. First, future volatility in the high-volatility group remains clearly higher than in the low-volatility group: approximately 34.6% versus 10.6% at the two extremes, indicating persistence in the state. Second, extreme states move inward in terms of group averages: the highest group falls from current volatility of 41.3% to future volatility of 34.6%, while the lowest rises from 7.1% to 10.6%. What persists overall is the difference between high and low states, which need not preserve their original extreme magnitudes.

Current volatility groupCurrent 20-day averageFuture 20-day average
1 (lowest)7.1%10.6%
28.9%11.3%
310.2%12.8%
411.8%12.4%
513.6%13.9%
615.4%14.8%
717.4%16.9%
820.7%20.4%
925.5%23.9%
10 (highest)41.3%34.6%

The correlation between current and subsequent 20-day volatility is approximately 0.727. Even this simple grouping reveals clear differences in future volatility levels: today's volatility state contains information about future volatility.

6. Direction and Intensity Are Two Different Questions

We usually call this phenomenon volatility clustering and capture it with GARCH, HAR, or other time-series models. These models connect historical volatility to future volatility. The order-flow perspective explains where that memory may come from: the market states that generate volatility themselves have memory.

Directional order pressure depends on the signed conditional mean Et[J]\mathbb{E}_t[J]. Different participants' demands may offset one another, and once directional information is anticipated and reflected in prices, predicting further returns becomes more difficult.

Order-flow intensity, however, is closer to the second moment Et[J2]\mathbb{E}_t[J^2]. Opposite signs do not cancel out as they do in the mean. The second moment is not the same as conditional variance, though; their relationship is:

Var⁡t(J)=Et[J2]−(Et[J])2\operatorname{Var}_t(J) = \mathbb{E}_t[J^2] - \bigl(\mathbb{E}_t[J]\bigr)^2

A large number of orders in opposing directions can leave little net pressure at the end of a window while producing substantial price movement within it. Direction cancels out, but the intensity of trading activity remains.

We may not know whether prices will rise or fall tomorrow, yet still have a chance to judge whether tomorrow's market will be prone to large moves. This is the distinction between conditional mean and conditional variance.

Thus, translating the speculative intuition that “prices move along the path of least resistance” into price coordinates, order pressure, and market response leads to a modern quantitative proposition:

Price direction is usually harder to predict, while persistent market states can make conditional volatility predictable.

The link between them remains that simple question: how far can the same order move prices in today's market?

Data and Methods

  • Order-book source: Official LOBSTER five-level sample, using the first row of the order-book file; the 500-share execution is a static example.
  • Price source: QSTrader SPY.csv, using adjusted closing prices, the sample standard deviation of 20 daily log returns, and the 252\sqrt{252} annualization factor.
  • Mechanism reference: The Price Impact of Order Book Events, supporting the short-term response relationship between order-flow imbalance and market depth.

The equations use a local linear response model within a fixed time window, with MM treated as given. Random changes in future MM and its correlation with order flow are subjects for further modeling. The differential notation expresses smoothed price response; calculations use discrete windows.

The SPY chart uses full-sample grouping, with overlap between adjacent windows, and shows a historical statistical relationship. The average inward movement of extreme groups also includes estimation noise and selection effects; distinguishing these from market recovery mechanisms requires order-flow and liquidity data. Formal predictive evaluation should split training and test samples chronologically.