FLOAT: FX Liquidity Orchestration, Allocation, and Timing

Market Making for Bootstrapping FX Order Books

Market making is a primary source of liquidity in modern financial markets, achieved by continuously posting bid and ask quotes. The core challenge is to earn the bid-ask spread while controlling inventory risk and limiting adverse selection, where informed counterparties trade before adverse price movements and impose losses on passive liquidity. We introduce FLOAT (FX Liquidity Orchestration, Allocation, and Timing), an market-making strategy that distributes liquidity across a discrete ladder of price levels rather than concentrating size at a single quote. FLOAT combines an Avellaneda-Stoikov-inspired inventory control rule with a Rayleigh-shaped liquidity allocation rule, then maps the resulting target profile through tick, lot, and top-of-book constraints to produce a valid live order ladder. The design targets three objectives: reducing inventory variance through adaptive skewing, lowering exposure to toxic flow through both a soft and explicit hard gap near the quoting center, and improving spread capture through structured multi-level placement that remains valid after rounding and passive-safety checks. We provide a mathematical specification, clarify the link between classical optimal control and practical heuristic allocation, and evaluate expected behavior through synthetic market simulations.

Site: ollo.finance
Author: Jared Borders
Date: December 19, 2025

1. Introduction

Before introducing the equations, we build intuition. Market making is simple in form but difficult in practice: the market maker earns a spread only by accepting inventory risk and exposure to better-informed counterparties.

The Market Maker's Dilemma

Imagine operating a currency exchange booth at an international airport. You keep one drawer of US dollars and another of Euros. Travelers arrive throughout the day looking to exchange one currency for the other.

Your profit model is straightforward: buy Euros for slightly less than the "true" exchange rate and sell them for slightly more. The difference, the spread, is your margin. If the true rate is EUR 1 = $1.10, you might buy at $1.09 and sell at $1.11. Each round trip earns $0.02.

The difficulty appears when inventory accumulates. Suppose you have just purchased EUR 50,000 from a departing traveler, then hear breaking news: the European Central Bank is cutting rates, and the Euro is expected to weaken. You are now holding EUR 50,000 in a depreciating currency. The spread you earned on recent trades may not cover the mark-to-market loss.

This is the winner's curse of market making. Whenever someone wants to trade with you, the natural question is: "Why are they willing to trade at this price, and what might they know that I do not?"

Key Insight: A market maker cannot simply quote the fair price. They must adjust quotes based on current inventory and the risk attached to that inventory. The direction is intuitive: if you are holding too much of an asset, make it easier for the market to take that asset from you and harder for the market to sell you more.

From Booth to Algorithm

In modern electronic markets, the currency booth becomes a Limit Order Book (LOB). Instead of quoting prices verbally, participants publish electronic bids and asks at different price levels. The book ranks these orders by price and time priority.

A limit order is a conditional commitment: "I will buy 500 units if the price reaches \(X\)." The market maker is not demanding immediate execution, but offering liquidity. Takers who want immediate execution trade against those resting orders.

FLOAT is a systematic version of this market-making process. It:

  1. adjusts quotes based on inventory risk,
  2. distributes liquidity across multiple price levels,
  3. maintains buffers against stale-quote and adverse-selection risk, and
  4. recomputes orders quickly enough to respond to live market conditions.

Scope and Contribution

This paper presents FLOAT as a methodological proposal: a practical, interpretable adaptation of inventory-aware market-making theory for continuous electronic markets.

Bootstrapping empty order books. FLOAT is designed to seed two-sided liquidity in newly listed or low-activity markets where the limit order book may be sparse or initially empty. The goal is to provide a clean, tradable surface without presenting users with a blank or incoherent book, while still preserving controls on inventory risk, quote validity, and passive execution behavior.

Our primary contributions are:

  1. Continuous-Operation A-S Adaptation: We adapt the finite-horizon Avellaneda-Stoikov reservation-price idea to a continuous-operation setting through an effective risk coefficient.
  2. Rayleigh Liquidity Shaping: We introduce a Rayleigh-shaped depth profile whose boundary condition naturally creates a low-liquidity region near the quoting center.
  3. Validated Discrete Ladder Construction: We define FLOAT as a complete order-generation pipeline, including tick rounding, lot rounding, duplicate-price aggregation, passive-safety checks, and final ladder validation.

Because FLOAT targets sparse and partially formed books, the final posted ladder matters more than the continuous target profile alone. Tick rounding, lot rounding, duplicate-price aggregation, and top-of-book clipping are therefore part of the strategy definition, not secondary exchange-integration details.

2. Related Work

Market making has a long theoretical and empirical literature. FLOAT draws most directly from three areas: classical adverse-selection models, inventory-based market-making models, and empirical limit order book studies.

Classical Market Microstructure

Kyle (1985) introduced a canonical model of informed trading, showing how prices adjust when some traders possess superior information.

Glosten and Milgrom (1985) formalized adverse selection in dealer markets, showing that bid-ask spreads arise partly because market makers must protect themselves against informed flow.

Inventory-Based Models

