
Where to Invest $100,000 According to Experts
Investors face a dilemma. Headlines everywhere say tariffs and AI hype are distorting public markets.
Now, the S&P is trading at over 30x earnings—a level historically linked to crashes.
And the Fed is lowering rates, potentially adding fuel to the fire.
Bloomberg asked where experts would personally invest $100,000 for their September edition. One surprising answer? Art.
It’s what billionaires like Bezos, Gates, and the Rockefellers have used to diversify for decades.
Why?
Contemporary art prices have appreciated 11.2% annually on average
…And with one of the lowest correlations to stocks of any major asset class (Masterworks data, 1995-2024).
Ultra-high net worth collectors (>$50M) allocated 25% of their portfolios to art on average. (UBS, 2024)
Thanks to the world’s premiere art investing platform, now anyone can access works by legends like Banksy, Basquiat, and Picasso—without needing millions. Want in? Shares in new offerings can sell quickly but…
*Past performance is not indicative of future returns. Important Reg A disclosures: masterworks.com/cd.
🚀 Your Algo Edge Just Leveled Up — Premium Plans Are Here!🚀
A year in, our Starter, Pro, and Elite Quant Plans are crushing it—members are live-trading bots and booking 1-on-1 wins. Now with annual + lifetime deals for max savings.
Every premium member gets: ✅ Full code from every article ✅ Private GitHub repos + templates ✅ 3–5 deep-dive paid articles/mo ✅ Early access + live strategy teardowns
Pick your edge:
Starter (€20/mo) → 1 paid article + public repos
Builder (€30/mo) → Full code + private repos (most popular)
Master (€50/mo) → Two 1-on-1 calls + custom bot built for you
Best deals: 📅 Annual: 2 months FREE 🔒 Lifetime: Own it forever + exclusive perks
First 50 annual/lifetime signups get a free 15-min audit. Don’t wait—the market won’t.
— AlgoEdge Insights Team
In this article, I will analyze a topic illustrated in the very last part of the book: the price impact and inventory level problems.
In financial markets, market makers (MMs) ensure liquidity by quoting Bid and Ask prices. They profit from the spread between these prices but bear the risks of inventory imbalance and adverse price movements.
Here I will develop a mathematical model to understand how MMs manage inventory risk while adapting to price impacts caused by traders. I will also provide a Python implementation of the model and analyze the results.
Theoretical Framework
Financial Context
Market makers operate within a limit order book, continuously updating bid and ask quotes. Their profitability depends on:
Spread: The difference between bid and ask prices.
Inventory Management: Avoiding large imbalances to mitigate price risk.
Price Impact: Adjusting to the influence of trade sizes on the mid-price.
Assumptions
Linear Price Impact: The impact of trades on prices scales linearly with trade size.
Market Maker Rationality: The MM maximizes profits by adjusting spreads to manage risk and compensate for price impact.
Trader Behavior: Traders place orders randomly, reflecting noise in market activity.
Mathematical Model
Price Dynamics
Let’s assume a simple dynamics where the Mid price Pₜ evolves based on trade size Qₜ and trade direction Sₜ:

Where:
Qₜ is the trade size at time t,
Sₜ ∈ {−1,+1} represents sell (-1) or buy (+1) trades,
κ > 0 is the price sensitivity parameter.
Bid and Ask Dynamics
Let’s assume that the market maker quotes prices as:

Where:
Δ spread is the base Bid Ask spread to ensure profit,
δ inventory ( = γ ⋅ size of inventory) adjusts for inventory risk,
γ > 0 reflects the MM’s sensitivity to inventory imbalance.
This structure of the prices ensures that the MM widens the spread when inventory risk increases, discouraging further accumulation of the imbalanced position.
The min and max functions are used to ensure that the bid price does not exceed the ask price. This makes sense, as when the MM holds a heavily imbalanced inventory on the bid side, they would want to lower the bid price. This adjustment helps reduce the likelihood of traders selling at the bid price.
On the other hand, there is no need to widen the spread on the ask side. In our model, the MM aims for a more neutral inventory. Lowering the ask price can attract more buy orders, which helps to balance the inventory and reduce the excess of positions on the bid side.
The full end-to-end workflow is available in a Google Colab notebook, exclusively for paid subscribers of my newsletter. Paid subscribers also gain access to the complete article, including the full code snippet in the Google Colab notebook, which is accessible below the paywall at the end of the article. Subscribe now to unlock these benefits!
Inventory Dynamics
The MM inventory evolves with each trade:

This equation tracks the cumulative effect of trades on the MM inventory, a critical metric for risk management.
Market Maker profitability
The MM maximizes cumulative utility:

