We propose using *flow trading* as a forward market's bidding and settlement mechanism. Orders define a *portfolio* of financial derivatives and a rule of *when* and at what *rate* to trade this portfolio as a function of prices.

This demonstration will start from the basics, building up to a complete illustration of the flow trading capabilities. A detailed understanding of the mechanics of flow trading is unnecessary to trade successfully. Indeed, we expect most users of the forward market to articulate high-level *trade-to-target* strategies, which can be mapped to flow trading orders in an automated fashion. Nevertheless, there is value in having an understanding of the fundamentals.

The interactive demonstration is best experienced on a computer, though all functionality is available on a mobile device.

Consider a single product portfolio, such as “New York, 10 days ahead, hour starting at 2 pm.” Prices are in units of $/GB. Flow trading lets users express preferences for trading rates — how quickly trade occurs — rather than absolute amounts. Bandwidth trade rates are in GB/hour. For a detailed discussion of the advantages of this approach, see Budish et al. 2023 and Cramton et al. 2023. A motivation for expressing trade rates is the desire to trade slowly to limit adverse price impact. If you want to buy 1000 GB, you can minimize your trading costs by purchasing the 1000 GB over many hours. Buying at a rate of 2 GB/hour over 500 hours will reduce risk and trading costs relative to buying 1000 GB all at once.

Flow trading takes a unified approach to buying or selling a portfolio, treating these outcomes no differently. Rates can be positive or negative: positive rates correspond to buying a portfolio, while negative rates correspond to the selling.

An order consists of two or more points (quantity-price pairs) that define a downward-sloping piecewise linear curve. The simplest order has two points representing a single, downward-sloping line segment. The first point of this segment states the maximum rate the order can sell and the price at which to do so. The second point gives the top speed the order can buy. An illustration of three versions, a buy order, a sell order, and an arbitrage order, is below.

Intermediate prices between the first point's high value and the second point's low value define an intermediate trade rate. If the price is above the high end, the trade rate is the lowest quantity; if the price is below the low point, the trade rate is the highest quantity.

The following example is interactive: the endpoints of the line segment are draggable, as is the price indicator. You can modify the endpoints or the price and explore how the order responds.

-15 15

0 12

Execution: 0.000 @ 6.00

Set Price:

Finally, submitting more than two quantity-price pairs can create a piecewise linear demand curve connecting the dots. This curve can be specified as finely as desired, allowing you to approximate any decreasing continuous demand curve. An interactive curve is below. In addition to dragging points and setting prices, additional control points can be created by clicking on the indicated midpoints.

-15 15

0 12

Execution: 0.000 @ 6.00

Set Price:

The above was for a single product, but flow trading allows trading any portfolio of products. A portfolio is a linear combination of individual products. Trading a portfolio directly is especially desirable in communications because there are many products. Each product is defined by a time and a location.

Portfolios are illustrated with two products. Let's call them `A`

and `B`

. A portfolio can be a single product (`A`

, `B`

), or any weighted sum. `A + 2*B`

means you buy two units of `B`

for every unit of `A`

purchased. The weights can be positive or negative. `A − B`

means you buy one unit of A for every unit of B sold.

The power of flow trading is now appearing. Suppose you are a service provider with thousands of customers. Each customer has demands over the day at a particular location, the customer's anticipated communications over each hour of the day. You aggregate these demands, summing your customers' needs into your total demand in each hour of the day for each location. Flow trading enables you to submit a single order for the portfolio representing this particular load shape over the day. Doing this for each day and location defines a portfolio for each hour over the season or years.

Since these preferences are defined in terms of rates, the orders are robust to any frequency of market clearing. Your orders persist until you decide to change them. A higher clearing frequency smooths the trading across more trading intervals and allows more frequent adjustment to new circumstances. In financial securities, like Apple stock, it may make sense to clear the market every second. A slower frequency, such as once an hour, is sufficient for forward energy. However, as we get closer to real-time, the frequency of clearing should also increase since events, such as a plant outage, have a more pronounced impact on prices and trading strategies as we get closer to real-time.

We will now explain how prices and quantities are determined.

In economic parlance, the flow trading algorithm maximizes as-bid social welfare. The prices naturally fall out of the solution as the dual values to the clearing constraints — supply and demand balance. Products are neither created nor destroyed through trade.