Ho and Stoll (1981) developed an inventory-control view of market making, showing that optimal dealer quotes depend on current position.

Avellaneda and Stoikov (2008) formalized this idea using stochastic optimal control. Their model derives reservation prices and optimal spreads under assumptions about utility, price dynamics, and order-arrival intensity.

Extensions and Modern Treatments

Guéant, Lehalle, and Tapia (2013) extended the Avellaneda-Stoikov framework to settings where order-arrival intensity depends on quoted spread. Their results clarify how inventory control and spread placement can be treated as related but separable mechanisms.

Cartea, Jaimungal, and Penalva (2015) provide a broader treatment of algorithmic trading, including infinite-horizon market-making models that inform FLOAT's continuous-operation framing.

Practical Implementation

Gould et al. (2013) survey empirical limit order book dynamics and microstructure regularities relevant to practical quoting systems. FLOAT builds on this foundation by proposing a specific depth-shaping mechanism, a Rayleigh-shaped allocation profile, and by defining how that profile is mapped into a discrete, validated live order ladder.

3. The Avellaneda-Stoikov Framework

The Core Question

Avellaneda and Stoikov frame market making around a simple question: "At what price am I indifferent to buying or selling one more unit?"

With zero inventory, the indifference price is close to the fair value \(p^*\). The market maker has no directional pressure.

With inventory, that changes. A long position creates downside exposure. If prices fall, the inventory loses value. A rational market maker should therefore become:

  • more eager to sell, by lowering asks to encourage buyers, and
  • less eager to buy, by lowering bids to avoid adding more inventory.

The price that reflects this inventory-adjusted indifference is the reservation price.

Classical Formulation

Through stochastic optimal control with exponential utility, Avellaneda and Stoikov derive:

$$r(t) = p^*(t) - q(t) \cdot \gamma \cdot \sigma^2 \cdot (T - t)$$

where:

  • \(p^*(t)\): Current fair value (mid-price)
  • \(q(t)\): Current inventory (positive = long, negative = short)
  • \(\gamma\): Risk aversion parameter
  • \(\sigma^2\): Market variance
  • \((T-t)\): Time remaining until horizon

Continuous Operation and Effective Horizon

The classical model assumes a finite liquidation horizon \(T\). This is natural for strategies that explicitly unwind inventory by a known deadline. FLOAT instead targets continuous markets, such as cryptocurrency and FX, where there may be no natural terminal time.

To retain the meaning of the classical expression, we replace \((T-t)\) with an effective risk horizon \(\tau > 0\): a characteristic time scale over which inventory is expected to be managed through re-centering, hedging, or risk resets. This yields:

$$r(t) = p^*(t) - q(t) \cdot \gamma \cdot \sigma^2 \cdot \tau$$

In implementation, \(\gamma\) and \(\tau\) are not separately identifiable from fills alone, so we absorb \(\tau\) into a single calibrated coefficient. By abuse of notation, we continue to write this effective coefficient as \(\gamma\) (see Cartea et al. 2015, Ch. 10). In live systems, this effective skew term must also be bounded. Otherwise, raw inventory, estimated variance, and unit conventions can combine to move the quoting center farther than is useful.

$$\boxed{r(t) = p^*(t) - q(t) \cdot \gamma \cdot \sigma^2}$$

For production deployments, the reservation-price shift should be computed from normalized inventory and clipped to a maximum operational displacement. One practical form is:

$$q_{\text{norm}} = \frac{q}{q_{\text{target}}}$$
$$r(t) = p^*(t) - \operatorname{clip}\left(q_{\text{norm}} \cdot \gamma \cdot \sigma_t^2,\; -\Delta_r^{\max},\; \Delta_r^{\max}\right)$$

where \(q_{\text{target}}\) is a market-specific inventory scale and \(\Delta_r^{\max}\) is a configured maximum center displacement, typically tied to spread, quote range, or both. This preserves the direction of the Avellaneda-Stoikov skew while preventing pathological center movement. Pseudocode

Interpretation: The reservation price shifts the quoting center away from inventory risk. The term \(q \cdot \gamma \cdot \sigma^2\) measures how strongly inventory should affect price: it scales with position size (\(q\)), risk aversion (\(\gamma\)), and estimated market turbulence (\(\sigma^2\)). When the agent is long, the skew term is positive, so the reservation price moves down. This makes selling easier and buying less attractive. When the agent is short, the skew term is negative, so the reservation price moves up. In both cases, the market maker leans away from accumulated risk.

Interpreting the Formula

We can verify the direction of the skew with a simple example:

Worked Example: Reservation Price Calculation

Given State:

  • Oracle (fair) price: \(p^* = \$100.00\)
  • Current inventory: \(q = +1{,}000\) units (long position)
  • Risk coefficient: \(\gamma = 0.001\)
  • Market variance: \(\sigma^2 = 0.04\) (20% annualized volatility, squared)

Calculation:

$$r = \underbrace{100.00}_{p^*} - \underbrace{(1000)}_{q} \times \underbrace{(0.001)}_{\gamma} \times \underbrace{(0.04)}_{\sigma^2} = 100.00 - 0.04 = \$99.96$$