Where:
The first term captures profits from spreads,
The second term penalizes large inventory imbalances (λ > 0 controls the penalty strength).
This trade-off reflects the MM need to balance short-term profits against long-term risk.
We can call this function utility or profitability. Notice that this is not an actual PnL, but you can interpret it as an expected payoff resulting from both the immediate reward received from getting the spread and the long term inventory value.
Implementation and Simulation
Here is a snippet of the python functions that I used to simulate the model dynamics. You can find the python notebook with the entire code here.
def simulate(P_0: float, spread_base: float, gamma: float, num_steps: int,
kappa: float, lambda_inv: float):
""" This function simulates the model dynamics. The outputs are the relevant quantities for
the simulation, such as the sequence of prices, of bid and ask, of inventory levels
Args:
P_0 (float): Initial price
spread_base (float): Base spread
gamma (float): Inventory adjustment weight
num_steps (int): Simulation steps
kappa (float): Price sensitivity
lambda_inv (float): Inventory risk penalty
"""
# Initial conditions
P = P_0
inventory = 0
prices = [P]
inventory_levels = [inventory]
profits = []
bid_prices = []
ask_prices = []
spreads = []
sides = []
# Simulation loop
for t in range(num_steps):
# Market maker sets bid and ask prices
delta_inventory = gamma * inventory
P_bid = P - spread_base - abs(min(delta_inventory, 0))
P_ask = P + spread_base + max(delta_inventory, 0)
spread = P_ask - P_bid
bid_prices.append(P_bid)
ask_prices.append(P_ask)
spreads.append(spread)
# Simulate random trades
order_size = np.random.randint(1, 10)
side = np.random.choice([-1, 1])
inventory += order_size * side
P += kappa * side * order_size
# Record quantities
profits.append(spread * order_size - lambda_inv * inventory**2)
prices.append(P)
inventory_levels.append(inventory)
sides.append(side)
return prices, inventory_levels, profits, bid_prices, ask_prices, spreads, sidesResults and Analysis
Let us now run some simulation and study some plot. In particular, I will plot the Bid, Ask and Mid price behavior, the MM inventory level and the MM profit.
As a first step, I use the following parameters:
P_0 = 100 # Initial price
kappa = 0.01 # Price sensitivity
gamma = 0.1 # Inventory adjustment weight
spread_base = 0.5 # Base spread
lambda_inv = 0.01 # Inventory risk penalty
num_steps = 200 # Simulation stepsHere the price sensitivity to each trade is very low. This will lead to a low volatility scenario. The inventory adjustment weight and the inventory risk penalty are set to be moderate.
In this simulation, you can see that when the inventory level becomes strongly negative, the MM reacts by lowering both the Bid and the Ask prices. This is what we expected from the theoretical framework.
Another interesting thing to notice is that, with this choice of parameters, the MM profit grows until the risk of bearing the negative inventory equals the the spread.

Let us now see what happens if we introduce some volatility in prices. In particular, I will increase the price sensitivity.
P_0 = 100 # Initial price
kappa = 0.1 # Price sensitivity
gamma = 0.1 # Inventory adjustment weight
spread_base = 0.5 # Base spread
lambda_inv = 0.01 # Inventory risk penalty
num_steps = 200 # Simulation stepsThe prices are now much more volatile, but as you can see, the MM profit and inventory are the same. Even if this is a very simple model, this behavior should tell you a lot about the difference between MM and traders profit opportunities. MM is mostly interested in having a well balanced inventory, with a bearable risk.

We saw that volatility doesn’t impact the MM profitability (in this simple model, of course!). So, the next question arises naturally: when does a MM fail? Let us now decrease the inventory adjustment weight, that regulates the MM perceived risk.
P_0 = 100 # Initial price
kappa = 0.1 # Price sensitivity
gamma = 0.01 # Inventory adjustment weight
spread_base = 0.5 # Base spread
lambda_inv = 0.01 # Inventory risk penalty
num_steps = 200 # Simulation stepsNow the same identical inventory leads to a huge loss for the MM. This is because the spread has tightened. Lowering the MM perceived risk, they are now charging a lower spread. Since the inventory risk penalty is the same, the spread is not sufficient enough to compensate the risk bore by the imbalanced inventory.

Finally, if we lower the inventory risk penalty, we obtain the same behavior of the initial simulations. This is however an extreme case that is not realistic: the MM should have a proper risk aversion and this scenario highly underestimates it.
P_0 = 100 # Initial price
kappa = 0.1 # Price sensitivity
gamma = 0.01 # Inventory adjustment weight
spread_base = 0.5 # Base spread
lambda_inv = 0.002 # Inventory risk penalty
num_steps = 200 # Simulation steps
Conclusion and Further Steps
In this article we modeled how the MMs try to manage their inventory level and how this reflects on prices. We built a simple model that however was able to highlight some key features of the MM behavior.
In further articles I will try to expand on this model and account for:
Nonlinear Price Impact: Replace the linear impact model with a nonlinear function to reflect real-world diminishing returns for larger trades.
Algorithmic Traders: Introduce traders who adapt their strategies dynamically based on market conditions.
Multiple Market Makers: Simulate competition between MMs, each reacting to shared order flows.
Subscribe to our premium content to read the rest.
Become a paying subscriber to get access to this post and other subscriber-only content.
Upgrade