Understanding the mechanism is unnecessary to trade successfully.

Your order instructs the system operator how you desire to trade in response to every possible price. The system operator *always* respects these instructions, so participants need only think about what they would like to do at each price, not how that price is calculated.

Consider 3 participants: Alice, Bob, and yourself. Alice and Bob submit arbitrage
orders. Alice wants to trade `A`

, and Bob wants to trade `B`

. Default curves are provided but can be freely edited.

`A`

) 0.000 @ 0.00

-15 15

0 12

`B`

) 0.000 @ 0.00

-15 15

0 12

You, however, will submit an arbitrage order for `A + w * B`

, where controls are
provided to vary `w`

between -1 and +1. On each of the 3 graphs,
the clearing prices and execution rates are updated instantaneously. The system operator does the same thing but with thousands of orders from hundreds of market participants. The system operator's problem requires a few seconds to find the market clearing prices, but the solution method is identical and always finds unique prices. Further, the quantities are uniquely defined by the prices. Knowing the prices, each participant can determine the amount of each product that the participant trades.

`A + 0 * B`

) 0.000 @ 0.00

-15 15

0 12

-1
+1

Flow trading enables market participants to express preferences simply yet effectively. The most straightforward strategy is the trade-to-target strategy often employed by expert traders. The trader knows where she is, her current position, and where she wants to go, her target. The trade-to-target strategy defines a path from the current to the target position over time. The trader recognizes adjustments are needed to minimize risk and maximize profit. The trader does better by responding to prices: buying more quickly when the price is low and selling more quickly when the price is high.

Let's see how you can employ the trade-to-target strategy with flow trading. Your starting point is your current position. Your target is where you want to be. Say you eventually wish to hold 1200 GB of a particular product. Today, 400 hours ahead of the real-time market, you have a current position of 800 GB. You need another 400 GB to reach your 1200 GB target. One way to get there is to buy 1 GB each hour for the 400 hours. This 1 GB/hour rate of trade would be sensible if prices were at your estimate of the real-time prices. However, prices are apt to move up and down from your expectation of the real-time price. You can reduce trading costs further by employing arbitrage—buy low, sell high. Your demand curve for this product enables this arbitrage. You buy more quickly when the price is below expectations. The slope of your demand curve tells the system operator how your urgency to trade depends on price.

Since you give a slope for each portfolio, it is natural to group your demands into products for which your urgency is similar. For example, you can be more relaxed about deviating from your eventual needs if you are far from the real-time market. Thus, splitting the time into 9 bins, 10-6 years ahead, 5-3 years ahead, 2-1 years ahead, 12-6 months ahead, 5-3 months ahead, 2-1 months ahead, 30-16 days head, 15-5 days ahead, and 4-1 days ahead. For each bin, you could place a single portfolio order with a single slope for all the products in the window. The order would include a vector of weights for each product consistent with your demand profile.

A line is defined by a point (quantity-price pair) and a slope. The slope represents how your urgency to trade changes with price. What point should you define? A natural point is the quantities (trade rates) you desire at the prior prices. The platform does even better by letting you state the quantities you want, assuming the prices that occur with your specified quantity, assuming the other participants do not change their orders.

This single line is all you need when quantities are near current prices. However, adding segments with more slope further away from the current position makes sense to address increasing risk and adverse selection as we move further from expectations. Thus, the additional line segments produce a convex curve for negative quantities and concave for positive amounts.

A simulation is provided below, in which 1 second corresponds to 4 simulated hours. At each simulated hour, changes in the market result in changes in prices, which in turn affect your instantaneous trade rates. Your position is tracked over time and is initialized with the above scenario of 800 GB, targeting 1200 GB within the next 400 hours, with a curve that initially clears +1 GB. The order's curve can be adjusted in real-time to respond to the changing prices. The simulation can be started by clicking "⏵ Start" button.

-15 15

0 12

T = -400

Execution: 1.000 @ 5.67

Position: 800.000

Your orders implicitly include your needs, expectations, risk attitude, and cost of capital. The dependence of orders on needs and expectations was evident in the steps of the prior section. Risk attitude and cost of capital are more subtle. The slopes depend on both. If you are more risk averse or have higher capital cost, you should bid a steeper slope. This can be seen above by specifying near-vertical segments. See Cramton et al. (2024) for an equilibrium analysis.