Result: The reservation price shifts 4 cents below the oracle price.

Effect on Quotes:

  • Bid (buy) prices shift down → Less attractive to sellers → Discourages adding to long position
  • Ask (sell) prices shift down → More attractive to buyers → Encourages inventory reduction

Over many trades, this systematic skew encourages inventory to move back toward zero.

Key insight: The minus sign is essential. Positive inventory lowers the reservation price, which lowers both bids and asks. The lower ask encourages buyers to take inventory from the agent, while the lower bid discourages further accumulation.

4. Rayleigh-Distributed Order Sizing

We have defined where to center the quote distribution. We now define how to distribute liquidity around that center.

The Problem with Naive Approaches

The simplest strategy places all liquidity at a single bid-ask pair. That is easy to reason about, but fragile:

  1. Concentration risk: All quoted capital sits at one price.
  2. Stale-quote vulnerability: If the fair value moves before orders are refreshed, the entire quote can be picked off at once.

A uniform ladder has the opposite problem. It spreads capital across many prices, but allocates the same size to levels with very different execution probabilities.

FLOAT uses a shaped distribution instead. The target profile should provide:

  • low liquidity near the center, where stale-quote and adverse-selection risk are highest,
  • more liquidity at moderate distances, where spread capture is more attractive, and
  • less liquidity at extreme distances, where fill probability is low.

Why Rayleigh? A Principled Selection

The key property of the Rayleigh distribution is its boundary condition: \(f(0)=0\).

Distribution At Origin Implication
Gaussian Maximum Most liquidity where adverse selection risk is highest
Exponential Maximum Significant mass in the "danger zone"
Rayleigh Zero Natural soft gap providing inherent protection

Table 1: Comparison of distribution behaviors at the origin.

The Rayleigh distribution starts at zero, rises to a peak at distance \(s\), and then decays. This gives FLOAT a natural low-liquidity region near the reservation price while still concentrating size in a useful band away from the center.

Mathematical Formulation

The Rayleigh probability density function is:

$$f(x; s) = \frac{x}{s^2} \cdot e^{-\frac{x^2}{2s^2}}, \quad \text{for } x \geq 0$$

where \(s\) is a scale parameter controlling distribution breadth.

Interpretation: The Rayleigh formula combines a linear term and an exponential decay term. The linear term increases with distance, so liquidity initially rises as prices move away from the center. The exponential term eventually dominates, so liquidity tapers at far distances. The result is a hump-shaped profile: zero at the center, highest around \(x=s\), and declining beyond that point.

Properties relevant to our application:

  • Mode (peak): \(s\)
  • Mean: \(s\sqrt{\pi/2} \approx 1.253s\)
  • \(f(0) = 0\): Zero liquidity at center
  • Light tail: Capital-efficient decay at extremes

Mapping to Discrete Order Sizes

The Rayleigh distribution gives a continuous target shape, but venues require discrete prices and sizes. FLOAT therefore uses the Rayleigh density as an unnormalized weighting function, then normalizes those weights to a fixed quoting budget.

Let \(d = |p - r|\) be distance from the reservation price. With a hard gap \(x_{gap}\), define:

$$d' = \max(0, d - x_{gap})$$

Define the Rayleigh-shaped weight:

$$w(d') = \frac{d'}{s^2}\cdot e^{-\frac{{d'}^2}{2s^2}}$$

Let \(K\) be the total base-asset quantity the strategy is willing to quote across both sides on each refresh. We split it evenly by default:

$$K_{\text{bid}} = K_{\text{ask}} = \frac{K}{2}$$

Given a discrete set of \(N\) bid levels and \(N\) ask levels at distances \(\{d_i\}\) from \(r\), the allocated size at each level is:

$$v_i^{\text{bid}} = K_{\text{bid}}\cdot \frac{w(d_i')}{\sum_{j=1}^{N} w(d_j')}, \qquad v_i^{\text{ask}} = K_{\text{ask}}\cdot \frac{w(d_i')}{\sum_{j=1}^{N} w(d_j')}$$

This guarantees bounded target size, targeting \(K/2\) per side before rounding, clipping, aggregation, and lot constraints, while preserving the intended Rayleigh shape at the allocation stage. Tick Ladder Rayleigh Weights

The Hard Gap Enhancement and Spread Safety

Beyond Rayleigh's natural soft gap, FLOAT imposes an explicit hard gap \(x_{gap}\): no orders are placed within \(|p-r| \le x_{gap}\). In implementation, this is a target no-quote radius before discretization. The effective live gap may be wider after tick selection and rounding.

The hard gap provides three protections:

  1. Noise protection: small fair-value movements should not immediately trigger fills,
  2. Latency protection: the agent gets more room to refresh quotes before stale orders become attractive, and
  3. Internal spread protection: after rounding, the agent's own best bid should remain below its own best ask.

When the venue publishes a best bid \(b_t\) and best ask \(a_t\), FLOAT also enforces a passive quoting policy. At minimum, it drops or clips any bid that would lock or cross \(a_t\), and any ask that would lock or cross \(b_t\). In production, this rule should usually be stricter: it should require a configurable passive margin from the opposing top of book, define behavior for stale or missing BBO data, and specify how the strategy seeds quotes when one or both sides of the book are empty.

A practical passive-safety condition is:

$$a_t - p_i^{\text{bid}} \ge n_{\text{safe}}\delta_p \qquad \text{and} \qquad p_i^{\text{ask}} - b_t \ge n_{\text{safe}}\delta_p$$

for a configured integer \(n_{\text{safe}} \ge 1\). This condition is stricter than non-crossing alone. It reduces accidental near-touch exposure caused by rounding, stale book data, or fast fair-value movement.

Worked Example: EUR/USD Discrete Size Allocation

Context: Consider EUR/USD where price is USD per EUR and 1 pip = 0.0001 USD per EUR.

Given Parameters:

  • Reservation price: \(r = 0.9970\)
  • Hard gap: \(x_{gap} = 0.0004\) (4 pips)
  • Scale parameter: \(s = 0.0005\)
  • Total quote budget: \(K = 100{,}000\) EUR (so \(K_{\text{bid}}=K_{\text{ask}}=50{,}000\) EUR)

Compute the weight at price \(p = 0.9960\) (10 pips below reservation):

Step 1: Distances

$$d = |0.9960 - 0.9970| = 0.0010, \qquad d' = 0.0010 - 0.0004 = 0.0006$$

Step 2: Weight (Rayleigh-shaped)

$$w(d') = \frac{0.0006}{0.0005^2} \cdot e^{\frac{-0.0006^2}{2 \times 0.0005^2}}\approx 1168.2$$

Step 3: Normalize across the \(N\) bid levels

$$v = K_{\text{bid}}\cdot \frac{w(d')}{\sum_{j=1}^{N} w(d_j')} \approx 50{,}000\cdot \frac{1168.2}{6044.3} = \textbf{9,664 EUR}$$

Inside gap: At \(p = 0.9968\) (2 pips below reservation),

$$d = 0.0002 < x_{gap} \implies d' = 0 \implies v = 0$$

Normalization keeps target size bounded, while the gap protects the area near \(r\). The final posted size may differ slightly after rounding, clipping, aggregation, and validation.

5. Problem Formulation

We now formalize FLOAT as a state-to-orders mapping.

Market Environment

FLOAT operates in a Continuous Double Auction (CDA) with two primary data streams:

Oracle Feed: A high-frequency fair-value signal \(p^*(t)\), such as:

  • an external price from a more liquid venue,
  • a composite index across venues, or
  • a model-derived fair-value estimate.

Exchange Feed: Venue data and execution state, including:

  • current inventory \(q(t)\),
  • order book state, including best bid \(b_t\) and best ask \(a_t\) when available, and
  • execution confirmations.

Volatility Estimation

FLOAT estimates volatility using an Exponentially Weighted Moving Average (EWMA) of squared log-returns, a common approach in risk management and trading systems (Hull 2018):

$$\sigma_t^2 = \lambda \cdot \sigma_{t-1}^2 + (1 - \lambda) \cdot \ell_t^2, \qquad \ell_t = \ln\left(\frac{p_t}{p_{t-1}}\right)$$

Rather than choosing \(\lambda\) directly, it is often clearer to choose an EWMA half-life \(h\). For exposition and simulation, \(h\) can be measured in update steps. For production systems, a time-based half-life is preferable because oracle update cadence may change.

$$\lambda = 0.5^{1/h}$$

If updates arrive every \(\Delta t\) seconds, the step-based half-life corresponds to \(h\Delta t\) seconds. Smaller \(h\) reacts faster but is noisier. Larger \(h\) is smoother but slower to adapt. The right setting depends on oracle cadence, market volatility, and the liquidity regime being bootstrapped.

A time-based implementation can be written as:

$$\lambda_t = \exp\left(-\ln(2)\frac{\Delta t}{h_{\text{time}}}\right)$$

where \(\Delta t\) is elapsed time since the previous oracle observation and \(h_{\text{time}}\) is the desired EWMA half-life in time units.

In production, the estimated variance should also be bounded:

$$\sigma_t^2 \leftarrow \operatorname{clip}(\sigma_t^2,\; \sigma_{\min}^2,\; \sigma_{\max}^2)$$

This prevents the quoting logic from becoming too aggressive when measured volatility collapses, or too defensive when a short-lived volatility spike occurs.

Interpretation: EWMA blends the previous variance estimate with the newest squared return. The half-life \(h\) makes responsiveness explicit: a return observed \(h\) updates ago has half the weight of the current return, while a return observed \(2h\) updates ago has one quarter of the weight. This captures volatility clustering observed in real markets (Gould et al. 2013): large moves tend to raise the estimate quickly, while quiet periods reduce it gradually. Since the reservation-price skew depends on \(\sigma^2\), FLOAT becomes more defensive when estimated turbulence rises.

Implementations should document whether each downstream control uses variance or standard deviation, and coefficients should be calibrated accordingly. Pseudocode

Agent Definition

We define the FLOAT agent \(\alpha\) as a mapping from market state to validated orders:

$$\alpha: \mathbf{S}_t \rightarrow \mathcal{O}_t$$

State vector:

$$\mathbf{S}_t = \{p^*_t, q_t, \sigma_t, b_t, a_t, \Theta\}$$

where \(\Theta = \{\gamma, q_{\text{target}}, \Delta_r^{\max}, x_{gap}, s, K, N, \Delta_{\max}, \delta_p, \delta_v, h, \sigma_{\min}^2, \sigma_{\max}^2, n_{\text{safe}}, v_{\max}^{\text{level}}\}\) is the parameter set.

Output: The agent produces two validated sets of limit orders, bids and asks, after distance selection, sizing, rounding, aggregation, passive-safety checks, and final validation:

$$\mathcal{O}_t = \{\text{Bids}\} \cup \{\text{Asks}\}$$

Each order is a price-size pair \((p_i, v_i)\) where \(p_i\) is the limit price and \(v_i\) is the order quantity.

In engineering terms, \(\mathcal{O}_t\) is the final admissible order set. It is not the pre-rounded continuous target profile.

Success Criteria

FLOAT is evaluated along three dimensions.

Criterion 1: Inventory Mean Reversion. Over time, the agent's position should remain centered around zero rather than drifting into persistent directional exposure:

$$\lim_{T \to \infty} \frac{1}{T}\int_0^T q(t) \, dt \approx 0$$

Criterion 2: Positive Expectancy. Spread capture should exceed expected losses from adverse selection and inventory management:

$$\mathbb{E}[\text{Spread Capture}] > \mathbb{E}[\text{Adverse Selection Loss}]$$

Criterion 3: Bounded Risk. Inventory variance should remain within configured risk limits:

$$\text{Var}[q(t)] < V_{max}$$

6. FLOAT Specification

Concepts

FLOAT treats market making as the projection of a dynamic liquidity cloud around a reservation price. The reservation price is anchored to the external oracle, then shifted by inventory pressure.

The analogy is a vessel moored in a current. The oracle provides the anchor, while inventory pressure pulls the quoting distribution away from accumulated risk. A long position shifts the reservation price downward, making sells easier and buys less attractive. A short position shifts the reservation price upward, making buys easier and sells less attractive. This adaptive skew keeps the agent connected to fair value while encouraging inventory to mean-revert.

Symbol Definitions

Base and quote convention. We write prices in quote currency per 1 unit of base currency. For example, in EUR/USD the base asset is EUR and the quote asset is USD, so \(p=1.1000\) means 1 EUR costs 1.10 USD. In this convention, 1 pip for EUR/USD is 0.0001 USD per EUR.

Symbol Name Unit Description
\(p^*\) Oracle Price Quote/Base Exogenous fair value signal
\(q\) Inventory Base units Net position, positive long and negative short
\(\sigma^2\) Variance Estimate Scalar EWMA variance used by reservation-price logic
\(\gamma\) Risk Coefficient Scalar Skew coefficient absorbing effective horizon
\(q_{\text{target}}\) Inventory Target Base units Inventory normalization scale
\(\Delta_r^{\max}\) Max Reservation Shift Quote/Base Maximum allowed center displacement
\(r\) Reservation Price Quote/Base Center of liquidity cloud
\(x_{gap}\) Gap Width Quote/Base Hard no-quote zone radius
\(s\) Scale Width Quote/Base Rayleigh scale parameter
\(K\) Quote Budget Base units Total base quantity allocated across both sides
\(N\) Levels per Side Scalar Max bid levels and ask levels
\(\Delta_{\max}\) Quote Half-Range Quote/Base Max distance from \(r\) for quoting
\(\delta_p\) Tick Size Quote/Base Minimum price increment
\(\delta_v\) Lot Size Base units Minimum size increment
\(h\) EWMA Half-Life Updates EWMA half-life in update steps
\(n_{\text{safe}}\) Passive Safety Ticks Ticks Minimum passive distance from opposing top of book
\(v_{\max}^{\text{level}}\) Max Size per Level Base units Maximum aggregated size allowed at a single price

Table 2: Symbol definitions for FLOAT.

Market Incentivization by Example

Inventory Scenario A: Long Position

Given: \(q = +5000\) units

The agent has accumulated inventory and faces downside risk.

  • Reservation price: shifts DOWN below oracle
  • Bid prices: Drop → Less attractive to sellers → avoid adding more
  • Ask prices: Drop → More attractive to buyers → encourage taking inventory

Effect: Market participants are incentivized to buy from the agent, reducing long exposure.

Inventory Scenario B: Short Position

Given: \(q = -5000\) units

The agent is short and faces upside risk.

  • Reservation price: shifts UP above oracle
  • Bid prices: Rise → More attractive to sellers → encourage selling to us
  • Ask prices: Rise → Less attractive to buyers → avoid adding more short

Effect: Market participants are incentivized to sell to the agent, reducing short exposure.

Inventory Scenario C: Neutral

Given: \(q \approx 0\)

Inventory pressure is small, so quoting remains balanced.

  • Reservation price: close to oracle price
  • Liquidity: symmetric on both sides

Effect: The agent captures spread from both directions without strong inventory bias.

In this sense, the market itself becomes part of the inventory-control mechanism.

Reference Configuration

Parameter Value Rationale
\(N\) 10 Bootstrap-friendly: at most 10 bids and 10 asks
\(\Delta_{\max}\) 0.0020 (20 pips) Visible depth around \(r\) for an initially empty book
\(x_{gap}\) 0.0004 (4 pips) Buffer near \(r\), tuned per market
\(s\) 0.0005 (5 pips) Places liquidity peak just outside the gap
\(\gamma\) \(4 \times 10^{-4}\) Effective skewing under inventory stress
\(q_{\text{target}}\) 100,000 Inventory normalization scale
\(\Delta_r^{\max}\) 0.0010 (10 pips) Maximum reservation-price displacement
\(K\) 100,000 Total base units posted per refresh
\(\delta_p\) 0.0001 (1 pip) Example tick size, EUR/USD-like
\(\delta_v\) 1 Example lot size
\(h\) 20 updates (\(\lambda \approx 0.966\)) EWMA half-life
\(n_{\text{safe}}\) 1 tick Minimum passive margin from opposing top of book
\(v_{\max}^{\text{level}}\) 20,000 Aggregated per-price size cap

Table 3: Reference configuration parameters, illustrative only.

The reference configuration is illustrative, not self-validating. Before deployment, configuration should satisfy at least the following invariants:

  • \(x_{gap} < \Delta_{\max}\),
  • enough unique tick levels exist between \(x_{gap}\) and \(\Delta_{\max}\) to support the requested number of levels per side,
  • the Rayleigh scale \(s\) places substantial mass inside the usable quote range,
  • expected post-rounding per-level sizes remain above the minimum tradable size, and
  • maximum reservation-price shift does not move the quoting center outside the usable quote region.

Algorithm Specification

Algorithm: FLOAT Order Generation, Discrete and Normalized

Require: Oracle price \(p^*\), inventory \(q\), best bid/ask \((b_t, a_t)\) (optional), parameters \(\Theta\)

Ensure: Final bid orders, final ask orders

  1. Estimate Volatility
  2. Compute Reservation Price
  3. Generate Discrete Distance Ladder
  4. Compute Rayleigh Weights
  5. Normalize Target Sizes to Budget
  6. Construct Candidate Orders Around \(r\)
  7. Apply Tick and Lot Rounding
  8. Apply Top-of-Book and Passive-Safety Rules
  9. Aggregate Duplicate Price Levels
  10. Optionally Re-normalize Residual Size
  11. Validate Final Ladder Shape
  12. Return Final Bids, Final Asks

Final Ladder Validation

Because the final posted ladder is produced only after rounding, passive-safety checks, and aggregation, FLOAT should validate the resulting book before publishing orders.

A production implementation should verify that:

  • each side has an acceptable minimum number of live levels, unless inventory controls intentionally suppress one side,
  • total posted size remains within tolerance of the intended side budget,
  • the first live quote on each side is outside the protected region and inside the usable quote range,
  • no individual price level exceeds the configured size cap after aggregation, and
  • the final bid and ask ladders are internally ordered and externally passive.

If validation fails, the system should rebuild the ladder using fallback rules or cancel quoting for that refresh cycle.

7. Operational Considerations

Computational Performance

FLOAT is designed to be inexpensive to compute. The core order-generation path is \(O(N)\) per refresh, where \(N\) is the number of levels per side. In bootstrap settings, where \(N \le 10\) is typical, the math itself should be comfortably sub-millisecond on modern hardware. Actual end-to-end latency depends on runtime, hardware, serialization, risk checks, networking, and exchange I/O.

Operation Complexity Typical scale, illustrative
Volatility update \(O(1)\) tens of ns to a few μs
Reservation calculation \(O(1)\) tens of ns to a few μs
Weights + normalization \(O(N)\) μs to hundreds of μs
Rounding + safety checks \(O(N)\) μs to hundreds of μs
Aggregation + validation \(O(N)\) μs to hundreds of μs
Total, bootstrap \(N \le 10\) \(O(N)\) typically < 1 ms

Table 4: Computational performance, order-of-magnitude and implementation-dependent.

Implementation Expected latency tier Notes
Python + NumPy sub-ms to a few ms Good for iteration; overhead dominated by glue code
Go tens to hundreds of μs Good systems integration; watch allocations
OCaml, native tens to hundreds of μs Strong correctness story; tune GC and allocation
Rust single-digit to tens of μs Best-case low latency; more engineering effort

Table 5: Illustrative latency projections by language, core math only.

Why Sub-Millisecond Matters: In electronic markets, price updates can arrive every few milliseconds. If quote generation lags behind fair-value updates, the strategy increases stale-quote and adverse-selection risk. Keeping refresh latency below the update cadence helps ensure that resting orders remain aligned with the current market state.

Fail-Safe Mechanisms

FLOAT should be deployed with explicit operational guardrails.

Mechanism Purpose Behavior
Hard Gap Reduce near-center toxicity No orders within \(|p-r|\le x_{gap}\)
Passive Quote Safety Avoid locking or crossing Drop or clip orders that violate configured passive distance from opposing top of book
Inventory Limits Prevent runaway exposure Cancel or flatten if \(|q| > q_{max}\)
Staleness Detection Handle oracle failures Cancel orders if feed is silent
Size Caps Prevent concentration Enforce max per-order or per-level size

Table 6: Fail-safe mechanisms.

Implementations should also monitor post-build ladder quality, including:

  • unique live levels per side,
  • effective first-quote distance,
  • total posted size versus target budget,
  • number of levels removed by passive-safety checks, and
  • aggregate size concentration at individual prices.

These diagnostics are important because the live ladder can diverge materially from the continuous target profile after rounding, clipping, aggregation, and validation.

8. Expected Behavior and Simulation

This section describes the synthetic market framework and the qualitative behavior expected from FLOAT under different regimes.

Synthetic Market Generator

To evaluate FLOAT without risking capital, we use a synthetic price process that captures basic properties of short-horizon market behavior. The oracle price follows an Ornstein-Uhlenbeck process (Hull 2018), which is a mean-reverting stochastic differential equation:

$$dp^* = \theta(\mu - p^*)\,dt + \sigma_t\,dW_t$$

Here, \(\theta\) controls the speed of mean reversion, \(\mu\) is the long-run equilibrium price, and \(dW_t\) is a Wiener shock. The process produces price paths that wander locally while tending to return toward \(\mu\).

To capture volatility clustering, the tendency for large moves to cluster near other large moves, we allow variance to evolve stochastically. One simple choice is a mean-reverting stochastic variance process (Hull 2018; Cartea et al. 2015):

$$d\sigma_t^2 = \kappa(\bar{\sigma}^2 - \sigma_t^2)\,dt + \xi\sigma_t\,dZ_t$$

The parameter \(\kappa\) controls how quickly variance reverts to its long-run mean \(\bar{\sigma}^2\), while \(\xi\) controls volatility-of-volatility. This two-factor setup produces regimes ranging from quiet consolidation to high-volatility turbulence.

Evaluation Metrics

FLOAT is evaluated across four dimensions:

Metric Definition Target
Inventory Mean \(\frac{1}{T}\int_0^T q(t)\,dt\) \(\approx 0\)
Inventory Std \(\sqrt{\text{Var}[q(t)]}\) Bounded
Sharpe Ratio \(\mathbb{E}[\text{PnL}]/\text{Std}[\text{PnL}]\) > 1.0
Fill Rate Executions / Quotes Stable

Table 7: Evaluation metrics and targets.

A near-zero Inventory Mean indicates that skewing is preventing persistent directional drift. A bounded Inventory Standard Deviation indicates that position size remains within risk limits. The Sharpe Ratio measures risk-adjusted profitability. A stable Fill Rate indicates that the agent is participating consistently without relying on stale or overly aggressive quotes.

Expected Qualitative Behavior

Ranging Markets. In range-bound markets, FLOAT operates in its most favorable setting. Prices oscillate through the quoted regions, allowing the agent to capture spread on both sides. Inventory skew helps correct temporary position drift, keeping average inventory near zero.

Trending Markets. Sustained trends create the classic market-making problem: the agent tends to accumulate inventory against the move. FLOAT responds by shifting the reservation price away from the accumulated exposure. For example, if the agent becomes long during a downtrend, the reservation price moves lower, making asks more attractive and bids less attractive.

High Volatility Regimes. When turbulence rises, the EWMA variance estimate increases. Since the skew term depends on estimated variance, the reservation price moves more aggressively for a given inventory level. In production, this response should be bounded by variance floors and caps, reservation-shift caps, and stricter passive-safety margins. Without these controls, volatility spikes can cause the strategy either to overreact or to withdraw from useful quoting ranges.

9. Limitations and Future Work

Model Assumptions

FLOAT relies on simplifying assumptions that may not hold in all market conditions. These assumptions are useful for specification and simulation, but they should not be mistaken for complete market realism.

Price Dynamics. The Avellaneda-Stoikov framework assumes smooth stochastic price dynamics, often represented with Brownian-motion-based models (Hull 2018). Real markets exhibit fat tails, jumps, flash crashes, and news-driven discontinuities. During such events, smooth skewing may respond too slowly. Production deployments should include circuit breakers and stale-data controls.

Order Arrival Process. The theoretical foundation assumes market orders arrive according to a Poisson process. Real order flow is clustered, strategic, and often self-exciting. Bursts of executions can accumulate inventory faster than the skewing mechanism can respond. More realistic models could incorporate Hawkes processes or other self-exciting point processes.

Market Impact. FLOAT assumes that its orders do not materially move the underlying price. In illiquid markets or when quote sizes are large relative to available depth, this assumption can fail. The agent's own liquidity can influence participant behavior and price formation. Position limits, size caps, and conservative budgets help, but a complete treatment would require explicit market-impact modeling.

Parameter Sensitivity

FLOAT's performance depends heavily on parameter calibration. The risk coefficient \(\gamma\) controls the strength of inventory skew. If it is too low, inventory can accumulate dangerously. If it is too high, the strategy may quote so defensively that fills become rare. Calibration should therefore be based on backtests, simulations, and live telemetry across multiple market regimes.

The gap width \(x_{gap}\) trades off protection against execution probability. A wide gap reduces stale-fill and adverse-selection risk but can miss useful trading opportunities. A narrow gap increases participation but exposes the agent to near-center toxicity. In practice, the configured gap should be treated as a pre-rounding target. The economically relevant quantity is the effective live gap after tick selection, rounding, passive-safety checks, and validation.

Rounding behavior is also parameter-sensitive. A configuration that looks reasonable in continuous price space can produce a concentrated or undersized live ladder once mapped onto a discrete tick grid. This is especially important in coarse-tick markets or when the quote range is narrow relative to the number of requested levels.

Future Directions

Adaptive Parameters. Instead of fixed configuration, FLOAT could adjust \(\gamma\), \(s\), and \(x_{gap}\) based on realized fills, inventory behavior, volatility, and adverse-selection signals. Bayesian optimization or reinforcement learning could be used to discover parameter schedules, though any adaptive system should remain bounded by explicit risk controls.

Order Flow Signals. The current design reacts primarily to price, inventory, and top-of-book state. Incorporating order book imbalance, trade-flow toxicity metrics, or cross-venue signals could improve quote shading and reduce adverse-selection exposure.

Multi-Asset Extension. FLOAT currently manages a single instrument. A portfolio-level version could account for correlations across assets, allowing cross-hedging and more efficient capital use. This would require modeling return covariance and solving a higher-dimensional inventory-control problem.

Learned Liquidity Shapes. Rayleigh shaping is interpretable and easy to validate, but it may not be optimal for every venue or market regime. Future work could learn alternative depth profiles from data while preserving hard constraints on inventory, quote validity, and passive execution.

10. Conclusion

This paper introduced FLOAT, a market-making service designed to provide stable two-sided liquidity in electronic limit order books, with particular emphasis on bootstrapping newly launched or low-activity markets. In these environments, the immediate goal is not to outcompete mature market makers. It is to avoid the poor user experience of an empty book by posting a small, legible ladder of bids and asks that early participants can trade against.

FLOAT combines two ideas. First, it uses an inventory-aware reservation price inspired by Avellaneda-Stoikov, adapted to continuous operation through an effective risk coefficient. This moves the quoting center away from inventory risk in a predictable way. Second, it shapes depth using a Rayleigh-profile weighting function and normalizes the resulting weights into a bounded quote budget across discrete price levels.

The main implementation lesson is simple: the continuous target profile is only a starting point. The live strategy is the validated ladder after tick rounding, lot rounding, passive-safety checks, duplicate-level aggregation, size caps, and final validation. These discrete execution details are central to making FLOAT operationally credible.

FLOAT is intended to remain simple to reason about. The hard gap defines a protected no-quote region, conservative rounding maps candidate orders onto venue-valid increments, aggregation and post-rounding checks preserve ladder quality, and passive-safety rules prevent locking, crossing, or unsafe near-touch quoting. Together, these mechanisms aim to reduce stale-quote risk, keep inventory behavior bounded, and maintain a clean quoting surface even when the surrounding market is thin, partially formed, or empty.

Future work is primarily empirical: calibrating parameters per market, validating behavior under more realistic order-flow models, and introducing adaptive controls that respond to changing liquidity conditions. In the bootstrapping setting, a natural lifecycle emerges: as organic depth and two-sided flow appear, FLOAT can reduce quoted size, reduce the number of levels, or widen protections to transition from active seeding toward conservative participation.

References

Avellaneda, M. and Stoikov, S. (2008). High-frequency trading in a limit order book. Quantitative Finance, 8(3):217-224.

Cartea, Á., Jaimungal, S., and Penalva, J. (2015). Algorithmic and High-Frequency Trading. Cambridge University Press.

Glosten, L. R. and Milgrom, P. R. (1985). Bid, ask and transaction prices in a specialist market. Journal of Financial Economics, 14(1):71-100.

Gould, M. D., Porter, M. A., Williams, S., McDonald, M., Fenn, D. J., and Howison, S. D. (2013). Limit order books. Quantitative Finance, 13(11):1709-1742.

Guéant, O., Lehalle, C.-A., and Tapia, J. (2013). Dealing with the inventory risk: a solution to the market making problem. Mathematics and Financial Economics, 7(4):477-507.

Ho, T. and Stoll, H. R. (1981). Optimal dealer pricing under transactions and return uncertainty. Journal of Financial Economics, 9(1):47-73.

Hull, J. C. (2018). Options, Futures, and Other Derivatives, 10th edition. Pearson.

Kyle, A. S. (1985). Continuous auctions and insider trading. Econometrica, 53(6):1315-1335.